MySQL Lösungen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ne, da kommt aber "This operation cannot used on an inactive Dataset" ich kann doch n Query nicht öffnen oder ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Doch, wenn du daten Lesen willst, musst du das ganze mit Query.Open öffnen und nicht mit ExecSQL.
Zum INSERT allerdings ExecSQL.

Schau mal in die LazSnippets ;)
Johannes

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Ist aber derzeit nur im SVN zum Selbstkompilieren :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

hab aber kein LaTex da, kann mir mal jemand ne pdf zukommen lassen, oder einfach schreiben wie ich die daten in meine SQL Tabelle bekomme ?
Abfrage scheinen ja ganz gut zu funktionieren.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

af hats gerade veröffentlicht, siehe News

ansonsten ungefähr so:

Code: Alles auswählen

INSERT INTO NEW_TABLE (teststring)  VALUES (:XSTRING);
wenn du das in die SQL-Property der Query schreibst, kannst du die Parameter belegen mit:

Code: Alles auswählen

Query.Params.ParamByName('XString').AsString := 'blabla'
//usw.
Alternativ kannst du die Query auch gleich zusammensetzen, also anstatt der Parameter die Werte einsetzen, sie der SQL-Eigenschaft zuweisen und genauso ausführen.

Danach ein Query.ExecSQL und es sollte eigentlich gehen.
Johannes

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

ja, ich muss aber vorher die Datenbank mit nem Select abfragen damit die Query Active ist ? Den Hintergrund schnall ich nich so ganz aber ich probiers jetzt mal.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Kurzfassung: Bei SELECT nimm open, bei allen anderen ExecSQL.

Wenn du ein einfaches select verwendest, dann kannst du auch direkt in der Datenmenge was löschen einfügen oder änder. Die query probiert dann das ganze in die DB zu bringen und mit ApplyUpdates landes es auch sicher darinnen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das mit Open und Exec hab ich ja schon lang geschnallt nur fürs insert brauch ich ApplyUpdates und das kann ich nicht ausführen ohne das die Query Active ist, also muss ich vor dem insert n select ausführen... Quark.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Der Witz an der Geschichte ist jetzt das das auch nicht funktioniert. Wenn ich ExecSQL mit nem Insert auf n Aktives Dataset ausführe bekomm ich die Fehlereldung das ich das nicht mit nem aktiven Dataset machen darf.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ich frag mich die ganze Zeit, wofür ihr ApplyUpdates benötigt. Commit übernimmt die Änderungen und über CommitRetain wird die Verbindung gehalten und ne neue Anfrage bzw. nen Neustart der Anwendung liefert dann die neu Eingefügten Datensätze.

Die Verbidung muss natürlich aktiv sein, aber ansonsten kann man doch direkt das Insert über die Query ausführen und fertig. Und die Query muss natürlich wieder geschlossen werden, weil ja die Abfrage geleert werden muss.
Johannes

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

@christian: Entweder nur mit Open oder nur mit ExecSQL. Die Fehlermeldung ist somit klar. Wenn du unbedingt selbst das mit dem Insert (update,delete) machen willst, warum glaubst Du gibt es UpdateSQL, InsertSQL und DeletSQL. Dann kannst du vorgeben was gemacht werden soll.

@monta Du verwendest explizit die Transaktionsteurung dafür, meistens wird für einfache Statements die implizite genommen - sprich der User belastet sich nicht damit. ApplyUpdates brauchst du dann damit die Daten aus dem lokalen Buffer zurück endgültig in die DB kommen. Ausserdem ist nach einen ExecSQL die Query immer 'zu'. Wozu auch aktiv, es gibt ja keine Datenmengen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ah, danke. Jetzt weis ich auch, wieso ich nie ApplyUpdates verwende, weil ich es direkt ausführe, abgesehen davon läuft quasi jedes Insert bei mir über ne StoredProc.

Mit 'zu' bezog ich mich auf die tatsache, wenn man vorher ein SELECT ausgeführt haben sollte.
Johannes

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Langsam verstehe ich auch, warum die SQLdb nicht so gerne verwendet wird. TSQLQuery ist eine sehr komplexe, heikle Komponente. Sie reagiert auf kleinste Unzulänglichkeiten sehr empfindlich.

Sie macht nämlich genau das was man ihr sagt und nicht das was man will.

Vor allen probiert sie etwas aus jeder Situation zu machen und das geht bei komplexeren Statements komplett daneben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Für die ganz mutigen: Probiert mal SQLdb mit FPC 2.3.1 aus. Es hat da einige Änderungen (inkl. Bugfixes) gegeben. Die Änderungen sollen auch in FPC 2.2.2 einfliessen (Termin voraussichtlich zum Jahreswechsel).

knight

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Also es geht erstmal aber zufrieden bin ich damit nicht.
ich öffne das query mit einer select um rauszufinden ob der datendatz schon existiert.
wenn nicht muss ichs wieder schliessen damit ich das insert machen kann.
und nachdem ich die inserts durch hab muss ich dann nochmal n komplett sinnloses select machen damit ich applyupdates ausführen kann.
das was mich am meissten stört ist das ich zig selects machen muss um erstmal rauszufinden ob die datensätze da sind.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten