Entwickler-Ecke

Datenbanken - noch einmal MYSQL warum führt er es nicht aus?


daywalker0086 - Fr 12.12.08 21:17
Titel: noch einmal MYSQL warum führt er es nicht aus?
So ich hoffentlich zum letzten mal heute.
Hab folgenden Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 for D:= 0 to ((arraygroeße div 2)-1) do
          begin
          Datenarray[D,1]:= wertefiltern(Daten,D,Datenarray[D,0]);  
          stringgrid1.Cells[1,D+1]:= Datenarray[D,1]  ;

            sqlAbfrage.SQL.Text:='UPDATE `Daten` Set `Wert`='''+Datenarray[D,1]+''','+
            'WHERE `id`='''+inttostr(D+1)+''';';
            sqlAbfrage.ExecSql;

          end;

Er durchläuft die Schleife einmal, trägt in die Stringgrid also einen Wert ein( es sind aber mehr) und dann hört er auf.
Die sqlAbfrage wird nicht ausgeführt und dann bleibt die Schleife hängen(obwohl sie mehrmal durchlaufen werden müsste)
Kommentiere ich die sqlabfrage aus dann läuft die Schleife problemlos durch.

Leider spuckt der Compiler und Debugger keine Fehlermeldung aus anhand ich das Problem identifizieren könnte.

Könnt ihr mir helfen oder habt ihr ne Idee?


Delete - Fr 12.12.08 21:23

Das ist ein wenig unübersichtlich, da man die internen Funktionen nicht kennt. Ich würde auf jeden Fall den SQL-Befehl parametrisieren.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
sqlAbfrage.SQL.Text:='UPDATE `Daten` Set `Wert`=:wert1 WHERE `id`=:wert2';
for D:= 0 to ((arraygroeße div 2)-1) do
          begin
          Datenarray[D,1]:= wertefiltern(Daten,D,Datenarray[D,0]);  //die -1 weil Array bei 0 anfängt, sonst verschiebung
          stringgrid1.Cells[1,D+1]:= Datenarray[D,1]  ;
          sqlabfrage.ParamByName('wert1').AsString := Datenarray[D,1];
          sqlabfrage.ParamByName('wert2').AsInteger := D+1;
            
            sqlAbfrage.ExecSql;

          end;


daywalker0086 - Fr 12.12.08 22:10

Also ich hab die Werte Datenarray und D+1 mit showmessage nach der Stringgridfüllung abgefragt, die stimmen und die stringgrid wird eben einmal gefüllt.
Danach gehts nicht weiter und die sql Tabelle wird nicht gefüllt.
Es muss irgendwie an der Sql anweisung liegen.
Ich hab das sqlAbfrage.SQL.Text:='UPDATE `Daten` Set `Wert`=:wert1 WHERE `id`=:wert2';
mal in die For Schleife gesetzt sonnst wird das doch garnicht ausgeführt oder?

Da kommt dann aber für Wert1 und Wert2 beim Aufrufen das sie nicht gefunden wurden

Edit: habs jetzt so da kommt keine Fehlermeldung aber ein Wert wird trotzdem nicht eingetragen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
 
for D:= 0 to ((arraygroeße div 2)-1) do
          begin
          Datenarray[D,1]:= wertefiltern(Daten,D,Datenarray[D,0]);  //die -1 weil Array bei 0 anfängt, sonst verschiebung
          stringgrid1.Cells[1,D+1]:= Datenarray[D,1]  ;
         sqlAbfrage.SQL.Text:='UPDATE `Daten` Set `Wert`=:wert1 WHERE `id`=:wert2';

           sqlabfrage.ParamByName('wert1').AsString := Datenarray[D,1];
           sqlabfrage.ParamByName('wert2').AsInteger := D+1;
            sqlAbfrage.ExecSql;      

          end;

Wie gesagt wenn ich das sql zeugs auskommentiere läufts



EDIT: Es muss irgendwie an der For Schleife mit liegen.

Ich hab dieses Kommando in einer anderen Prozedur und das funktioniert:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 
 if sql = true then
            begin
             sqlAbfrage.SQL.Text:='INSERT INTO `Daten` '+
      '(`id`, `Bezeichnung`)'+
      ' VALUES '+
      '('''', '''+Namefiltern(Daten)+''');';
      sqlAbfrage.ExecSql;  //SQL-Statement ausführen
            end;


Das funktioniert.

hm ich weis ned weiter


daywalker0086 - Fr 12.12.08 22:52

Ich könnt mich in *popo* beißen es funktioniert, hatte vergessen die Zugangsdaten und sowas einzugeben, die wurde irgendwie gelöscht.
Mann mann mann, ich such mich hier ne stunden lang tot :? :evil: