Autor Beitrag
Stocki1990
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 15.05.09 20:31 
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:
ausblenden 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Fr 15.05.09 20:39 
Ich glaub dass das so geht:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.