AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird/Interbase: TIBDataSet: kann keine Daten einfügen
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird/Interbase: TIBDataSet: kann keine Daten einfügen

Ein Thema von Ralf Stehle · begonnen am 15. Okt 2004 · letzter Beitrag vom 16. Okt 2004
Antwort Antwort
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#1

Firebird/Interbase: TIBDataSet: kann keine Daten einfügen

  Alt 15. Okt 2004, 16:19
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 ?!?

Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge

  Alt 15. Okt 2004, 18:39
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#3

Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge

  Alt 15. Okt 2004, 20:49
Ich habe folgendes ausprobiert und bin langsam entnervt, dass es einfach nicht klappt:
Delphi-Quellcode:
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;
GetNextNumber holt sich für das AutoIncrement-Feld aus folgender Funktion die Zahl
Delphi-Quellcode:
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;
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
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#4

Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge

  Alt 15. Okt 2004, 22:38
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:
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;
Anscheinend muss für alle Aktionen eine SQL hinterlegt werden mit Parametern für jedes Feld, das geändert werden soll

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

Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge

  Alt 16. Okt 2004, 18:11
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Hansa

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

Re: Firebird/Interbase: TIBDataSet: kann keine Daten einfüge

  Alt 16. Okt 2004, 19:36
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 ?? Egal. Aber ich kann mir nicht vorstellen, daß alles im Source nochmals gemacht werden muß.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:42 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