Hallo zusammen,
zu dem eben geposteten Quelltext ersteinmal ein paar Anmerkungen:
1. Ein ExecSQL führt eine
SQL Anweisung aus, die keine Datenmenge öffnet. Also z.B. UPDATE oder ein INSERT.
2. Die Methode open() dagegen wird bei einem SELECT angewendet.
3. Beides zusammen macht keinen Sinn.
4. Wenn ein TQuery Objekt benutzt wird, benötigt man in der Regel kein Dataset. Man kann direkt auf dem TQuery arbeiten.
Dieser Code müßte eigentlich beide oben beschriebenen Probleme lösen:
Delphi-Quellcode:
var
ok :boolean;
begin
try
try
with DBQuery
do begin
close;
sql.clear;
sql.Add('
SELECT * FROM copyright');
open;
while not EOF
do begin
if FieldByName('
spalte').asString = '
wert'
then ok := true;
next;
end;
end;
except
on e:
Exception do begin
MessageDLG('
Fehler!. Tabelle copyright fehlt?'+#13+e.
message,mtError,[mbOk],0);
//Fehlerbehandlung, Programmende, oder was sonst passieren soll, wenn was schiefgeht
exit;
end;
end;
finally
DBQuery .close;
//WICHTIG Datenmenge wieder schließen
end;
end;
Und jetzt noch ein Hinweis:
Bei der oben erwähnten Verwendung von TSession.getTableNames sollte man vorsichtig sein. Einem Kollegen von mir ist aufgefallen, dass diese Methode eine eigene Datenbankverbindung erstellt und diese nicht mehr schließt. Das kann zu Lizenzproblemen führen. Man hat als Programmierer auch keine Möglichkeit diese Verbindung "von Hand" wieder zu schließen.
Alle Angaben ohne Gewähr. Der Code wurde nicht getestet