AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Commit geht nicht (SQL)
Thema durchsuchen
Ansicht
Themen-Optionen

Commit geht nicht (SQL)

Ein Thema von Hansa · begonnen am 21. Aug 2003 · letzter Beitrag vom 1. Sep 2003
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#31

Re: Commit geht nicht (SQL)

  Alt 28. Aug 2003, 08:25
Hi Hansa,

Du hast recht, irgendwo muss ein Post auftauchen, per Code oder über eine datensensitive Komponente (beim Wechseln des Datensatzes), denn Commit postet ja nicht automatisch. Daher ist es eine recht gängige Methode, vor dem Schließen einer Datenmenge nachzuschauen, ob der aktuelle Datensatz gerade in Arbeit ist. Ist er das, kann man posten, bzw. wie in Deinem Fall, vorher fragen:
Delphi-Quellcode:
if MessageDlg('speichern ?',mtInformation, [mbYes, mbNo], 0) = mrYes then
  with Dataset1 do begin
    if State in [dsEdit, dsInsert] then Post;
    Transaction.Commit;
  end else
    Transaction.Rollback;
Harry Boldt
Gruß, harrybo
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#32

Re: Commit geht nicht (SQL)

  Alt 28. Aug 2003, 11:48
Ja, in der Richtung ist wahrscheinlich irgendwas verkehrt. Aber was ? Wo genau muß ich das edit, insert, open, close usw. aufrufen ? Die SQL-Statements enthalten ja bereits ein INSERT soll ich trotzdem noch DS.insert aufrufen ? Wenn ja wann ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#33

Re: Commit geht nicht (SQL)

  Alt 28. Aug 2003, 13:37
Hi Hansa,

Deine Datasets haben unterschiedliche SQL-Properties fürs Selektieren, Inserten, Updaten, Löschen. Das Problem liegt wohl darin, dass Du über SelectSQL inserten willst (siehe Dein Code-Beispiel weiter oben).

Trage jeweils die SQL Statements in die Properties UpdateSQL, InsertSQL DeleteSQL des Datasets ein (geht auch über rechte Maustaste über einen bequemen Dialog, der Dir, nachdem Dur das SelectSQL definiert hast, automatisch die entsprechenden Statements einträgt). Dann sollte es klappen. Natürlich brauchst Du dann nicht mehr Dein SelectSQL umständlich zu switchen.
Harry Boldt
Gruß, harrybo
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#34

Re: Commit geht nicht (SQL)

  Alt 28. Aug 2003, 13:56
Zitat von harrybo:
...Trage jeweils die SQL Statements in die Properties UpdateSQL, InsertSQL DeleteSQL des Datasets ein...
Wie meinst Du das genau ? Daß das SelectSQL für den Zweck hier ungeeignet ist, wurde ja bereits gesagt. Das seltsame ist aber trotzdem, wenn ich einen neuen Datensatz einfüge scheint der da zu sein. Gebe ich dasselbe wieder ein wird der update-Teil durchlaufen, siehe Quelltext. Letztenendes landet dann aber gar nichts in der DB.

Falls es eine Spezialität von FIBplus sein sollte, weil es in deren DataSet kein ExecSQL gibt: die Frage liegt bei denen auf dem Tisch. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#35

Re: Commit geht nicht (SQL)

  Alt 28. Aug 2003, 14:44
Hi Hansa,

ich arbeite noch mit IBX, da Du mir leider noch nicht FIBPlus aus Deiner Sammelbestellung geliefert hast ;-). Dennoch: Dein FIBPlus Dataset hat neben SelectSQL bestimmt auch die Properties UpdateSQL, DeleteSQL, InsertSQL. Wie gesagt: Properties, das sind erstmal Strings, die ein SQL Statement enthalten. Diese Properties arbeiten nun mit den Methoden Open, Post und Delete zusammen.

Angenommen Du öffnest ein Dataset mit
Code:
Dataset1.Open;
, dann wird zum Öffnen der String verwendet, der gerade in Dataset1.SelectSQL steht.
Code:
Dataset1.Post;
schickt die Insert bzw. Update SQL-Ausführungsanweisung aus Dataset1.InsertSQL, bzw. Dataset1.UpdateSQL an die DB, in Abhängigkeit davon, welchen Status Dataset1 hat (dsInsert oder dsUpdate).

Mit Dataset1.Delete verhält es sich entsprechend.

In Deinem Fall heißt das: wenn Du gerade einen Insert Befehl in SelectSQL Deines Datasets stehen hast, dann wird beim nächsten Öffnen mit Dataset1.Open ein Datensatz eingefügt, gnadenlos, ohne Meckern seitens der DB.

Ich hoffe, das bringt etwas Licht ins Dunkel. Möglicherweise erfasse ich Dein Problem auch nicht und erzähle Dir Binsenweisheiten - dann soll's denen gewidmet sein, denen es weiterhilft.
Harry Boldt
Gruß, harrybo
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#36

Re: Commit geht nicht (SQL)

  Alt 29. Aug 2003, 12:33
HI Harrybo,

