Entwickler-Ecke

Datenbanken - Fehler bei Speichern in SQL-Datenbank


ofl80 - Mi 16.02.05 13:23
Titel: Fehler bei Speichern in SQL-Datenbank
Hallo,

folgende Prozedur speichert aus einem StringGrid in eine SQL-Datenabnk..


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TSolution.SpeichernClick(Sender: TObject);
var
  SQL_String: String;
begin
    SQL_String := 'UPDATE Liste SET Name = '+chr(39) +grid.Cells[1,1] +chr(39)
                              +', Vorname = '+chr(39) +grid.Cells[2,1] +chr(39)
                              +' WHERE ID = '+grid.Cells[0,1];
    Liste.Active:=false;
    Liste.SQL.clear;
    Liste.SQL.Add(SQL_String);
    Liste.Active:=true;
end;


Dabei gibt es folgendes Problem; Das Programm speichert zwar die Daten, bricht danach aber ab und gibt folgende Fehlermeldung aus:


Quelltext
1:
Project Project1.exe raised exception class ENoResultSet with message ‘Error creating cursor handle’. Process stopped. Use Step or Run to continue.                    


Bitte um Hilfe.

Vielen Dank

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


jasocul - Mi 16.02.05 13:31
Titel: Re: Fehler bei Speichern in SQL-Datenbank
ofl80 hat folgendes geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TSolution.SpeichernClick(Sender: TObject);
var
  SQL_String: String;
begin
    SQL_String := 'UPDATE Liste SET Name = '+chr(39) +grid.Cells[1,1] +chr(39)
                              +', Vorname = '+chr(39) +grid.Cells[2,1] +chr(39)
                              +' WHERE ID = '+grid.Cells[0,1];
    Liste.Active:=false;
    Liste.SQL.clear;
    Liste.SQL.Add(SQL_String);
    Liste.Active:=true;
end;


Hallo und :welcome:

ein typischer Standard-Fehler.
Bei Update, Insert, Delete musst du:

Delphi-Quelltext
1:
Liste.ExecSQL;                    

schreiben.
Nur bei Select geht das mit:

Delphi-Quelltext
1:
2:
3:
Liste.Active := True;
//einfacher ist:
Liste.Open;


ofl80 - Mi 16.02.05 13:40

Uups... Vielen Dank!


jasocul - Mi 16.02.05 13:42

Dein anderes Problem:
Du hast vermutlich noch andere Elemente (TDBEdit, TDBGrid,...) mit der DataSource verknüpft. Diese zeigt auf deine TQuery.
Diese Elemente benötigen aber ein Liste.Open.
Du solltest für dein Update eine Extra-Query verwenden.