Autor Téma: Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu  (Přečteno 5816 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7392
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #15 kdy: 30-01-2013, 15:11:34 »
Už si si to zobrazil? Pozor, nemôžeš tam použiť uvodozovky " ale 2 x ' ' !
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Petr01

  • Host
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #16 kdy: 30-01-2013, 15:13:55 »
K těm apostrofům: když se mi to namnoží, jako to máš Ty, tak to píšu takto
'SELECT pocet FROM '#39+label11.Caption+#39' WHERE popis=:popis'. Tím si opticky oddělím, co je Delphi syntaxe a co je pro ten text.

Ukládání datumů: nevím, jak s nimi pracuješ, ale jejich ukládání do textu není zrovna dobrá věc. Nech to na vnitřní reprezentaci toho serveru, zobrazuj si to jak chceš a potom Tě nerozhodí, zda má server nastaven formát dd/mm/yyyy nebo d.mmm/yyyy.

Offline jtfcobra

  • Plnoletý
  • ***
  • Příspěvků: 240
  • Karma: 0
    • Verze Delphi: XE4,XE5 v testovní
    • XDA Developers
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #17 kdy: 30-01-2013, 15:30:39 »
Chyba co vyjizdi

Kód: Delphi [Vybrat]
  1. procedure Trecepce.Button3Click(Sender: TObject);
  2. var
  3. nazev3: widestring;
  4. a,b,c:real;
  5. begin
  6.  begin
  7.  ComboBox1.Clear;
  8.  login2.zquery1.SQL.Clear;
  9.  login2.ZQuery1.SQL.Add('SELECT pocet FROM '#39+label11.Caption+#39' WHERE popis=:popis');
  10.  login2.ZQuery1.ParamByName('Popis').AsString:=combobox3.text;
  11.  login2.ZQuery1.Active := true;
  12.  nazev3 := login2.ZQuery1.Fields.fieldbyname('POCET').AsString;
  13.  login2.ZQuery1.ExecSQL;
  14.  button1.Hint:=nazev3;
  15.  showmessage(nazev3);
  16.  end;
  17.  begin
  18.  a := StrToFloat(button1.Hint);
  19.  b := StrToFloat(edit2.text);
  20.  c:=(b+a);
  21.  button1.Hint:=(FormatFloat('0.00',c));
  22.  login2.zquery1.SQL.Clear;
  23.  login2.ZQuery1.SQL.Add('UPDATE '#39+label11.Caption+#39' SET pocet = :pocet WHERE popis = :popis');
  24.  login2.ZQuery1.ParamByName('Pocet').AsString:=button1.hint;
  25.  login2.ZQuery1.ParamByName('Popis').AsString:=combobox3.text;
  26.  login2.ZQuery1.ExecSQL;
  27.  end;
  28.  Button2.Click;
  29.  Showmessage('Úspešně naskladněno');
  30. end;


Petr01

  • Host
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #18 kdy: 30-01-2013, 15:36:12 »
Nepsal si jaká chyba...

Nevím, proč máš toto:
login2.ZQuery1.SQL.Add('SELECT pocet FROM '#39+label11.Caption+#39' WHERE popis=:popis');
 login2.ZQuery1.ParamByName('Popis').AsString:=combobox3.text;
 login2.ZQuery1.Active := true; --Tohle ještě chápu
 nazev3 := login2.ZQuery1.Fields.fieldbyname('POCET').AsString;
 login2.ZQuery1.ExecSQL; --Tohle ovšem ne. Ten dotaz už máš přeci otevřený a čteš z něj. Proč ho vykonávat znova?
Nemělo by být spíše login2.ZQuery1.Close; ?

Offline jtfcobra

  • Plnoletý
  • ***
  • Příspěvků: 240
  • Karma: 0
    • Verze Delphi: XE4,XE5 v testovní
    • XDA Developers
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #19 kdy: 30-01-2013, 15:41:18 »
to je kravina uz jsem smazal  login2.ZQuery1.ExecSQL;


To prvni vyhleda podle nazvu zbozi a zjisti pocet na sklade


To druhe odecte polozku ze skladu a ulozi....

Petr01

  • Host
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #20 kdy: 30-01-2013, 15:47:02 »
pořád si nenapsal, o jakou chybu se jedná teď.
Ale jeden možný problém vidím:
login2.ZQuery1.ParamByName('Pocet').AsString:=button1.hint;
Ale podle Tvého popisu, by Pocet mělo být číslo a Ty na něj přistupuješ jako na text. Já bych dal
login2.ZQuery1.ParamByName('Pocet').AsInteger:=C; //Pokud je to celé číslo, jinak AsFloat

A ještě obecně, zboží bych vyhledával přes nějaký jeho unikátní číselný ID než přes název. Vyhneš se komplikacím s malými/velkými písmeny, znakovou sadou atd.


Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #21 kdy: 30-01-2013, 16:03:20 »
Jen bych vás moc pěkně poprosil, nepoužívejte věci jako
Kód: Delphi [Vybrat]
  1.  sql := 'SELECT * FROM tabulka WHERE id=''' + editID.Caption + '''';
Teď vám to klidně může fungovat, ale zaděláváte si na krásný SQL injection (který funguje i pro normální aplikace, nejen pro webové)! Používejte vhodné escapování, třeba:
Kód: Delphi [Vybrat]
  1.  sql := 'SELECT * FROM tabulka WHERE id=' + AnsiQuotedStr(editID.Caption, '''');

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #22 kdy: 30-01-2013, 16:04:12 »
Chyba co vyjizdi
Jména databázových objektů se nedávají do apostrofů!

Tzn. místo:
Kód: Delphi [Vybrat]
  1. login2.ZQuery1.SQL.Add('SELECT pocet FROM '#39+label11.Caption+#39' WHERE popis=:popis');
piš:
Kód: Delphi [Vybrat]
  1. login2.ZQuery1.SQL.Add('SELECT pocet FROM '+label11.Caption+' WHERE popis=:popis');

Ovšem s ohledem na předchozí post si dej zatraceně záležet na tom, že veškeré hodnoty, kterých může jméno tabulky nabývat, pocházejí od tebe - tzn. že uživatel nemůže vymyslet novou hodnotu, třeba:
Kód: Delphi [Vybrat]
  1. zbozi UNION SELECT heslo FROM uzivatele --
« Poslední změna: 30-01-2013, 16:06:54 od pepak »

Offline jtfcobra

  • Plnoletý
  • ***
  • Příspěvků: 240
  • Karma: 0
    • Verze Delphi: XE4,XE5 v testovní
    • XDA Developers
Re:Mysql 5.5 s komponentou Zeous nejde mi zmazat záznam prosím radu
« Odpověď #23 kdy: 30-01-2013, 16:09:42 »
super funguje to ...moc děkuji