Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensätze insertieren (https://www.delphipraxis.net/18852-datensaetze-insertieren.html)

barnti 25. Mär 2004 10:37


Datensätze insertieren
 
Hi,

ich arbeite mit einer mysql-DB und versuche Datensätze in meine Tabelle zu schreiben:

Tabelle_Position:
SQL-Code:
+----------------+------------------+------+-----+---------+----------------+
| Field         | Type            | Null | Key | Default | Extra         |
+----------------+------------------+------+-----+---------+----------------+
| Position_ID   | int(10) unsigned |      | PRI | NULL   | auto_increment |
| Container_ID  | int(10) unsigned | YES | MUL | NULL   |                |
| Auftrag_ID    | int(10) unsigned |      | MUL | 0       |                |
| Partie_ID     | int(10) unsigned |      | MUL | 0       |                |
| Unterpartie_ID | int(10) unsigned |      | MUL | 0       |                |
| PositionNR    | int(10) unsigned | YES |     | NULL   |                |
| Menge         | int(10) unsigned | YES |     | NULL   |                |
| Timestamp     | timestamp(14)   | YES |     | NULL   |                |
| valid         | datetime        | YES |     | NULL   |                |
+----------------+------------------+------+-----+---------+----------------+
Der Query.text sieht folgendermaßen aus:
SQL-Code:
Insert into Position values('','','1','25','37','1','4','','');
Insert into Position values('','','1','25','38','2','2','','');
Insert into Position values('','','1','25','39','3','2','','');
Insert into Position values('','','1','25','40','4','2','','');
Insert into Position values('','','1','25','41','5','1','','');
Insert into Position values('','','1','25','42','6','1','','');
Als Fehlermeldung erhalte ich:
Zitat:

'' is not a valid integer.
Was mir sagt, dass ich leere Werte so nicht in die DB schreiben darf. Wie kann ich das Problem lösen? Wie kann ich die oben genannten Daten trotzdem einfügen?

Sharky 25. Mär 2004 10:40

Re: Datensätze insertieren
 
Hai barnti,

schreibe doch nur die Werte die Du brauchst:

SQL-Code:
INSERT INTO Position (Auftrag_ID,Partie_ID,Unterpartie_ID,PositionNR,Menge) VALUES (1,25,37,1,4)

mikhal 25. Mär 2004 10:42

Re: Datensätze insertieren
 
Benutze statt '' NULL, dann sollte es funktionieren, vorausgesetzt, dein Autoincrement funktioniert.

Grüße
Mikhal

Robert_G 25. Mär 2004 10:42

Re: Datensätze insertieren
 
Du hast wohl noch Oracle im Kopf ;)
In Oracle es ein '' das gleiche wie ein NULL. Es ist also genauso NUMBER, DATE, VARCHAR2,... vielleicht wird das in mySQL anders gehandhabt.
Versuch's mal mit NULL anstatt ''.

Edit:
3 auf einen Streich :mrgreen:
Sharkys Lösung wäre natürlich die beste ;)

barnti 25. Mär 2004 10:44

Re: Datensätze insertieren
 
Hallo,

danke euch. Das waren wohl die schnellsten Antworten, die ich hier je bekommen habe. :)

Jo, das mit Oracle stimmt.

barnti 25. Mär 2004 11:07

Re: Datensätze insertieren
 
Mhm...

leider hatte ich mit euren Vorschlägen noch keinen Erfolg:

SQL-Code:
INSERT INTO Position (Auftrag_ID,Partie_ID,Unterpartie_ID,PositionNR,Menge) VALUES ('1','25','37','1','4')
INSERT INTO Position (Auftrag_ID,Partie_ID,Unterpartie_ID,PositionNR,Menge) VALUES ('1','25','38','2','2')
INSERT INTO Position (Auftrag_ID,Partie_ID,Unterpartie_ID,PositionNR,Menge) VALUES ('1','25','39','3','2')
INSERT INTO Position (Auftrag_ID,Partie_ID,Unterpartie_ID,PositionNR,Menge) VALUES ('1','25','40','4','2')
INSERT INTO Position (Auftrag_ID,Partie_ID,Unterpartie_ID,PositionNR,Menge) VALUES ('1','25','41','5','1')
INSERT INTO Position (Auftrag_ID,Partie_ID,Unterpartie_ID,PositionNR,Menge) VALUES ('1','25','42','6','1')
So geht es nicht. Immer noch die selbe Fehlermeldung. Und so:

