Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank schreiben mit Fehlermeldung (https://www.delphipraxis.net/29057-datenbank-schreiben-mit-fehlermeldung.html)

Snyderburn 3. Sep 2004 12:06


Datenbank schreiben mit Fehlermeldung
 
Hi Leute,

ich habe ein kleines Problem beim Schreiben in meine Datenbank von Delphi aus. Es kommt da folgende Meldung:

"Operation wird nicht unterstützt - Tabelle ist nicht eindeutig identifiziert"

Lasse ich das Programm aber anschließend weiterlaufen und schaue mir die Datenbank an, dann wurde da trotzdem der gewünsche Datensatz eingetragen!

Hier sind ein paar Statements, die vorher ablaufen:

Zuerst wird noch ein Insert gemacht, damit ich in die Tabelle etwas reinschreiben kann.

Delphi-Quellcode:
procedure TDM1.T_InfoNewRecord(DataSet: TDataSet);
begin
  T_info.FieldByName('ID_info').AsInteger := -1;
end;
Delphi-Quellcode:
procedure TDM1.T_InfoBeforePost(DataSet: TDataSet);
begin
   // hier ID einsetzen, wenn noch nicht gesetzt (-1)!!!
  if ((T_Info.FieldByName('ID_info').AsInteger = -1) or (T_info.FieldByName('ID_info').Asstring = '')) then
  begin
    // bisher höchste ID+1 einsetzen !!!
    dm1.T_info.FieldByName('ID_ANSCHRIFT').asinteger := dm1.T_anschrift.fieldbyname('ID_ANSCHRIFT').AsInteger;
    t_info.FieldByName('ID_info').AsInteger := NextID('info', 'ID_info');
  end;
end;
mfg
Snyderburn

Bernhard Geyer 3. Sep 2004 12:19

Re: Datenbank schreiben mit Fehlermeldung
 
Es fehlen ein paar Info's:

- Weche Datenbanksystem (MS-SQL, MySQL, ...)?
- Welcher Zugriffsweg (ADO, BDE, ...)?
- Tabellenstruktur?
- Was ist T_info? TTable, TQuery, ...? SQL-Anweisung?

Snyderburn 3. Sep 2004 12:57

Re: Datenbank schreiben mit Fehlermeldung
 
Hier sind noch ein paar Informationen:

1. Es wird eine Interbase Firbird Datenbank genutzt.
2. Zugriff erfolgt über die BDE
3. Hier ist die komplette Tabellen-struktur:

Field Name Field Typ
ID_info Integer
ID_Anschrift Integer
IN_Beratervertrag Integer
IN_NDA Integer
IN_Werkvertrag Integer
IN_Dienstvertrag Integer
IN_Rahmenvertrag Integer
IN_Info BLOB

4. T_Info ist ein TTable. SQL-Anweisung benutzte ich nicht beim speichern.

Zitat:

Zitat von Bernhard Geyer
Es fehlen ein paar Info's:

- Weche Datenbanksystem (MS-SQL, MySQL, ...)?
- Welcher Zugriffsweg (ADO, BDE, ...)?
- Tabellenstruktur?
- Was ist T_info? TTable, TQuery, ...? SQL-Anweisung?


Bernhard Geyer 3. Sep 2004 13:01

Re: Datenbank schreiben mit Fehlermeldung
 
Firebird verwende ich nicht und BDE ist bei mir auch schon in dir Rundablage gewandert.

Welche Felder sind Primärschlüssel? Ich vermute BDE kann nicht bestimmen, welche Felder Primärschlüssel sind und damit auch nicht feststellen, ob der Datensatz überhaupt in die Datenbank gespeichert werden kann.

Frage: Wieso wird noch BDE verwendet. Für Interbase/Firebird gibt es diverse native Komponenten welche alle Nachteile der BDE (Installation nötig, veraltet, ...) vermeiden.

Snyderburn 6. Sep 2004 08:14

Re: Datenbank schreiben mit Fehlermeldung
 
Kannst Du mir dann eine andere Komponenten sagen, womit ich die Verknüpfung zur DB hinbekomme? Solange und viel Zeit, auf der Arbeit, zum programmieren habe ich nicht, daher kenne ich mich nur mit BDE ein bißchen aus.

Für jeden guten Tipp bin ich dankbar.

mfg
Snyderburn

Bernhard Geyer 6. Sep 2004 20:23

Re: Datenbank schreiben mit Fehlermeldung
 
SQL-Direkt

Aber evtl. erbarmen sich noch ein paar andere User und geben dir weiter Links für native DB-Treiber.

UweR 7. Sep 2004 12:18

Re: Datenbank schreiben mit Fehlermeldung
 
Hallo Snyderburn,

wenn's nichts kosten soll kannst du für Zugriff auf Firebird und Interbase einfach die IBX-Komponenten nehmen. Die sind bei Delphi ja schon dabei und reichen für den hausgebrauch eigentlich aus. Wenns n'bischen kosten darf kann ich dir FIBPlus empfehlen, die sind stabiler und bieten ein paar schöne Features wie Clientseitiges Sortieren und Filtern. Du findest Sie hier:FIBPlus.

Für diese beiden Komponenten gilt allerdings auch das du dich ein bißchen mit SQL und den Innereien von Firebird beschäftigen müßtest. Du mußt halt einige Sachen selbst machen die dir sonst die BDE abnimmt wie Transktionen usw., aber mit der BDE auf Interbase/Firebird zuzugreifen ist nun wirklich nicht das beste.

shmia 7. Sep 2004 12:35

Re: Datenbank schreiben mit Fehlermeldung
 
Zitat:

Zitat von Snyderburn
"Operation wird nicht unterstützt - Tabelle ist nicht eindeutig identifiziert"

Dann solltest du der Tabelle einen Primärschlüssel verpassen.
SQL-Code:
ALTER TABLE info ADD CONSTRAINT PK_info PRIMARY KEY (ID_info)
Zitat:

Zitat von Snyderburn
Hier sind ein paar Statements, die vorher ablaufen:

Delphi-Quellcode:
// ganz weglassen, wird nicht gebraucht !
//procedure TDM1.T_InfoNewRecord(DataSet: TDataSet);
//begin
//  T_info.FieldByName('ID_info').AsInteger := -1;
//end;
Delphi-Quellcode:
procedure TDM1.T_InfoBeforePost(DataSet: TDataSet);
begin
   // hier ID einsetzen, wenn noch nicht gesetzt !!!
  if T_Info.FieldByName('ID_info').IsNull then
  begin
    // bisher höchste ID+1 einsetzen !!!
    dm1.T_info.FieldByName('ID_ANSCHRIFT').asinteger := dm1.T_anschrift.fieldbyname('ID_ANSCHRIFT').AsInteger;
    t_info.FieldByName('ID_info').AsInteger := NextID('info', 'ID_info');
  end;
end;

MrSpock 7. Sep 2004 13:52

Re: Datenbank schreiben mit Fehlermeldung
 
Hallo Snyderburn,

ich empfehle dir die IBX Komponenten, die funktionieren prima. Ich habe noch nicht über die BDE auf Firebird zugegriffen, aber es sieht nach einem BDE Problem aus.

@shmia: Die Fehlermeldung sagt ja nicht über Indizierung sondern über Identifizierung der Tabelle, deshalb glaube ich nicht, dass es an einem fehlenden Index liegt.

Snyderburn 9. Sep 2004 13:46

Re: Datenbank schreiben mit Fehlermeldung
 
Danke für die Infos!!! Den Fehler habe ich gefunden. Ich habe leider in der DB vergessen einen primärschlüssel zu setzten.

trotzdem vielen Dank für die Infos

mfg
Snyderburn


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 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