Problem bei schreiben in DB
-
Hallo alle zusammen,
ich habe folgendes Problem:
In einem Formular habe ich : TIBDatabase, TIBTransaction, TIBUpdateSQL, TIBDataSet, TDataSource, TDBNavigatior und TDBGrid. Die Komponente sind miteinander verknüpft, so das nach dem Programmstart auf der Inhalt meiner Tabelle "ADRESSEN" aus der Datenbankdatei "ADRESSBUCH.GDB" zugreifen kann.
Über Navigator kann ich neuen Eintrag hinzufügen und in die Felder von DBGrid reinschreieben auch über DBNavigator speichern und refreshen, aber der Inhalt wird nicht in die DB-Datei reingeschrieben, so das neuem Programmstart sind die Werte nicht mehr da. Habe schon mehrmals Hilfe gelesen, keinen Anhaltspunkt gefunden.
Hatte jemand änliches Problem schon gehabt?
Hat jemand Annung wo könnte das Problem liegen?
-
Gute Frage...

Wird die Transaktion 'commited'? Sind die Insert- und Update-Statements in der TIBUpdateSQL korrekt?
-
Ja! Die Transaktion ist auf "TACommit".
Die Statements habe ich von TIBUpdateSQL genierieren lassen:
update ADRESSEN set VORNAME = :VORNAME, NAME = :NAME, STRASSE = :STRASSE, HAUSNUMMER = :HAUSNUMMER, PLZ = :PLZ, ORT = :ORT, TELEFON = :TELEFON, MOBIL = :MOBIL, FAX = :FAX where VORNAME = :OLD_VORNAME and NAME = :OLD_NAME and STRASSE = :OLD_STRASSE and HAUSNUMMER = :OLD_HAUSNUMMER and PLZ = :OLD_PLZ and ORT = :OLD_ORT and TELEFON = :OLD_TELEFON and MOBIL = :OLD_MOBIL and FAX = :OLD_FAXund für Insert:
insert into ADRESSEN (VORNAME, NAME, STRASSE, HAUSNUMMER, PLZ, ORT, TELEFON, MOBIL, FAX) values (:VORNAME, :NAME, :STRASSE, :HAUSNUMMER, :PLZ, :ORT, :TELEFON, :MOBIL, :FAX)Ich gehe davon aus, dass die korrekt sind, oder?
-
Sieht eigentlich ok aus. Was ist denn der Primärschlüssel in der Tabelle? Für Updates ist es vollkommen ausreichend, den / die Primärschlüssel anzugeben. Es müssen nicht alle Felder angegeben werden.
Ich tippe trotzdem auf ein fehlendes Commit bei der Transaktion. Ich wüßte nicht, was die Standardaktion bei Timeouts hier für eien Rolle spielen soll.
-
Danke für deine Antwort!
Was meinst Du "fehlendes Commit"?Im Transactions-Editor die Option "Committed lesen"?
Eigenschaft "saCommit" unter "AutoStopAction"?Als Schlüssel habe ich alle Felder gehabt, hebe gerade nur auf "VORNAME" umgestellt!
Bitte bitte hilf mir!
-
Irgendwo mußt Du ja einen ::Post() absetzen, nachdem Du neue Datensätze eingefügt hast. Danach einfach noch ein TIBTranscation::Commit() oder CommitRetaining() absetzen. (Vorsicht: Bei Commit wird die ganze Transaktion geschlossen. Es ist notwendig Queries und Datasets zu schließen und neu zu öffnen. Bei CommitRetaining bleibt der Transaktionscontext erhalten, das kann aber zu Problemen in Multi-User-Umgebungen führen.)
Falls der Post() automatisch durchgeführt wird, gibt es noch die Möglichkeit, beim TIBDataSet, im Ereignis AfterPost() dieses Commit/CommitRetaining durchzuführen.
-
Danke,
Was meinst Du mit:
Irgendwo mußt Du ja einen ::Post() absetzen, nachdem Du neue Datensätze eingefügt hast.
Ich dachte das wird erst mal im DBGrid abgesetzt und nach return in DB Datei übertragen.
Und das versteh ich auch nicht ganz:
Danach einfach noch ein TIBTranscation::Commit() oder CommitRetaining() absetzen.
Könntest Du bitte das deutlicher erklähren?
Noch mal füe die blöden!
-
Hallo
aesse schrieb:
Was meinst Du mit:
Irgendwo mußt Du ja einen ::Post() absetzen, nachdem Du neue Datensätze eingefügt hast.
Ich dachte das wird erst mal im DBGrid abgesetzt und nach return in DB Datei übertragen.
Es wird nichts automatisch gespeichert. Zu jedem Aufruf von New() bzw. Edit() gehört ein Post() der die Daten wirklich speichert.
Deshalb kann es sein das dein DBGrid dutzende von neuen Datensätzen anzeigt aber keiner von denen gespeichert wird.bis bald
akari