Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi '' String in Datenbank einfügen (https://www.delphipraxis.net/96544-string-datenbank-einfuegen.html)

wfs12 26. Jul 2007 11:54

Datenbank: MYSQL • Version: 5.0 • Zugriff über: libmysql.dll

'' String in Datenbank einfügen
 
Guten Tag wenn ich mit
Delphi-Quellcode:
      query:=PChar('INSERT INTO ausgaben(betrageuro,datum,benutzer,verwendung) VALUES ('+QuotedStr(Switchpoint(Stringgrid2.Cells[2,l+1]))+','+QuotedStr(switchdate(Stringgrid2.Cells[1,l+1]))+',012,'+QuotedStr(Stringgrid2.Cells[0,l+1])+')');
ein paar Strings in eine Datenbank einfügen will klappt das alles auch soweit ganz gut, nur wenn ein String leer ist werden keine Daten eingefügt :?: Woran kann das liegen? Kann man das irgendwie umgehen?

mkinzler 26. Jul 2007 11:57

Re: '' String in Datenbank einfügen
 
Ich würde (SQL-)Parameter verwenden. Wie ist das Feld in der Datenbank deklariert?

wfs12 26. Jul 2007 13:26

Re: '' String in Datenbank einfügen
 
Das sind sowohl Float als auch VarChar Felder. Was meinst du mit
[quote="mkinzler"]Ich würde (SQL-)Parameter verwenden[quote] :?:

DeddyH 26. Jul 2007 13:33

Re: '' String in Datenbank einfügen
 
Delphi-Quellcode:
Query.SQL.Text := 'INSERT INTO Tabelle(Feld1,Feld2) VALUES(:wert1,:wert2)';
ParamByName('wert1').AsString := '';
ParamByName('wert2').AsInteger := 1;

wfs12 26. Jul 2007 13:54

Re: '' String in Datenbank einfügen
 
hmm irgendwie kommen bei mir da ganz viele Fehlermeldungen:
Delphi-Quellcode:
[Fehler] serverbanking.pas(484): Record, Objekt oder Klassentyp erforderlich
[Fehler] serverbanking.pas(485): Undefinierter Bezeichner: 'ParamByName'
[Fehler] serverbanking.pas(485): Operator oder Semikolon fehlt
[Fehler] serverbanking.pas(486): Operator oder Semikolon fehlt
[Fehler] serverbanking.pas(487): Operator oder Semikolon fehlt
[Fehler] serverbanking.pas(488): Operator oder Semikolon fehlt
[Fataler Fehler] serverbanking1.dpr(6): Verwendete Unit 'serverbanking.pas' kann nicht compiliert werden
Hab das so eingebaut:
Delphi-Quellcode:
mysql_select_db(_myCon, db);
      Query.SQL.Text := 'INSERT INTO einnahmen(betrageuro,datum,benutzer,verwendung) VALUES(:wert1,:wert2,:wert3,:wert4)';
      ParamByName('wert1').AsString := cuteuro(Switchpoint(Stringgrid1.Cells[2,i+1]));
      ParamByName('wert2').AsInteger :=switchdate(Stringgrid1.Cells[1,i+1]);
      ParamByName('wert3').AsInteger :=012;
      ParamByName('wert4').AsInteger :=Stringgrid1.Cells[0,i+1];
      mysql_real_query(_myCon, query, Length(query));

DeddyH 26. Jul 2007 13:55

Re: '' String in Datenbank einfügen
 
Sorry, mein Fehler. Setz mal den Namen des Queries davor (also Query.ParamByName...)

mkinzler 26. Jul 2007 13:55

Re: '' String in Datenbank einfügen
 
Delphi-Quellcode:
Query.ParamByName('wert1').AsString := '';

wfs12 26. Jul 2007 14:03

Re: '' String in Datenbank einfügen
 
Der Fehler
Delphi-Quellcode:
[Fehler] serverbanking.pas(484): Record, Objekt oder Klassentyp erforderlich
kommt jetzt bei jeder Zeile muss ich da irgendwo vorher noch was einbinden oder so?

mkinzler 26. Jul 2007 14:07

Re: '' String in Datenbank einfügen
 
Du verwendest auch nicht die objektorientierte Abstraktion von delphi sondern eine Umsetzung der nativen Api.

wfs12 26. Jul 2007 14:10

Re: '' String in Datenbank einfügen
 
das heißt für mich so klappt das doch nicht entweder muss ich alles umstellen, oder falls ein String leer ist irgendeine Zeichenkombination da rein schreiben die er beim auslesen wiedererkennt und dann einen leeren Struing ausgibt?

marabu 28. Jul 2007 18:06

Re: '' String in Datenbank einfügen
 
Hallo wfs12,

statt des Indikator-Strings kannst du einfach NULL (ohne QuotedStr) übergeben oder das Feld ganz aus dem INSERT-Statement verbannen. Wer scheitert eigentlich an dem fehlenden Eingabewert - das INSERT oder deine Switch-Funktionen? Interessant wäre auch der von dir erzeugte Query-Text.

Grüße vom marabu

wfs12 30. Jul 2007 13:51

Re: '' String in Datenbank einfügen
 
Das INSERT scheitert es klappt auch nicht wenn ich den Text direkt bei dem MYSQL- administrator eingebe also denk ich mal wird die Datenbank mit einem leeren String nicht umgehen können

marabu 30. Jul 2007 15:11

Re: '' String in Datenbank einfügen
 
Hallo,

hast du NOT NULL Constraints auf Feldern der Tabelle eingerichtet?
Gibt es Trigger auf der Tabelle?
Kannst du bitte einen Schemaauszug zeigen?

Freundliche Grüße

wfs12 30. Jul 2007 15:59

Re: '' String in Datenbank einfügen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So hab mal ein Screenshot von dem MYSQL- Administrator angehängt. was meinst du mit Trigger der Tabelle?

marabu 30. Jul 2007 16:06

Re: '' String in Datenbank einfügen
 
Hallo,

wie ich sehe hast du alle Felder der Tabelle mit NOT NULL angelegt - dann darfst du beim INSERT auch keine NULL-Werte übergeben. Bei einem VARCHAR-Feld ist ein leerer String kein Problem, aber bei einem FLOAT-Feld kann ein leerer String nicht in einen Float-Wert konvertiert werden und das könnte dein Fehler sein.

Freundliche Grüße

wfs12 30. Jul 2007 16:26

Re: '' String in Datenbank einfügen
 
OK Vielen dank erstmal das heißt also bei meiner switch Funktion sollte ich falls es ein leerer String ist, diesen als '0' nehmen, damit er auch in eine Float Zhal umgewandelt werden könnte, oder?

marabu 30. Jul 2007 16:28

Re: '' String in Datenbank einfügen
 
Das scheint mir eine gute Idee zu sein.


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