AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Bekomme kein INSERT mit FB und IBDAC hin!?!
Thema durchsuchen
Ansicht
Themen-Optionen

Bekomme kein INSERT mit FB und IBDAC hin!?!

Ein Thema von scrat1979 · begonnen am 12. Jan 2010 · letzter Beitrag vom 14. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#1

Bekomme kein INSERT mit FB und IBDAC hin!?!

  Alt 12. Jan 2010, 21:03
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBDAC neueste Version
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
Michael Kübler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 12. Jan 2010, 21:19
Ich würde es mit einer parametrisierten Abfrage veruchen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

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

  Alt 12. Jan 2010, 21:19
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;
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 12. Jan 2010, 21:22
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...
Michael Kübler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 12. Jan 2010, 21:23
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 12. Jan 2010, 21:28
Vielen Dank für Eure Hilfe, es hat geklappt!!

Aber warum MUSS(?) man parametisierte Abfragen benutzen? WARUM funktioniert mein 1. Vorschlag nicht, rein formal ist er doch ok, oder?
Michael Kübler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 12. Jan 2010, 21:31
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#8

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

  Alt 12. Jan 2010, 21:33
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...)
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

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

  Alt 12. Jan 2010, 21:37
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.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#10

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

  Alt 12. Jan 2010, 21:41
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!
Michael Kübler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:01 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