Fehler beim Einfügen in eine MSAccess DB [gelöst]

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

Fehler beim Einfügen in eine MSAccess DB [gelöst]

Beitrag von VB_Lazarus »

Hallo Forum,

ich habe eine MSAccess DB die ich als Datengrundlage verwende. Ich habe die DB richtig angebunden und das Ändern in der DB erfolgt Problemlos.
Für das Ändern verwende ich "TSQLQuery.edit". Für das Einfügen eines Datensatzes würde ich den Befehl "SQLQueryPosition.append" oder "SQLQueryPosition.insert" verwenden.
Leider funktionieren diese beide Befehle nicht. Immer wenn ich versuche diese Befehle zu verwenden erscheint folgende Fehlermeldung:
'Index based on unknown field "="'
Die Tabelle hat "ID" als Index und Autowert. Ich habe auch versucht diesen Index zu löschen und dann auf die DB zu zugreifen, aber leider ohne erfolg.
Folgende Einstellungen habe ich auch versucht:

Code: Alles auswählen

  SQLQueryPosition.fieldbyname('ID').providerflags:= [pfInUpdate,pfInWhere,pfInKey];
  SQLQueryPosition.FieldByName('ID').Required:=false;
  SQLQueryPosition.Fields.Fields[0].ProviderFlags:=[pfInkey];

Alles hatte keinen Erfolg.
Für die Anbindung an die DB habe ich folgende Einstellung:

Code: Alles auswählen

ODBCConnection.Driver:= 'Microsoft Access Driver (*.mdb)';
          ODBCConnection.Params.Add('DBQ=' + ExtractFilePath(Application.ExeName) + 'Apparate_Daten.mdb');
          ODBCConnection.Connected:= True;
          ODBCConnection.KeepConnection := True;
 
          SQLTransaction.DataBase := ODBCConnection;
          SQLTransaction.Action := caCommit;
          SQLTransaction.Active := false; //not applied to ms access(false) bei true kommt fehler das die transaktion schon aktiv ist
          SQLTransaction.StartTransaction;
 
          SQLQueryPosition.DataBase := ODBCConnection;
          SQLQueryPosition.UsePrimaryKeyAsKey := False;
          SQLQueryPosition.Filtered:=True//Jetzt kann ein Filter gesetzt werden  ID=1
          SQLQueryPosition.SQL.Text := 'SELECT * FROM tbPosition';
          SQLQueryPosition.Open;
 
          DatasourcePosition.DataSet := SQLQueryPosition;
 
          DBGrid_Position.DataSource := DatasourcePosition;
 

Es wäre schön, wenn jemand eine Lösung für mein Problem hat.

Danke im voraus.

Gruß
Zuletzt geändert von Lori am So 17. Mär 2013, 10:37, insgesamt 2-mal geändert.
Grund: Bitte den Highlighter nutzen!

VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

Re: Fehler beim Einfügen in eine MSAccess DB

Beitrag von VB_Lazarus »

So, habe den Fehler gefunden.
Ich hatte noch eine Abfrage bei dem Ereignis AfterScroll, wo der aktive SQL-Datensatz (ID) einem anderem SQL-Filter übergeben worden ist.
Es ist logisch, das beim einfügen keine ID vorhanden ist, da der Datensatz erst kreiert wird.
Gruß

Antworten