Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi nach commit ist alles weg (https://www.delphipraxis.net/134452-nach-commit-ist-alles-weg.html)

clock50 22. Mai 2009 12:01

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:
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;
ist alles weg.

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

HHennig 22. Mai 2009 20:04

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.

clock50 22. Mai 2009 22:13

Re: nach commit ist alles weg
 
Select
SQL-Code:
SELECT * FROM KUNDEN
Insert
SQL-Code:
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)
Modify
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
Delete
SQL-Code:
DELETE FROM KUNDEN WHERE ID =:ID
Refresh
SQL-Code:
SELECT * FROM kunden
da sind sie alle

Hansa 22. Mai 2009 22:44

Re: nach commit ist alles weg
 
Poste besser mal die Fehlermeldung, bzw. sage wenigstens ob eine kommt. Ist überhaupt ein Post abgesetzt worden? :shock:

clock50 22. Mai 2009 22:52

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)

clock50 23. Mai 2009 15:07

Re: nach commit ist alles weg
 
So ich hab mal noch ein wenig geteste. Es ist schon beim Post alles weg. Aber warum?

TBx 23. Mai 2009 17:01

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 ;-)

clock50 23. Mai 2009 20:48

Re: nach commit ist alles weg
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich hab's mal angehängt.

mkinzler 23. Mai 2009 21:02

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)?

clock50 24. Mai 2009 05:26

Re: nach commit ist alles weg
 
Zitat:

Zitat von mkinzler
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)?

Code für ein Update? Ich war der Meinung (leider wenig Beispiele) das die ModifySQL - Anweisung ausreicht

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

mkinzler 24. Mai 2009 11:02

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.
http://www.firebirdsql.org/manual/de...de-basics.html
http://www.firebirdsql.org/pdfmanual...eneratoren.pdf

clock50 24. Mai 2009 13:05

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

mkinzler 24. Mai 2009 13:09

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 ; ^

clock50 24. Mai 2009 20:27

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.

mkinzler 24. Mai 2009 20:45

Re: nach commit ist alles weg
 
ID einfach weglassen, sowohl in der Feldliste, wie auch bein den Values

clock50 26. Mai 2009 06:41

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.

clock50 27. Mai 2009 21:18

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.

mkinzler 27. Mai 2009 21:34

Re: nach commit ist alles weg
 
Zitat:

Hat jemand ne Ahnung wie man die zuletzt eingefügte ID bekommt? den LAST_INSERT_ID() geht ja nicht.
Lass sie dir mit
RETURNING zurückgeben

SQL-Code:
insert into ... values (...) returning <PK>;

TBx 27. Mai 2009 21:39

Re: nach commit ist alles weg
 
Zitat:

Zitat von mkinzler
Lass sie dir mit
RETURNING zurückgeben

SQL-Code:
insert into ... values (...) returning <PK>;

Das gibt es erst ab FB 2.1, der TE arbeitet aber afik mit FB1.5.

mkinzler 27. Mai 2009 21:42

Re: nach commit ist alles weg
 
Zitat:

Das gibt es erst ab FB 2.1, der TE arbeitet aber afik mit FB1.5.
Dann bleibt das Update auf FB2
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