Entwickler-Ecke

Datenbanken - Brauche Hilfe bei INSERT-INTO-Code


Stocki1990 - Fr 15.05.09 20:31
Titel: Brauche Hilfe bei INSERT-INTO-Code
Servus Leute!

Aufgrund Eurer raschen Hilfe gestern, habe ich nun einiges bei meinem Schulprojekt erledigt. Nun aber habe ich ein kleines Problem mit einem INSERT-INTO-Code.

Zuerst werden in eine Combobox (cb_klassen) alle Klassen der Datenbank eingelesen. Hier ist der Code einmal:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure tform3.cbfill();
begin

 form1.ADOQuery1.close;
 form1.ADOQuery1.SQL.clear;
 form1.ADOQuery1.SQL.Add('Select distinct klasse from Schueler');
 form1.ADOQuery1.Open;

 While not form1.ADOQuery1.Eof do begin
    cb_klassen.items.add(form1.adoquery1.FieldValues['Klasse']);
  form1.ADOQuery1.Next;
 end;

 form1.Adoquery1.close;

end;

Nun werden einmal alle Klassen der Datenbank ins Listview eingelesen.

Da ich aber auch neue Schüler hinzufügen muss, habe ich dies mit INSERT-INTO gelöst. Soweit so gut. Die Daten werden mir alle in die Datenbank eingetragen, jedoch taucht bei der Datenbankspalte Klasse immer zB '1AHK' auf. Damit die Eintragung stimmt, müssen die Anführungszeichen bei der Klasse verschwinden. - Ansonsten wird ja in die Combobox eine neue Klasse mit den '' eingetragen.

Hier wäre mein Quellcode:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
Sqlstring : string;
begin

Klass := cb_klassen.Items[cb_klassen.ItemIndex];

 form1.ADOQuery1.Close;
 form1.ADOQuery1.SQL.clear;

 Sqlstring:= 'Insert into Schueler (Nachname, Vorname, Muttersprache, Geburtsdatum, Klasse, Adresse, Staatsbürgerschaft, Ort, PLZ) Values ("' + nachname.text + '", "' + vorname.Text + '", "' + Sprache.text + '", "' + Datum.text + '", "' + QuotedStr(Klass) + '", "' + Adresse.text + '", "' + Land.text + '", "' + ort.text + '", ' + plz.text + ')';

 form1.ADOQuery1.SQL.Add(Sqlstring);
 form1.AdoQuery1.ExecSQL;
end;

Der Fehler liegt bei QuotedStr(Klass), aber leider weiß ich nicht, wie man diesen am besten bzw. einfachsten behebt.

Ich hoffe, dass Ihr mir auch bei dieser kleinen Sache helfen könnt.

Danke schonmal im Voraus für Eure Antworten
Christoph

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Niko S. - Fr 15.05.09 20:39

Ich glaub dass das so geht:

SQL-Anweisung
1:
INSERT INTO `table` (`spalte`,`spalte2`..etc) VALUES ('wert','wert2'...);                    

Also du machst das mit " und ich immer mit ' das klappt wunderbar.

Moderiert von user profile iconNarses: SQL-Tags hinzugefügt


Stocki1990 - Fr 15.05.09 20:44

Servus Simak!

Danke für deine rasche Antwort. Habe nun das " bei QuotedStr(Klass) weg gelassen und siehe da: Es funktioniert ;)

Wieder einmal was neues gelernt.

Bin noch ein Newbie, deshalb verzeiht mir bitte meine häufigen Fragen.

Grüße
Christoph

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Delete - Sa 16.05.09 11:25

Du solltest Dir gleich angewöhnen, SQL-Parameter zu verwenden. Das ist erstens übersichtlicher und zweitens läufst Du dann nicht Gefahr, dass Dir jemand per SQL-Injection ungewollten Code unterjubelt.