Entwickler-Ecke

Datenbanken - Inhalt von Edit Feldern in SQL Anweisung verwenden


tholmer - Di 28.09.04 17:14
Titel: Inhalt von Edit Feldern in SQL Anweisung verwenden
uhu

Ich befasse mich zur zeit mit Datenbanken und mit ADO + Access Datenbank funktioniert das bis jetzt ganz gut.

Meine SQL anweisungen funktionieren nicht wirklich. Hier mal der Synthax von der Eigenschaft String der ADOQuery:

INSERT INTO `GENRE` (`name`) VALUES (''+Edit1.Text+'');

Das eine Programm hat ein normales Edit Feld in das der Name kommt und dann Klick ich auf einen Button und dann soll es eingetragen werden.
Die Tabelle besteht aus 2 Feldern -> ID und Name. ID ist erhöht sich automatisch um 1. Wenn ich jetzt durch den Button ADOQuery1.ExecSQL; ausführen lasse kommt der Fehler: GENRE.name darf keinen Null Wert enthalten!
Ich mein das is klar ich hab die Option in der Access DB gesetzt das ein Wert rein muss aber in dem Edit Feld steht ein String! Wenn ich ein Wort anstatt +Edit1.Text+ oben in den Synthax schreibe dann trägt es das ein.
hoffe ihr habt mich verstanden großes :D
Hab auch schon ausprobiert mehr Anführungszeichen um das Edit1.text zu machen aber hat zu nix geführt...


grayfox - Di 28.09.04 17:34

hallo tholmer!

zunächst mal willkommen im forum!

wenn 'genre' der tabellenname ist, dann versuch es mal so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
with Query do begin 
  Close;
  SQL.Clear;
  SQL.Add('INSERT INTO Genre (FilmName) VALUES (:aFilmname)');
  SQL.ParamByName('aFilmname').asString:= Edit1.Text;
  Open
end;


damit sollte es klappen.

mfg, stefan


tholmer - Di 28.09.04 17:41

hm delphi meldet das ParamByName ein unbekannter Bezeichner ist und auch wenn ich schreibe SQL. öffnet sich die programmierhilfe aber da is nix was mit P beginnt ^^


Udontknow - Di 28.09.04 17:43

Grayfox hat sich vertan. Probiere es mit der Eigenschaft TQuery.Params, dort ist die Funktion ParamByName zu finden.

Cu,
Udontknow


tholmer - Di 28.09.04 17:57

das geht auch nicht wirklich. Das mit dem ADOQuery1.Parameter.ParamByName('name') geht auch aber wenn ich dahinter Edit1.Text schreibe kommt: Linke Seite kann nicht zugewiesen werden. Inkompatible Typen: TParameter und TCaption

EDIT: nach ParamByName('name') kann ich auch AsString nicht schreiben


grayfox - Di 28.09.04 17:57

sorry, war nicht absicht. aber zumindest weiss ich jetzt, dass meine vorschläge ausprobiert werden ;)

@tholmer: du hättest aber auch 'ParamByName' als suchindex verwenden können und wärst dabei auf TQuery gestossen ^^

mfg, stefan


grayfox - Di 28.09.04 18:00

erstens hast eine 'Parameter' zuviel
es heisst --> Query.ParamByName('feldname').asString

und warum kannst du asString nicht schreiben? *finger eingeschlafen*? :twisted:


tholmer - Di 28.09.04 18:04

na ich orientier mich immer an der Programmierhilfe die da aufgeht und deswegen geht
ADOQuery1.ParamByName('name').AsString nicht. Das is TADOQuery und nicht TQuery, kann ja sein das es da entscheidende unterschiede gibt :D btw ich benutze Delphi 7


grayfox - Di 28.09.04 18:07

und was hindert dich dran, trotzdem asString hinzutippen? :gruebel:


tholmer - Di 28.09.04 18:10


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
with ADOQuery1 do begin
  Close;
  SQL.Clear;
  Parameters.ParamByName('name').AsString := Edit1.Text;
  SQL.Add('INSERT INTO GENRE (name) VALUES (:name)');
  
  //SQL.ParamByName().AsString:= Edit1.Text;
  Open;
end;


-> Undefinierter Bezeichner 'AsString'

das hindert mich dran :D


grayfox - Di 28.09.04 18:11

2. versuch: wie wärs, wenn du 'Parameters' weglässt und dafür 'SQL' hintippst?

und wieso hast du die reihenfolge von SQL.Add und SQL.ParamByName geändert?


tholmer - Di 28.09.04 18:12

Ergebnis: Parameters weggelassen und dafür SQL hingesetzt:
Undefinierter Bezeichner 'ParamByName'
Operator oder Semikolon fehlt

ka warum ich die reihenfolge gendert habe, aber andersum passiert das gleiche


grayfox - Di 28.09.04 18:15


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
with Query do begin   
  Close;  
  SQL.Clear;  
  SQL.Add('INSERT INTO Genre (FilmName) VALUES (:aFilmname)');  
  ParamByName('aFilmname').asString:= Edit1.Text;  
  Open  
end;


tholmer - Di 28.09.04 18:17

hab den coder jetzt kopiert und oben Query in ADOQuery1 geändert und es kommt das gleiche wie vorher. Undefinierter bezeichner ParamByName


tholmer - Di 28.09.04 18:37

habs gebacken bekommen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
with ADOQuery1 do begin
  Close;
  SQL.Clear;  
  SQL.Add('INSERT INTO Genre (name) VALUES (:name)');
  Parameters.ParamValues['name'] := Edit1.Text;
  ExecSQL;
end;


ParameterValues ging dann :)