Delphi7-en mysql tábla feltöltése

Delphi7-en mysql tábla feltöltése
2010-02-19T06:20:53+01:00
2010-02-26T08:25:37+01:00
2022-11-16T19:45:39+01:00
pesra
Sziasztok! Kellene nekem egy egyszerű példa arra, hogyan tudok Delphi 7 alól mysql adatbázisba adatokat felvinni. Zeos-sal kapcsolódtam egy anyagok nevű adattáblához. Ennek a táblának az x mezejébe kellene edti mezővel felvinni adatokat. Ebben az esetben mi a korrekt eljárás? (megnyitás, szerkesztés, lezárás, frissítés). A formon megnyomok egy gombot és az edit mező tartalmát beteszi az adattáblám egyik mezejébe. Segítséget köszönöm!
Mutasd a teljes hozzászólást!
Hi !

Az a gond hogy először meg kell ad az SQL text et majd utána a paramétert, akkor jó lesz.
Ja és a paraméter az SQL text ben : al kezdődik
(én így szoktam :pinValtozo)

Én még ennyivel egészíteném ki

ZQuery1.SQL.Clear; ZQuery1.SQL.Text:='INSERT INTO anyagok (ANYAGSZAM)'+ 'VALUES (:inValtozo) '); ZQuery1.ParamByName('inValtozo').AsString:=Edit1.Text; ZConnection.StartTransaction; try ZQuery1.ExecSQL; ZQuery1.Commit; except on E:Exception do begin ZConnection.Rollback; ShowMessage('Hiba: '+E.Message); end; end;


