Hallo zusammen,
ich versuche über ein Modul nach dem vorhandesein des zu bearbeitenden Datensatzes nachzufragen. Denn während ich meine Datensätze markiere und nicht aktualisiere, kann es sein dass vom einem Host an den Datensätzen was geändert wurde und somit mir zur Bearbeitung nicht mehr zur Verfügung stehen.
Deshalb übergebe ich an mein Modul zwei Listen: Names & Values.
Names beinhaltet die Feldnamen kommasepariert und Values die dazugehörigen Inhalte des aktuellen Datensatzes.
Die Funktion sieht dann folgendermaßen aus:
Delphi-Quellcode:
function FindMyRecord(
var Names,Values: PChar): Boolean;
var SQL :
String;
myTable,
myConn :
String;
Ini : TIniFile;
myDB : TADOConnection;
myDS : TADODataSet;
FN, FV : TStringList;
begin
Result := false;
Ini := TIniFile.Create(Project.
Name);
try
myTable := Ini.ReadString('
DatabaseSettings', '
DatabaseTable', '
');
myConn := Ini.ReadString('
DatabaseSettings', '
DatabaseFileName', '
');
finally
Ini.Free;
end;
if (myConn = '
')
or (myTable = '
')
then
Exit;
myDB := TADOConnection.Create(
nil);
myDS := TADODataSet.Create(
nil);
FN := TStringList.Create;
FV := TStringList.Create;
try
myDB.ConnectionString := myConn;
myDB.Open;
if myDB.Connected
then
begin
FN.CommaText :=
String(Names);
FV.CommaText :=
String(Values);
myDS.Connection := myDB;
SQL := '
SELECT * FROM ' + myTable + '
WHERE ';
for i := 0
to FN.Count - 1
do
begin
SQL :=
SQL + FN.Strings[i] + '
=''
' + FV.Strings[i] + '
''
';
if i < FN.Count - 1
then
SQL :=
SQL + '
AND ';
end;
myDS.CommandText :=
SQL;
myDS.Open;
if myDS.RecordCount > 0
then
Result := true;
end;
finally
FN.Free;
FV.Free;
myDB.Free;
myDS.Free;
end;
end;
Wenn ich den
SQL Befehl ausführe bekomme ich als Recordcount 0 zurück, obwohl der Datensatz definitiv so existiert? Irgendeiner ne Idee wieso?
Gruß, Moony