Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Insert Into klappt nicht (https://www.delphipraxis.net/90516-insert-into-klappt-nicht.html)

wfs12 19. Apr 2007 00:00

Datenbank: Mysql • Version: 5.0 • Zugriff über: Delphi

Insert Into klappt nicht
 
Guten Morgen/Abend!
Hab ein kleines Problem hab mir versucht über ein paar tutorials mysql näher zu bringen bin auch schon ganz zufrieden, mit dem editor kann ich auch schon einigermaßen umgehen. Alle anderen Teile wie Tabelle erstellen oder Datenbank neu anlegen gehen ohne Probleme, wenn ich jetzt aber den INSERT INTO befehl ausführen will passiert gar nichts:
Delphi-Quellcode:
var
  query: PChar;
begin
  mysql_select_db(_myCon, 'APITest');
  query:= 'INSERT INTO posts(author,entry) VALUES (1,Hier ist der Eintrag)';
  mysql_real_query(_myCon, query, Length(query));
end;
finde den Fehler einfach nicht! Danke im Vorraus

_frank_ 19. Apr 2007 00:20

Re: Insert Into klappt nicht
 
versuch mal "Hier ist der Eintrag" in einfache Anführungsstriche (') zu setzen (musst diese zum escapen aber jeweils doppelt schreiben)...

also:
Delphi-Quellcode:
query:= 'INSERT INTO posts (author,entry) VALUES (1,''Hier ist der Eintrag'')';
HTH Frank

Hansa 19. Apr 2007 00:54

Re: Insert Into klappt nicht
 
So, wie der Fragesteller das vorhatte, nun so geht es echt nicht. :mrgreen: Frage mich allerdings immer wieder, warum man sich selber Syntax-Fallen baut, anstatt
Delphi-Quellcode:
Dataset.Insert;
Dataset.ParamByName (...).AsString := 'Hier ist der Eintrag';
usw. einzusetzen.

gsh 19. Apr 2007 07:23

Re: Insert Into klappt nicht
 
Zitat:

Zitat von Hansa
So, wie der Fragesteller das vorhatte, nun so geht es echt nicht. :mrgreen: Frage mich allerdings immer wieder, warum man sich selber Syntax-Fallen baut, anstatt usw. einzusetzen.

ahm ist dir schon aufgefallen das er kein Dataset benutzt, sondern über die libmysql direkt die DB anspricht :roll:

@wfs12: Die Werte für die zeilen solltest du imho immer unter 'WERT' setzen.
Das Problem in Delphi ist das ' String ende/anfang bedeutet, deswegen hab ich des bis jetzt immer so gelöst:

Delphi-Quellcode:
query:= 'INSERT INTO posts(author,entry) VALUES (1,'#39'Hier ist der Eintrag'#39')';
(#39 steht für ')
Bei dieser Abfrage brauchst du es vllt. nicht aber bei späteren komplitzierteren abfragen wahrscheinlich schon.

angos 19. Apr 2007 07:49

Re: Insert Into klappt nicht
 
Hi,

funktionieren sollte auch

Delphi-Quellcode:

query:= 'INSERT INTO posts(author,entry) VALUES (1, "Hier ist der Eintrag" )';

Bernhard Geyer 19. Apr 2007 08:04

Re: Insert Into klappt nicht
 
Zitat:

Zitat von gsh
ahm ist dir schon aufgefallen das er kein Dataset benutzt, sondern über die libmysql direkt die DB anspricht :roll:

Auch die direkte libmysql-Anbindung unterstützt Parameter (Diverse Komponenten setzen ja darauf). Und in Zeiten von wöchentlichen Windows Updates sollte man seine Anwendung auch halbwegs sicher aufbauen. Bei dieser direkten Angabe (vor allem wenn keine Quotung der Werte erfolgt) hast du eine 1a Sicherheitslücke eingebaut die jeder Anwender der es darauf anlegt innerhalb von 1 Minute versucht auszunutzen.

Hansa 19. Apr 2007 08:24

Re: Insert Into klappt nicht
 
Zitat:

Zitat von gsh
..ahm ist dir schon aufgefallen das er kein Dataset benutzt, sondern über die libmysql direkt die DB anspricht :roll:

Nix, "ähm". Besser gesagt : doch. Ähm :mrgreen: , dir ist aber schon klar, dass man eine DB nicht auf String-Manipulationen reduzieren sollte und, dass es Methoden gibt ? :gruebel:

wfs12 19. Apr 2007 15:13

Re: Insert Into klappt nicht
 
so Vielen dAnk für die schnellen hilfreichen antworten! Habs jetzt so gelöst und klappt auch.
Delphi-Quellcode:
query:= 'INSERT INTO posts(author,entry) VALUES (''1'',''Hier ist der Eintrag'')';
Vielen Dank!


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