aszamos
Mutasd a teljes hozzászólást!

  • Mutasd a teljes hozzászólást!
  • Gomb eseményébe (Ez elött valahol meg kell hívni egy Zquery.Active:=True; eljárást):
    ZQuery.insert; Zquery.FieldByName('Valami').value=Edit1.text; Zquery.FieldByName('Valami2').value=3; Zquery.Post;
    Mutasd a teljes hozzászólást!
  • Köszönöm!! Kipóbálom!
    Mutasd a teljes hozzászólást!
  • Kipróbáltam amit írtál de akárhogy próbálom hibával elszáll!!
    "Project Project1.exe raised exception class EZDatabaseError with message 'SQL query is empty'. Process Stopped....."
    Valami még nem tetszik neki.

    Én viszont ezzel a megoldással próbálom:

    ZQuery1.SQL.Clear; ZQuery1.ParamByName('inValtozo').AsString:=Edit1.Text; ZQuery1.SQL.Add('INSERT INTO anyagok (ANYAGSZÁM)'+ 'VALUES ('inValtozo') ');

    De ez sem igazán működik.

    Nem tudom ez vajon célravezető megoldás-e? Érdemes-e ebbe az irányba elmenni vagy inkább a Te 'megoldásod' az útirány?
    Mutasd a teljes hozzászólást!
  • Hi !

    Az a gond hogy először meg kell ad az SQL text et majd utána a paramétert, akkor jó lesz.
    Ja és a paraméter az SQL text ben : al kezdődik
    (én így szoktam :pinValtozo)

    Én még ennyivel egészíteném ki

    ZQuery1.SQL.Clear; ZQuery1.SQL.Text:='INSERT INTO anyagok (ANYAGSZAM)'+ 'VALUES (:inValtozo) '); ZQuery1.ParamByName('inValtozo').AsString:=Edit1.Text; ZConnection.StartTransaction; try ZQuery1.ExecSQL; ZQuery1.Commit; except on E:Exception do begin ZConnection.Rollback; ShowMessage('Hiba: '+E.Message); end; end;


    aszamos
    Mutasd a teljes hozzászólást!
  • ZQuery1.close();

    //a kódod amit irtál

    ZQuery1.Open(); vagy Exexutesql();

    Nem használtam zeost, de először zárd be a datasetet, csak utána módosítsd az sql-t.

    ez a 2 sor így elég érdekesen fest:
    ZQuery1.ParamByName('inValtozo').AsString:=Edit1.Text;
    ZQuery1.SQL.Add('INSERT INTO anyagok (ANYAGSZÁM)'+
    'VALUES ('inValtozo') ');

    sztem ez a 2 sor fel van cserélve...

    Amugy ha így rakod össze az sql-t akkor nem is kell a parambyname..., mivel direktben benne lesz az érték amit hozzáadsz, bár a '+' operátorért nem tom miért nem kiabál a fordító.
    Mutasd a teljes hozzászólást!
  • elírtam

    nem ZQuery1.commit hanem ZConnection.commit
    Mutasd a teljes hozzászólást!


  • Minek paraméterezgetni? Csak kavar bele mindenbe, átláthatatlanabb a lekérdezés is.

    Zquery.Sql:='Select * FROM tabla'; Zquery.Active:=True; Zquery.Open; ZQuery.insert; Zquery.FieldByName('Valami').value=Edit1.text; Zquery.FieldByName('Valami2').value=3; Zquery.Post;

    Persze a connection add meg neki.
    Mutasd a teljes hozzászólást!

  • Zquery.Active:=True; Zquery.Open;
    Biztos ami biztos?
    Mutasd a teljes hozzászólást!
  • Szia Kipróbáltam a tőled kapott kódot. A ZConnection.commit és a ZConnection.Rollback hibát jelez akármit csinálok vele. de ha kiveszem működik. Egyébként mire is jók ezek?? A többiek megoldásait is próbálgatom és nagyon köszönöm a segítséget.
    Mutasd a teljes hozzászólást!
  • Az a baj hogy nekem ez a megoldás a fentebb leírt hibával elszáll!
    Mutasd a teljes hozzászólást!

  • hibát jelez


    ebből rá kellene jönni mi a hiba
    Mutasd a teljes hozzászólást!
  • Nem tudom, nálam ha activá teszem a queryt és utána rögtön meghívok egy editet, akkor kiírja h nincs megnyitva a query. Ezért kell az open.
    Mutasd a teljes hozzászólást!
  • Ha ezt a kódot beteszed egy gomb eseményre, beállítod a Zquery komponensnek a Connactiont, valamint itt a kódban átírod a SQL.text után lévő "tábla kijelölést" pl erre (Select * FROM ezazentablamamiveldolgozniakarok). Valamint a "Valami" és "Valami2" helyére bírsz a táblából egy-egy mezőt (aminek a típusa nem blob vagy text) akkor hibát jelez? Érdekes...
    Zquery.Sql.Text:='Select * FROM tabla'; Zquery.Active:=True; Zquery.Open; ZQuery.insert; Zquery.FieldByName('Valami').value=''; Zquery.FieldByName('Valami2').value=3; Zquery.Post;

    És mégis milyen hibát ír ki?
    Mutasd a teljes hozzászólást!

  • procedure TDataSet.Open; begin Active := True; end;

    Ezért furcsállom amit mondasz.
    Mutasd a teljes hozzászólást!
  • Hi

    Bocs hogy eddig nem válaszoltam de nekem nem ment a prog.hu


    Idézek:
    "5. A teljes körű "adatnyelv" szabályai:
    A rendszernek legalább egy olyan relációs nyelvet kell támogatnia, amelynek
    (a) lineáris a szintaxisa,
    (b) interaktívan és alkalmazási programokon belül is lehet használni, továbbá
    (c) támogatja az adat definiáló műveleteket (beleértve az adatok megjelenítési képeinek meghatározására szolgálókat), az adatmódosító (manipulációs) műveleteket (frissítés és visszakeresés is), biztonsági és jósági (integritási) korlátokat, valamint a tranzakció kezelési műveleteket (begin, commit, és rollback: elkezdés, jóváhagyás és visszagörgetés)."

    a try ágban öbb SQL t is lefuttathatsz (exec) majd a commit
    csak akkor hajtódik végre ha ez mind hibátlan volt)
    az exec ágba akkor fut bele ha kivétel keletkezik a try ágban.
    Ekkor a rollback hajtódik végre visszagörgeti az összes végrehajtott műveletet




    Lehet tudni hogy a commit -nál mi a hiba ?

    aszamos
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítséget. Próbálgatom amiket írtál. De úgy néz ki a te megoldásaid a nyerők.
    Mutasd a teljes hozzászólást!
  • Bocsánat a késedelmes válaszért de kicsit elvoltam havazva. Az a hiba hogy: Undeclared identifier:'commit'. A Rollback-nál ugyan ez a helyzet.

    Nem ismeri a fordító! Hol kell ez deklarálni? Vagy a Zeos-om a hiányos?
    Mutasd a teljes hozzászólást!
  • Hi !

    Azt én ott elírtam.

    nem ZQuery.commit hanem ZConnection.commit (vagy amilyen nevet
    adtál)

    de ha . ot nyomsz akkor előjönnek aválasztható property -k.

    Esetleg benyomnád a kódrészletet ? Hátha úgy meglátom az okát.

    aszamos


    Mutasd a teljes hozzászólást!
  • Szia!

    Nos a hiba : .... EZDatabaseError with message 'Invalid operation in AutoCommit mode'. Process stopped....
    A ZConnectionnál erre a sorra mutat:
    raise EZDatabaseError.Create(SInvalidOpInAutoCommit);

    ez pedig a kód amit használok:


    procedure TForm1.Button1Click(Sender: TObject); begin ZQuery1.SQL.Clear; ZQuery1.SQL.Text:='INSERT INTO anyagok (ANYAGSZÁM,WE_DÁTUM,WE_NR)'+ 'VALUES(:inValtozo1,:inValtozo2,:inValtozo3) '; ZQuery1.ParamByName('inValtozo1').AsString:=Edit1.Text; ZQuery1.ParamByName ('inValtozo2').AsDateTime:=DateTimePicker1.Date; ZQuery1.ParamByName('inValtozo3').AsString:=Edit2.Text; try ZQuery1.ExecSQL; ZConnection1.Commit; ZTable1.Refresh; Edit1.Text:=''; Edit2.Text:=''; except on E:Exception do begin ZConnection1.Rollback; ShowMessage('Hiba: '+E.Message); end; end; end;


    Ha kiveszem a ZConnection1.commit; soert tökéletesen megy a program. Mi lehet a hiba?
    Mutasd a teljes hozzászólást!
  • Ha a Connection AutoCommit property-je True-ra van állítva, akkor a Commit parancs felesleges (és ezek szerint hibát is okoz).
    Egyébként, ha a táblád nem InnoDB típusú, akkor tranzakciókat nem is tud kezelni, tehát a Commit, Rollback felesleges.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd