Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access --> Fehler bei Datensatz einfügen (https://www.delphipraxis.net/60355-access-fehler-bei-datensatz-einfuegen.html)

Christian18 5. Jan 2006 19:06

Datenbank: Access • Version: 2000 • Zugriff über: BDE

Access --> Fehler bei Datensatz einfügen
 
Hallo,

ich habe ein kleines Problem mit Access. Ich habe eine Datenbank in der habe ich eine Tabelle. Die Tabelle besteht aus:

SQL-Code:
Create Table Kontakte
(
  Idx Counter,
  Name Char(30),
  Vorname Char(30),

  Constraint pk Primary Key (Idx)
)
Wenn ich einen Datensatz in die Tabelle einfügen will, dann kommt eine Fehlermeldung.

[Fehler]
Indexfehler
[Microsoft][ODBC Microsoft Access Driver] Sie wollen den Null-Wert einer Variablen zuweisen, die nicht den Datentyp Variant
Allgemeiner SQL.Fehler
hat.
[/Fehler]

So füge ich einen Datensatz in die Tabelle ein:
Delphi-Quellcode:
DM.TKontakte.Append; // --> DM ist ein Datenmodul
FEdit.Caption:='Neu';
FEdit.ShowModal;
Ich greife über die ODBC Schnittstelle auf die Access Datenbank zu. Und über die Komponente TTable (BDE).

Ich glaube es liegt an dem Primärschlüsselfeld. Wenn wenn ich das weg nehme, dann kommt komischerweise kein Fehler. Muss ich die Zahl die in das Feld rein kommt alleine vergeben??? Oder macht das Acces???

Ich denke jetzt habt ihr alle Infos die Ihr braucht, wenn nicht, einfach nochmal melden.

MFG Christian18

alzaimar 5. Jan 2006 19:40

Re: Access --> Fehler bei Datensatz einfügen
 
Du deklarierst die Felder als 'NOT NULL' (obwohl das nicht da steht), also müssen die Felder einen Wert haben, und sei es der leere String. Genau das sagt Dir doch Access. Fülle alle Felder mit Werten.

Nebenbei sollte man die Werte nicht über Edit-Felder befüllen, sondern direkt auf dem Datensatz arbeiten:
Delphi-Quellcode:
MyTable.Append;
MyTable['Vorname'] := 'Al';
MyTable['Name'] := 'Zymer';
MyTable.Post;
So klappt das garantiert.

Christian18 5. Jan 2006 20:08

Re: Access --> Fehler bei Datensatz einfügen
 
Zitat:

Zitat von alzaimar
Du deklarierst die Felder als 'NOT NULL' (obwohl das nicht da steht), also müssen die Felder einen Wert haben, und sei es der leere String. Genau das sagt Dir doch Access. Fülle alle Felder mit Werten.

Nebenbei sollte man die Werte nicht über Edit-Felder befüllen, sondern direkt auf dem Datensatz arbeiten:
Delphi-Quellcode:
MyTable.Append;
MyTable['Vorname'] := 'Al';
MyTable['Name'] := 'Zymer';
MyTable.Post;
So klappt das garantiert.

hi,

und was muß ich machen, damit die felder nicht "NOT NULL" sind???

alzaimar 5. Jan 2006 20:23

Re: Access --> Fehler bei Datensatz einfügen
 
SQL-Code:
Create Table Kontakte
(
  Idx Counter,
  Name Char(30) NULL,
  Vorname Char(30) NULL,

  Constraint pk Primary Key (Idx)
)
Oder in Access direkt nachträglich einstellen. Such mal im Tabellendesigner nach 'darf leer sein' oder sowas.

Christian18 5. Jan 2006 20:25

Re: Access --> Fehler bei Datensatz einfügen
 
Hallo,

es muß doch eine möglichkeit geben das man nicht alle Felder ausfüllen muss. Auch mit der TDBEdit Komponente. Das funktioniert mir anderen Datenbanken doch auch.

MFG Christian18

mikhal 5. Jan 2006 20:29

Re: Access --> Fehler bei Datensatz einfügen
 
Dein Create-Statement hat implizit bei jedem Feld den Constraint "NOT NULL" gesetzt, das ist bei Access - wie oben bereits beschrieben wurde - die Standardeinstellung. Wenn du also ein NULL zulassenwillst, mußt du das bei deiner Tabellen-Definition mit angeben (wie alzaimar es bereits beschrieben hat).

Grüße
mikhal

alzaimar 5. Jan 2006 20:29

Re: Access --> Fehler bei Datensatz einfügen
 
Natürlich. Aber Du sagst der Datenbank explizit, das die Werte nicht NULL (leer) sein DÜRFEN. Dann must Du dich auch an deine eigenen Regeln halten. Du kannst aber z.B. Defaultwerte vorgeben, entweder per SQL, oder im OnNewRecord-Event des TDatasets.

Christian18 6. Jan 2006 08:34

Re: Access --> Fehler bei Datensatz einfügen
 
Hallo,

der Fehler kommt immernoch. das liegt an den Primärschlüssel feld. denn wenn ich da was selber rein schreibe, dann kommt kein fehler. eigentlich soll er den index ja automatisch vergeben. was kann ich tun???

MFG Christian18


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