SQL-Code:
Insert into Position values(Null, Null,'1','25','37','1','4',Null,Null);
...
Klappt es ebenfalls nicht. :(. Wo liegt mein Fehler?

kiar 25. Mär 2004 11:53

Re: Datensätze insertieren
 
hallo beim sql standart werden :
SQL-Code:
wert is null oder wert = ''
nicht immer eindeutig interpretiert.

deshalb sollte man beide Abfragen mit OR verbinden, oder eine Stored Procedure schreiben.

raik

barnti 25. Mär 2004 11:56

Re: Datensätze insertieren
 
Hallo noch einaml,

ich habe festgestellt, dass die Fehlermeldung erst in der Exceptionbehandlung auftaucht. Aber diese Exception wird durch das SQL-Statement ausgelöst. Bei eingeschalteten Compilermeldungen bekomme ich den Fehler:

Zitat:

You have an Error in your SQL-Statement near...
deshalb hier noch mal der aktuelle Code:
SQL-Code:
insert into Position values(NULL,NULL,'1','25','37','1','4',NULL,NULL);
insert into Position values(NULL,NULL,'1','25','38','1','2',NULL,NULL);
insert into Position values(NULL,NULL,'1','25','39','1','2',NULL,NULL);
insert into Position values(NULL,NULL,'1','25','40','1','2',NULL,NULL);
insert into Position values(NULL,NULL,'1','25','41','1','1',NULL,NULL);
insert into Position values(NULL,NULL,'1','25','42','1','1',NULL,NULL);
Kann jemand helfen?

barnti 25. Mär 2004 12:01

Re: Datensätze insertieren
 
@raik

ich habe Deine letzte Antwort leider nicht verstanden. Kannst Du mal erklären?

Danke!

kiar 25. Mär 2004 12:04

Re: Datensätze insertieren
 
du versuchst in deinen eingaben entweder Null oder '' einzugeben.

es kann sein, das deine felder dies aber unterschiedlich interpretieren. deshalb solltest du die eingaben
SQL-Code:
is null oder ''
zulassen und dich nicht auf eins beschränken.

raik

muß jetzt weg, komme aber nachher wieder

Robert_G 25. Mär 2004 12:05

Re: Datensätze insertieren
 
Stored Procedures in mySQL? http://www.og4all.de/sip/Totlach.gif
Das wird doch erst in der überüberübernächsten Major Version implementiert sein und funktionieren. :mrgreen:

Ich würde die Statements einzeln in einer IDE für mySQL (falls es sowas überhaupt gibt :?: ) ausprobieren.
Zur Not reicht auch irgendein kleines Mini Tool, mit dem man Statements absetzen kann.
Wenn es dort klappt, hat dein Programm einen Bug :wink:

barnti 25. Mär 2004 12:11

Re: Datensätze insertieren
 
Hi Robert,

mit den Stored Procedures hast Du natürlich recht. Und das es höchtwahrscheinlich an meinem Code liegt ist mir auch klar! ;)
Deshalb suche ich ja hier auch nach einer Lösung. Es hat ja eindeutig mit dem Statement zu tun...

Robert_G 25. Mär 2004 12:52

Re: Datensätze insertieren
 
Ich meinte damit, teste die Statements außerhalb deines Programmes.

mikhal 25. Mär 2004 13:05

Re: Datensätze insertieren
 
Ich denke mal, daß du dein PK-Feld mit einem gültigen Wert füllen mußt, ansonsten muß die Datenbank deinen Datensatz abweisen, weil er gegen die Constraint-Regeln verstößt. Solange du also Position_Id NULL übergibst, muß die Datenbank eine Fehlermeldung ausgeben, da ein PK eigentlich immer UNIQUE und NOT NULL definiert ist. Deine Tabelle läßt aber dort NULL zu, was einem Verstoß gegen die Primary-Constraints darstellt. Voraussetzung ist natürlich, daß du tatsächlich den Primary-Constraint in deiner Tabellendefinition festgelegt hast.

Ich kenne MySQL nur flüchtig und weiß daher auch nicht, wie dort das AutoIncrement realisiert wird. Mußt du den Wert nicht ähnlich wie bei Oracle via Sequence oder ähnlichem zuweisen?

Grüße
Mikhal

kiar 25. Mär 2004 13:57

Re: Datensätze insertieren
 
mysql kennt keine stored proceduren ?

ich weis schon warum ich ib mache :mrgreen:

aber mikhal hat natürlich recht:
Zitat:

Deine Tabelle läßt aber dort NULL zu, was einem Verstoß gegen die Primary-Constraints darstellt.




raik

barnti 25. Mär 2004 15:07

Re: Datensätze insertieren
 
Also,

nun mal 'Butter bei die Fische'. Alles zurück!

Die Statements sind so oder so richtig. Das Problem liegt daran, dass ich versucht habe in einer Query mehrere Statements abzufeuern:

SQL-Code:
Query.add('insert into...');
Query.Add('insert into...');
Das kann so natürlich nicht funktionieren. Erst Statement absetzen dann neues Statement...

Ich dachte ich kann das Problem abstrakt beschreiben, leider habe ic dabei etwas wesentliches weggelassen. Nun ja, jetzt funktioniert es...
Danke an Alle!

Robert_G 25. Mär 2004 15:29

Re: Datensätze insertieren
 
Es gibt halt keine anonymen Blöcke in mySQL... :mrgreen:


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