![]() |
Datenbank: firebird • Version: 1.5 • Zugriff über: IB
nach commit ist alles weg
Hallo zusammen, ich bin dabei meine Kundendatenbank auf firebird umzuschreiben. Ich habe etwas mit IBTable und IBQuery getestet aber mit IBQuery kann ich nichts einfügen oder ändern und mi IBTable bin ich zu unflexibel. Ich habe gelesen, das IBDataSet beides vereit und nun habe ich ein Problem: Ich kann zwar Datensätze einfügen aber nicht ändern nach
Delphi-Quellcode:
ist alles weg.
procedure TDM.SQLUpdate;
begin if DM.IBTransaction1.InTransaction then begin DM.IBTransaction1.Commit; DM.IBDatabase1.Open; DM.IBTransaction1.StartTransaction; DM.IBDataSet1.Active := True; end; end; ich glaube es liegt an IBDataSet.ModifySQL, da habe ich folgendes eingetragen:
SQL-Code:
UPDATE KUNDEN SET anrede=:anrede, vorname=:vorname, name=:name, land=:land, plz=:plz, ort=:ort, strasse=:strasse, tel=:tel, fax=:fax, mail=:mail, knr=:knr WHERE ID=:OLD_ID
|
Re: nach commit ist alles weg
Hallo,
poste doch bitte auch mal die SelectSQL-Anweisung. Übrigens brauchst du die DB nach einem Commit nicht neu zu öffnen, die Verbindung besteht bis zu einem expliziten IBDatabase.Close. |
Re: nach commit ist alles weg
Select
SQL-Code:
Insert
SELECT * FROM KUNDEN
SQL-Code:
Modify
INSERT INTO KUNDEN (ID, anrede, vorname, name, land, plz, ort, strasse, tel, fax, mail, knr) VALUES (:ID, :anrede, :vorname, :name, :land, :plz, :ort, :strasse, :tel, :fax, :mail, :knr)
SQL-Code:
Delete
UPDATE KUNDEN SET anrede=:anrede, vorname=:vorname, name=:name, land=:land, plz=:plz, ort=:ort, strasse=:strasse, tel=:tel, fax=:fax, mail=:mail, knr=:knr WHERE ID=:OLD_ID
SQL-Code:
Refresh
DELETE FROM KUNDEN WHERE ID =:ID
SQL-Code:
da sind sie alle
SELECT * FROM kunden
|
Re: nach commit ist alles weg
Poste besser mal die Fehlermeldung, bzw. sage wenigstens ob eine kommt. Ist überhaupt ein Post abgesetzt worden? :shock:
|
Re: nach commit ist alles weg
Ein Fehlermeldung bekomme ich nicht!
Wenn ich nur Post mache werden die Daten noch im DBGrid angezeigt nach dem Commit ist dann alles weg. Ich habe einen Button für Post und IBDataSet.AferPost -> Commit (die Procedur SQLUpdate siehe oben) |
Re: nach commit ist alles weg
So ich hab mal noch ein wenig geteste. Es ist schon beim Post alles weg. Aber warum?
|
Re: nach commit ist alles weg
Häng doch Dein Projekt bitte mal an. Ansonsten ist das Stochern im Dunkeln. Und meine :glaskugel: ist wie üblich nicht verfügbar ;-)
|
Re: nach commit ist alles weg
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich hab's mal angehängt.
|
Re: nach commit ist alles weg
Ich sehe keinen Code für ein Update. es wird nur ein Insert gemacht.
Gibst du die ID wirklich vor oder per Autoinc( Generator + Trigger)? |
Re: nach commit ist alles weg
Zitat:
Da ich mich erst seit kurzem damit beschäftige benutze ich keinen Generator + Trigger, ich habe keine einfachen Beispiele dafür gefunden. Ich brauch wohl noch etwas nachhilfe |
Re: nach commit ist alles weg
Eine IP muss ja eindeutig sein. Ein Insert funktioniert deshalb nur, wenn die angegebene ID nicht schon vorhanden ist.
![]() ![]() |
Re: nach commit ist alles weg
also ich hab mal versucht einen TRIGGER eizusetzen (über ein script erstellt) aber ich bekomme einen Fehler: Expected end of statement, encountered EOF
was ist falsch?
SQL-Code:
SET NAMES ISO8859_1;
create database 'D:\Platte-E\Projekte\fire\Daten\daten.fdb' user 'SYSDBA' password 'masterkey' page_size 4096 default character set iso8859_1; CREATE DOMAIN "TSTR25" AS VARCHAR(25) COLLATE DE_DE; CREATE DOMAIN "TSTR50" AS VARCHAR(30) COLLATE DE_DE; CREATE DOMAIN "TMEMO" AS VARCHAR(2000) COLLATE DE_DE; CREATE TABLE "KUNDEN" ( ID INTEGER NOT NULL, anrede TSTR25, vorname TSTR50, name TSTR50, land TSTR50, plz TSTR25, ort TSTR50, strasse TSTR50, tel TSTR50, fax TSTR50, mail TSTR50, knr TSTR25 ); SET TERM ^ ; CREATE TRIGGER trgTKUNDEN_BI_V3 for TKUNDEN active before insert position 0 as begin if ((new.id is null) or (new.id = 0)) then begin new.id = gen_id( gidKUNDEN, 1 ); end end |
Re: nach commit ist alles weg
SQL-Code:
SET NAMES ISO8859_1;
create database 'D:\Platte-E\Projekte\fire\Daten\daten.fdb' user 'SYSDBA' password 'masterkey' page_size 4096 default character set iso8859_1; CREATE DOMAIN "TSTR25" AS VARCHAR(25) COLLATE DE_DE; CREATE DOMAIN "TSTR50" AS VARCHAR(30) COLLATE DE_DE; CREATE DOMAIN "TMEMO" AS VARCHAR(2000) COLLATE DE_DE; CREATE TABLE "KUNDEN" ( ID INTEGER NOT NULL, anrede TSTR25, vorname TSTR50, name TSTR50, land TSTR50, plz TSTR25, ort TSTR50, strasse TSTR50, tel TSTR50, fax TSTR50, mail TSTR50, knr TSTR25 ); SET TERM ^ ; CREATE TRIGGER trgTKUNDEN_BI_V3 for TKUNDEN active before insert position 0 as begin if ((new.id is null) or (new.id = 0)) then begin new.id = gen_id( gidKUNDEN, 1 ); end end ^ SET TERM ; ^ |
Re: nach commit ist alles weg
Wie muß den jetzt mein IBDataSet.InsertSQL aussehen?
Ich habe jetzt schon Menge hin und her getestet aber mein ID Feld wird nicht automatisch eingefügt. |
Re: nach commit ist alles weg
ID einfach weglassen, sowohl in der Feldliste, wie auch bein den Values
|
Re: nach commit ist alles weg
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weiß nicht was ich falsch mache? Ich habe schon mit DBASE und MySQL gearbeitet sowohl mit Delphi als auch ohne, aber hier weiß ich nicht weiter. Ich weiß nicht wo der (oder die) Fehler liegen. Es kann nicht nur ein Fehler sein. Ich habe noch mal mein Test-Projekt angehängt. Ich hoffe es hat jemand Zeit sich das mal anzusehen.
|
Re: nach commit ist alles weg
Ich hab's: es war die Groß- und Kleinschreibung.
Hat jemand ne Ahnung wie man die zuletzt eingefügte ID bekommt? den LAST_INSERT_ID() geht ja nicht. |
Re: nach commit ist alles weg
Zitat:
RETURNING zurückgeben
SQL-Code:
insert into ... values (...) returning <PK>;
|
Re: nach commit ist alles weg
Zitat:
|
Re: nach commit ist alles weg
Zitat:
oder statt Trigger die Sequenz clientseitig zu holen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 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-2025 by Thomas Breitkreuz