![]() |
Firebird/Interbase: TIBDataSet: kann keine Daten einfügen
Das Thema wurde bereits mehrfach angesprochen.
Ich habe es immer noch nicht kapiert. Ich habe eine alte Anwendung für eine MS-Acess-Datenbank Mit AdoDataSet muss ich nur AdoDataSet1.Append oder AdoDataSet1.Edit eingeben, dann in den Datengebundenen DbEdit-Feldern meine Eingaben machen und anschließend mit AdoDataSet1.Post die Daten sichern. Das Post wird sogar automatisch durchgeführt beim Scrollen zu einem anderen Datensatz Jetzt möchte ich die Anwendung für Firebird umschreiben Muss ich tatsächlich alle Eingaben in ungebundene Edit-Felder machen, danach einen SQL-Befehl mit dem Inhalt der Editfelder schreiben und mit IBDataSet1.InsertSQL := 'Insert ...' oder IBDataSet1.UpdateSQL := 'Update ....' die Daten sichern? Dann muss ich ja fast alles umschreiben ?!? :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: |
Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge
Hallo Ralf,
nein musst du natürlich nicht. Du kannst die DBEdit Felder ja auch mit IBQuery oder IBTable oder IBDataset Komponenten verbinden, da sie ja alle über eine DataSource Komponente verbunden werden. Bei IBTable kannst du sogar den alten Code weitgehend übernehmen. Am effizientesten ist aber IBDataset. |
Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge
Ich habe folgendes ausprobiert und bin langsam entnervt, dass es einfach nicht klappt:
Delphi-Quellcode:
GetNextNumber holt sich für das AutoIncrement-Feld aus folgender Funktion die Zahl
DM.IBDataSet1.Close;
DM.IBDataSet1.InsertSQL.Text := 'Select * from UDAT'; DM.IBDataSet1.Open; DM.IBDataSet1.Edit; DM.IBTransaction.Active := True; DbEdit1.Text := '15.10.2004'; DbEdit2.Text := 'Stehle, Ralf'; DM.IBDataSet1.FieldByName('ID').AsInteger := GetNextNumber; DM.IBTransaction.Commit; DM.IBDataSet1.Post;
Delphi-Quellcode:
Es sieht zunächst alles so schön aus, aber sobald das Post kommt sind die Daten wieder weg !!! Auch wenn ich statt 'Select * from UDAT' eine Insert-Anweisung schreibe, kommt es auf das gleiche heraus. Ich habe eine Select-Anweisung gewählt, da ich ja noch nicht weiß, welche Werte eingefügt werden sollen. Die Werte möchte ich ja in den DBEdit-Feldern editieren
function GetNextNumber: integer;
begin DM.IBQuery1.Active := False; DM.IBQuery1.SQL.Text := 'Select Gen_ID(GEN_UDAT, 1) AS ID from rdb$database'; DM.IBQuery1.Active := true; if DM.IBQuery1.RecordCount >= 0 then result := DM.IBQuery1.FieldByName('ID').AsInteger + 1 else result := 1; end; |
Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge
Ist noch jemand interessiert an dem Thema ?
Ich habe glaube ich eine Lösung gefunden, um mit TIBDataSet alle Aktionen korrekt ausführen zu können:
Delphi-Quellcode:
Anscheinend muss für alle Aktionen eine SQL hinterlegt werden mit Parametern für jedes Feld, das geändert werden soll
DM.IBDataSet1.Close;
DM.IBDataSet1.SelectSQL.Text := 'Select * from UDat WHERE CAST(Untersuchungsdatum AS DATE) = CURRENT_DATE'; DM.IBDataSet1.InsertSQL.Text := 'INSERT INTO UDAT (UntersuchungsDatum, Uhrzeit, Untersuchung, Patient, Station, Untersucher, Abteilung) VALUES (:UntersuchungsDatum, :Uhrzeit, :Untersuchung, :Patient, :Station, :Untersucher, :Abteilung)'; DM.IBDataSet1.ModifySQL.Text := 'UPDATE UDAT SET UntersuchungsDatum=:UntersuchungsDatum, Uhrzeit=:Uhrzeit, Untersuchung=:Untersuchung, Patient=:Patient, Station=:Station, Untersucher=:Untersucher, Abteilung=:Abteilung WHERE ID=:OLD_ID'; DM.IBDataSet1.RefreshSQL.Text:= 'Select ID,UntersuchungsDatum, Uhrzeit, Untersuchung, Patient, Station, Untersucher, Abteilung from UDat WHERE ID=:ID'; DM.IBDataSet1.GeneratorField.Generator := 'GEN_UDAT'; DM.IBDataSet1.GeneratorField.IncrementBy := 1; DM.IBDataSet1.Open; Außerdem habe ich noch Generator-Anweisungen gefunden, dass endlich das AutoIncrement meines ID-Feldes funktioniert Ich hoffe das ist jetzt der Stein der Weisen :gruebel: |
Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge
Hallo Ralf,
war leider nicht online, hätte die sonst die Fehler genannt. Gut, dass du es schon selbst gelöst hast. Zur Transaktionskontrolle wollte ich noch anmerken, dass du zuerst mit Post die Daten schreiben musst und erst dann mit Commit die Änderungen endgültig machst. |
Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge
Das sieht nach IBX aus. Da mußt Du doch dem Dataset direkt schon das alles zuordnen. Ich sage nur Insert und das Dataset benutzt dann das, was vordefiniert ist. Ich verwende allerdings FIBplus. Da definiere ich nur das SelectSQL und der Rest wird automatisch generiert. Muß man das bei IBX für jedes Dataset und insert, modify usw. von Hand machen ?? :shock: Egal. Aber ich kann mir nicht vorstellen, daß alles im Source nochmals gemacht werden muß.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz