Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bekomme kein INSERT mit FB und IBDAC hin!?! (https://www.delphipraxis.net/146048-bekomme-kein-insert-mit-fb-und-ibdac-hin.html)

scrat1979 12. Jan 2010 21:03

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBDAC neueste Version

Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Hallo,

ich werd' noch verrückt. Folgende Anweisung wird mit einem Fehler abgewiesen (Token unknown). Hab auch schon
TIBCSQL durch TIBCQuery ersetzt, gleiches Problem... Exakt die gleiche Abfrage funktioniert unter einer Firebird-GUI einwandfrei.
Die Schleife (to 31) sowie das entsprechende Datum habe ich zu Demonstrationszwecken in einen festen Wert geändert.

Delphi-Quellcode:
procedure TPlanner.PCreateMonthInDB(Month: Byte; Year: Integer);
VAR TMPSQL : TIBCSQL;
    i     : Integer;
begin
  (* Kalender in Datenbank erstellen *)
  TMPSQL := TIBCSQL.Create(nil);

  for I := 1 to 31 do begin
    TMPSQL.SQL.Add('INSERT INTO TBLCALENDAR(ISHOLIDAY,DATUM) VALUES(0,''13.07.2010'');');
  end;
  TMPSQL.AutoCommit := True;
  TMPSQL.Execute;

   (* Abfrage freigeben *)
  TMPSQL.Free;
end;
Meine Tabelle sieht so aus:

SQL-Code:
CREATE TABLE TBLCALENDAR (
  ID INTEGER NOT NULL,
  DATUM DATE NOT NULL,
  ANWESEND SMALLINT,
  BEREITSCHAFT SMALLINT,
  NOTARZT SMALLINT,
  ISHOLIDAY SMALLINT DEFAULT 0 NOT NULL);


ALTER TABLE TBLCALENDAR ADD PRIMARY KEY (ID);


SET TERM ^ ;

CREATE TRIGGER BI_TBLCALENDAR_ID FOR TBLCALENDAR
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
      NEW.ID = GEN_ID(TBLCALENDAR_ID_GEN, 1);
END^

SET TERM ; ^
Ich greife über Firebird embedded darauf zu, Verbindung und auch Abfragen funktionieren tadellos :(

Danke für Eure Hilfe!

SCRaT

mkinzler 12. Jan 2010 21:19

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Ich würde es mit einer parametrisierten Abfrage veruchen.

RWarnecke 12. Jan 2010 21:19

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Probiere es mal so :
Delphi-Quellcode:
procedure TPlanner.PCreateMonthInDB(Month: Byte; Year: Integer);
VAR TMPSQL : TIBCSQL;
    i     : Integer;
begin
  (* Kalender in Datenbank erstellen *)
  TMPSQL := TIBCSQL.Create(nil);

  for I := 1 to 31 do begin
    TMPSQL.SQL.Add('INSERT INTO TBLCALENDAR(ISHOLIDAY,DATUM) VALUES(:Holiday, :Holidaydatum);');
    TMPSQL.ParamByName('Holiday').AsInteger := 0;
    TMPSQL.ParamByName('Holidaydatum').AsDateTime := StrToDateTime('13.07.2010');
  end;
  TMPSQL.AutoCommit := True;
  TMPSQL.Execute;

   (* Abfrage freigeben *)
  TMPSQL.Free;
end;

scrat1979 12. Jan 2010 21:22

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Delphi-Quellcode:
 [...]
   for I := 1 to 31 do begin
    TMPSQL.SQL.Add('INSERT INTO TBLCALENDAR(ISHOLIDAY,DATUM) VALUES(:Test1,:Test2);');
  end;
  TMPSQL.ParamByName('Test1').AsInteger := 0;
  TMPSQL.ParamByName('Test2').AsDate := Now;
 [...]
Leider dasselbe Problem...

mkinzler 12. Jan 2010 21:23

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Noch besser:
Delphi-Quellcode:
  TMPSQL.SQL.Text := 'INSERT INTO TBLCALENDAR(ISHOLIDAY,DATUM) VALUES(:Holiday, :Holidaydatum);';
  TMPSQL.AutoCommit := True;

  for I := 1 to 31 do
  begin
    TMPSQL.ParamByName('Holiday').AsInteger := 0;
    TMPSQL.ParamByName('Holidaydatum').AsDateTime := StrToDateTime('13.07.2010');
    TMPSQL.Execute;
  end;

scrat1979 12. Jan 2010 21:28

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Vielen Dank für Eure Hilfe, es hat geklappt!! :cheers:

Aber warum MUSS(?) man parametisierte Abfragen benutzen? WARUM funktioniert mein 1. Vorschlag nicht, rein formal ist er doch ok, oder?

mkinzler 12. Jan 2010 21:31

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Um ein Skript auszuführen musst du temporär das Termsymbol (SET TERM) ändern, so dass das Ende eines Befehls und das Ende des Skriptes unterschieden werden kann

scrat1979 12. Jan 2010 21:33

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Werd ich mir mal anschauen...

Gab noch eine kurze Schrecksekunde, die Tabelle war trotz erfolgrechem Insert leer, ein XXXConnection.Commit; hat aber geholfen. Warum muss ich denn das nochmals committen, wenn ich AutoCommit auf True stehen habe? (Ja, bei der Connection steht es auf False...)

sx2008 12. Jan 2010 21:37

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Zu deiner Tabellenstruktur:
Du solltest das Feld ID ganz weglassen und stattdessen das Feld DATUM zum Primärschlüssel machen.
Dann sparst du dir den Trigger, gewinnst mehr Leistung und ausserdem darf es ja pro Datum nur einen Datensatz geben.

scrat1979 12. Jan 2010 21:41

Re: Bekomme kein INSERT mit FB und IBDAC hin!?!
 
Zitat:

Zitat von sx2008
Zu deiner Tabellenstruktur:
Du solltest das Feld ID ganz weglassen und stattdessen das Feld DATUM zum Primärschlüssel machen.
Dann sparst du dir den Trigger, gewinnst mehr Leistung und ausserdem darf es ja pro Datum nur einen Datensatz geben.

Hast Recht, ich werde mir das mal anschauen und nach Möglichkeit so machen! Danke für den Tip!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 1 von 2  1 2      

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