![]() |
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:
mfg
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; Snyderburn |
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? |
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:
|
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. |
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 |
Re: Datenbank schreiben mit Fehlermeldung
![]() Aber evtl. erbarmen sich noch ein paar andere User und geben dir weiter Links für native DB-Treiber. |
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: ![]() 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. |
Re: Datenbank schreiben mit Fehlermeldung
Zitat:
SQL-Code:
ALTER TABLE info ADD CONSTRAINT PK_info PRIMARY KEY (ID_info)
Zitat:
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; |
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. |
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 22:46 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 by Thomas Breitkreuz