Hansa macht das schon richtig! Klar, die "Standardanwendung" sieht vor, dass die SelectSQL ausgefüllt wird und die INsert-/Update-/Delete-SQL von der Komponente weitestgehend selbst ausgefüllt wird.

Allerdings kann man auch in der SelectSQL ein beliebiges SQL-Statement reinschreiben und mit ExecSQL (bei IBX) ausführen.
@Hansa: Sollte das bei FIBPlus nicht gehen, dann schau dich bei den FIBPLus nach einer Komponente vrgl. mit TIBSQL um, vielleicht auch TIBQuery. Mit der Kompo kannst Du das auf alle Fälle machen...

Grüße
Lemmy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#37

Re: Commit geht nicht (SQL)

  Alt 29. Aug 2003, 12:49
Hi Lemmy,

konnte ja nur eine Frage der Zeit sein, bis ich Dich auf den Plan rufe. Ich habe zu dem Problem da gestern eine Antwort von FIBplus erhalten. Harrybo hat die schon, aber ich will sie keinem vorenthalten. Ich selber kann mich aber wohl erst heute abend intensiv damit befassen. Sieht aber auf den ersten Blick so so aus, als liefe das mit FIBplus auf eine FIBquery hinaus.
Angehängte Dateien
Dateityp: doc harrybo.doc (27,0 KB, 16x aufgerufen)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#38

Re: Commit geht nicht (SQL)

  Alt 29. Aug 2003, 17:47
Hi Lemmy, hi Hansa,

ich glaube, mir geht langsam die Puste aus, ich versuch's trotzdem nochmal: Hansa macht es nicht richtig, wenn am Dataset irgendwelche Data-aware components hängen. Etwa ein Grid. Wird z.B. ein Datensatz im Grid editiert und man wechselt den Datensatz, schickt das Dataset die SQL-Anweisung an den Server, die in Dataset1.UpdateSQL steht, incl. Post. Warum sollte man also seine SelectSQL ständig verbiegen, wenn man für sämtliche Schreibvorgänge eigene Properties hat, die man bequem parallel zueinander definieren kann?

Natürlich kann man in SelectSQL beliebige Statements reinschreiben, die dann auch ausgeführt werden, sagte ich ja auch schon, aber warum? Wenn in UpdateSQL, InsertSQL, DeleteSQL die entsprechenden SQL Anweisungen stehen, reicht ein Post irgendwo im Code, und es wird brav gespeichert. Daher verstehe ich auch nicht, lieber Hansa, warum es jetzt auf ein Query hinauslaufen soll, das eignet sich gerade nicht zum Schreiben in die DB, dann nimm lieber eine reine SQL Komponente, allerdings kann man an diese keine datensensitiven Objekte ranhängen.

Was ich gestern Hansa geantwortet habe:
Code:
ich will                            geeignete Komponente
--------------------------------------------------------- 
Daten über Grid manipulieren        TIBDataset
Daten in Grid nur anzeigen          TIBQuery
direkt mit der DB arbeiten          TIBSQL
TIBSQL hat daher auch ExecSQL, da es zum direkten Ausführen von SQL Befehlen konzipiert wurde. Wenig Speicherbedarf und um ein zigfaches schneller als die beiden anderen Komponenten. Du kannst mit TIBSQL etwa in allen Datensätzen einen Wert in ein Feld schreiben. Selbst, wenn das tausende sind, zuckt der Server höchstens mal kurz. Klar, das geht auch mit Queries, aber die sind nun mal zur Datenansicht, also für den Lesezugriff da, schleppen auch alles mit, was man dafür braucht, also wozu dann instanzieren für ein einfaches INSERT...?
Harry Boldt
Gruß, harrybo
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#39

Re: Commit geht nicht (SQL)

  Alt 30. Aug 2003, 10:07
Hi Harrybo,

ja, Du hast recht, aber nur fast!

Jeff Overcash hat einmal gesagt, dass die TIBQuery nur aus kompatibilitätsgründen bei IBX dabei ist, anstelle der TIBQuery sollte immer die TIBDataSet verwendet werden. Es kann aber auch sein, dass sich inzwischen der Stellenwert die TIBQuery geändert hat und ich das nicht mitbekommen habe.....

Natürlich ist die TIBSQL schneller, da diese weniger Overhead mit rumschleppen muss als die TIBDataSet. Hast Du schon mal mit Int64 in deiner Datenbank gearbeitet?? Sobald Du diese Werte bei ParamByName zuweisen willst, wird es beim TIBSQL/TIBStoredProcedure richtig aufwändig, die diese beiden Kompos keine Int64-Felder unterstützen!!! Aus diesem Grund arbeite ich (fast) nur noch mit TIBDataSet....

Grüße
Lemmy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#40

Re: Commit geht nicht (SQL)

  Alt 1. Sep 2003, 10:54
Hi Leute,

das ganze geht jetzt und es sieht so aus, daß der Hund bei FIBplus begraben ist. 8) Ist aber nichts schlimmes. Man hat mir gesagt, ich solle gefälligst pFIBQuery verwenden ! Jetzt habe ích das gemacht und siehe es geht alles wie gewünscht. D.h. ich setze die SQL-Statements und mit ExecQuery kommt dann das richtige Ergebnis.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz