[gelöst] Field Name is required, but not supplied.

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

[gelöst] Field Name is required, but not supplied.

Beitrag von Scotty »

Meine Tabelle enthält 12 Spalten:

Code: Alles auswählen

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| Name        | text         | NO   |     | NULL    |                |
| Passwd      | text         | NO   |     | NULL    |                |
| Key         | int(11)      | NO   | PRI | NULL    | auto_increment |
| GamesPlayed | int(11)      | NO   |     | NULL    |                |
| Rating      | int(11)      | NO   |     | NULL    |                |
| Registered  | datetime     | NO   |     | NULL    |                |
| LastConnect | datetime     | NO   |     | NULL    |                |
| LastIP      | text         | NO   |     | NULL    |                |
| LastMac     | text         | NO   |     | NULL    |                |
| Messages    | text         | NO   |     | NULL    |                |
| AllowKibitz | tinyint(1)   | NO   |     | NULL    |                |
| Email       | varchar(255) | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)
 
Ich versuche jetzt einen neuen Eintrag anzufügen:

Code: Alles auswählen

      Query.Cancel;
      Query.Append;
      Query.FieldValues['Name'] := aSender.PlayerName;
      Query.FieldValues['Passwd'] := aRecvMsg.Value('Password','');
      Query.FieldValues['Key'] := '0';
      Query.FieldValues['GamesPlayed']:=0;
      Query.FieldValues['Rating']:=1000;
      Query.FieldValues['Registered']:=Now;
      Query.FieldValues['LastConnect']:=Now;
      Query.FieldValues['LastIP'] := aSender.ClientSocket.GetRemoteSinIP;
      Query.FieldValues['LastMac'] :=aRecvMsg.Value('UID','');
      Query.FieldValues['Messages']:='';
      Query.FieldValues['AllowKibitz'] :=true;
      Query.FieldValues['Email'] :=aRecvMsg.Value('Email','');
      Query.Post;
      Query.ApplyUpdates; //to apply update
 
...und bekomme beim Post den Fehler

Code: Alles auswählen

Field Name is required, but not supplied. (SELECT * FROM Users WHERE Name="Test123")
(on E:Exception do Log(etError,'DoConnect of '+aSender.PlayerName+': '+E.Message+' ('+Query.SQL.Text+')');

Mit der 5.0er Version von MariaDB hat das geklappt, auch ohne das (primary) Key=0. Mache ich was falsch?
Zuletzt geändert von Scotty am So 26. Okt 2014, 02:49, insgesamt 1-mal geändert.

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: Field Name is required, but not supplied.

Beitrag von knight »

Es ist generell eine schlechte Idee einem Feld, das automatisch vom Datenbanksystem hoch gezählt werden soll (auto_increment), einen Wert zuzuweisen. Laß das entsprechende Feld einfach leer.

knight

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Field Name is required, but not supplied.

Beitrag von Scotty »

knight hat geschrieben:Es ist generell eine schlechte Idee einem Feld, das automatisch vom Datenbanksystem hoch gezählt werden soll (auto_increment), einen Wert zuzuweisen. Laß das entsprechende Feld einfach leer.
Sp hatte ich es und so will es wieder machen, wenn der Fehler behoben ist. Vielleicht liegt es ja an der DB selbst - ich habe ein SQL-Dump von der alten 5.0 DB gemacht und den in die aktuelle DB eingeladen. Lesen und Ändern klappt aber einwandfrei.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Field Name is required, but not supplied.

Beitrag von Scotty »

Das Problem lag daran, dass ich die Tabelle ohne DEFAULT NULL erzeugt habe (bzw. war kam das beim Backup raus). Nur wenn NULL = yes ist, darf der String auch leer sein.

Antworten