AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Autoincrement funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Autoincrement funktioniert nicht

Ein Thema von _Sebastian_ · begonnen am 22. Okt 2006 · letzter Beitrag vom 22. Okt 2006
Antwort Antwort
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#1

Firebird Autoincrement funktioniert nicht

  Alt 22. Okt 2006, 17:46
Datenbank: Firebird embedded • Version: 1.5 • Zugriff über: InterBase Express
Hallo.
Ich greife über IB-Komponenten von Turbodelphi auf einen kleine Firebird Datenbank zu.
Die Tabellen habe ich mit dem SQLManager für Firebird und Interbase erstellt. Link

Über Delphi öffne ich jetzt die Tabelle und möchte einen neuen Datensatz hinzufügen.
Das mache ich über .Append und dann weise ich die Felder per FieldByName zu.
Wenn ich jetzt über Post speichern möchte bekomme ich die Fehlermeldung 'Feld 'ID' muss einen Wert haben'. ID ist ein Integer Feld mit Autoincrement und mein Primary Feld.
Weise ich ID einen Wert zu, so wird dieser übernommen, bzw. wenn schon vorhanden gibs nen unique / Primary Fehler.

Eigentlich sollte er die ID ja automatisch setzten.

Hat da jemand ne Idee wo mein Fehler liegt?

Nen bischen code...
Delphi-Quellcode:
 data := dbHandler.TableCreate(getTableName); // hier wird die Tabelle geöffnet..
 data.Open;
 if not data.Locate('ID',ID,[]) then
  begin
    data.Append;
  end else
  begin
    data.Edit;
  end;

  SaveToDB(data); // hier werden die Felder gesetzt

  data.Post;
  FID := data.FieldByName('ID').AsInteger;
  data.Close;
  data.Free;
Im dbHandler habe ich die Database, Transaction Klassen und erzeuge dort die Query und Table klassen.
Delphi-Quellcode:
function TDBHandler.TableCreate(Tablename: String): TIBTable;
var table : tibtable;
begin
    table := TIBTable.Create(nil);;
    table.Transaction := FTransaction;
    table.Database := FDatabase;
    table.TableName := Tablename;
    result := table;
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Firebird Autoincrement funktioniert nicht

  Alt 22. Okt 2006, 17:58
Wie hast du den autoinc deklariert (Trigger)?
Wie sieht SaveToDB aus?
Markus Kinzler
  Mit Zitat antworten Zitat
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Firebird Autoincrement funktioniert nicht

  Alt 22. Okt 2006, 18:07
in SaveToDb werden je nach klasse die Daten in die Table geschrieben.
alle im Stiel von
  data.FieldByName('Bezeichnung').AsString := FBezeichnung; Die AutoIncrement hat der SQL-Manager angelegt.
Ich habe für jede Tabelle einen Trigger und einen Generator

Trigger:
Delphi-Quellcode:
BEGIN
  IF (NEW.ID IS NULL) THEN
      NEW.ID = GEN_ID(CODECOCONTAINER_ID_GEN, 1);
END
Generator:
Im SQL-Manager hab ich unter Generator den namen und eine Value die ich ändern kann.
Dann nen Reiter DDL zum Generator mit diesem Inhalt:
Delphi-Quellcode:
CREATE GENERATOR CODECOCONTAINER_ID_GEN;

SET GENERATOR CODECOCONTAINER_ID_GEN TO 1;
Ich hab eben probiert im Trigger das If .. Then wegzulassen, aber dann bekomme ich eine Primary / unique violation.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Firebird Autoincrement funktioniert nicht

  Alt 22. Okt 2006, 18:09
Setzt du innerhalb von SaveToDb auch das Feld 'ID' ?
Markus Kinzler
  Mit Zitat antworten Zitat
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Firebird Autoincrement funktioniert nicht

  Alt 22. Okt 2006, 18:15
Nein.
Ich hab das zum Testen mal gemacht, aber dann übernimmt er meinen Wert (was ich ja nicht will) oder es gibt ne Fehlermeldung.

[edit: Die richtige Meldung]
Violation of PRIMARY or UNIQUE KEY contraint "INTEG_12" on table "CODECOMSG"
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Firebird Autoincrement funktioniert nicht

  Alt 22. Okt 2006, 18:21
Das sagt ja eher, daß versuchst wird, einen schon vorhandene wert des PK zu setzen.
Markus Kinzler
  Mit Zitat antworten Zitat
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Firebird Autoincrement funktioniert nicht

  Alt 22. Okt 2006, 18:33
Ich glaube ich hab meinen Fehler gefunden.
Ich hab keinen Procedure Wrapper? erstellt.
Jedenfalls hab ich das eben nochmal mit einer neuen Tabelle probiert und damit hat das geklappt.

Ich danke für deine Hilfe..
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:31 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