Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankeintrag funktioniert nicht! (https://www.delphipraxis.net/127749-datenbankeintrag-funktioniert-nicht.html)

Mr. MC 18. Jan 2009 12:23

Datenbank: MySQL • Zugriff über: ODBC

Datenbankeintrag funktioniert nicht!
 
Hier der Quellcode, um die Daten zu ermitteln.(*funzt*):
Delphi-Quellcode:
function TService1.get_computer_ID: string;
var dw : DWORD;
    buffer : array of char;

begin
     setlength(buffer, 127);
     GetComputerName(@buffer [0], dw);
     setlength(result, dw);
     move (buffer [0], result [1], dw);

end;

function TService1.get_user_name: string;
var dw : DWORD;
    buffer : array of char;

begin
     setlength(buffer, 127);
     GetUserName(@buffer [0], dw);
     setlength(result, dw);
     move (buffer [0], result [1], dw);
     //showmessage(result);

end;

function TService1.get_wagon_name: string;
var dw : DWORD;
    buffer : array of char;

begin
     setlength(buffer, 127);
     GetComputerName(@buffer [0], dw);
     setlength(result, dw);
     move (buffer [0], result [1], dw);
     delete(result,6,7);

end;
Und hier der Quelltext zur Datenbankausführung:
Delphi-Quellcode:
function TService1.local_DB_transfer: string;
const _statm1 = 'insert into login values (NULL, (Select ID from Notebookwagen where name=''%s''),''%s'',''%s'')';

var     s : string;


begin

s:=Format(_statm1,[get_wagon_name,get_user_name, get_computer_ID]);
with query1 do begin
sql.Clear;
sql.Add(s);
execsql;
end;
end;
Leider weint Delphi immer folgende Meldung mir entgegen:
Zitat:

Rechtes Anführungszeichen fehlt!
Habe mal die Funktionen einzel getestet. Dabei kam raus, dass der Name an der Fehlermeldung schuld ist und die anderen Werte in die Datenbank nicht eingetragen werden, weil sie nicht gelesen werden konnten, aber wenn man die Daten in einer txt-Datei speichert kommen alle Daten korrekt an.

Warum klappt sql-Befehl nicht und warum weint er wegen dem Namen?

[edit=mkinzler]Code-Tag in Delphi-Tag geändert Mfg, mkinzler[/edit]
[edit=mkinzler]Den 2. auch noch Mfg, mkinzler[/edit]

DeddyH 18. Jan 2009 12:25

Re: Datenbankeintrag funktioniert nicht!
 
Benutz doch einfach SQL-Parameter und Du hast das Problem nicht. Außerdem besteht dann auch keine Gefahr durch SQL-Injection.

mjustin 18. Jan 2009 12:39

Re: Datenbankeintrag funktioniert nicht!
 
Stand der String tatsächlich so in zwei Zeilen? Falls ja, fehlte ein rechtes Anführungszeichen.

Etwas schöner formatiert:

Delphi-Quellcode:
const _statm1 =
  'insert into login '
+ 'values (NULL, (Select ID from Notebookwagen where name=''%s''),''%s'',''%s'')';
Wichtig beim Umbruch eines SQL Statements als Stringliteral ist das Leerzeichen (hier am Zeilenende nach login). Sonst gibt es später einen Laufzeitfehler.

p.s. das INSERT ohne Angabe der Spaltennamen funktioniert bei späteren Tabellenerweiterungen nicht mehr. Besser daher: INSERT INTO LOGIN(FELDNAME1, FELDNAME2, FELDNAME3, FELDNAME4) VALUES (...)


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