Hi
DP'ler,
ich bin gerade dabei, meine Kenntnisse im Umgang mit der Datenbank etwas zu verbessern. Mein momentanes Problem ist dabei folgendes:
Ich möchte zu einer bekannten Liste von ID-Nummern die entsprechenden Datensätze aus der Datenbank holen und weiterverarbeiten. Dazu verwende ich folgendes
Query:
SELECT * FROM Test WHERE ID IN (:IDList)
Nun bekomme ich aber folgendes Verhalten:
* Bei einer einzelnen ID (zB "42") für den Parameter IDList funktioniert alles: Ich bekomme genau den gewünschten Datensatz.
* Bei zwei IDs (zB "42,16") bekomme ich auch nur einen Datensatz: Es scheint, als würde der Wert als Zahl betrachtet und gerundet werden. (Dh bei "42,6" bekomme ich die 43, bei "42,4" die 42)
* Ab 3 Werten bekomme ich eine leere Datenmenge (zB "42,56,91")
Einige Codeschnipsel:
Delphi-Quellcode:
type TMyDatabase = class(TObject)
private
FConnection: TADOConnection;
FDSIDList: TADODataSet;
[...]
end;
Delphi-Quellcode:
constructor TMyDatabase.Create;
begin
[...] // u.a. Anlegen von FConnection und Aufbauen der Verbindung
FDSIDList := TADODataSet.Create(nil);
FDSIDList.Connection := FConnection;
FDSIDList.CommandText := 'SELECT * FROM Cards WHERE ID IN (:IDList)';
end;
Delphi-Quellcode:
function TmtgDatabase.GetDeckFromIDList(IDs: string): Integer;
// >> IDs - Liste der auszulesenden IDs, durch Komma getrennt, zb "42,15,32"
// << Result - Anzahl der tatsächlich gelesenen Datensätze
begin
Result := 0;
FDSIDList.Parameters.ParamByName('IDList').Value := IDs;
FDSIDList.Active := True;
while not FDSIDList.Eof do begin
[...] // Verarbeiten des aktuellen Datensatzes, vorerst noch über globale Variablen
FDSIDList.Next;
Inc(Result);
end;
FDSIDList.Active := False;
end;
Das Auslesen ist dabei nicht das Problem: Füge ich die ID-Liste direkt in die
SQL-Anweisung ohne Parameter ein, so funktioniert es.
Meine Frage ist nun:
Was mache ich falsch? Wie gesagt: Ich bin gerade dabei, meine Kenntnisse zu verbessern und kenn mich noch nicht so gut aus
Würde mich freuen, wenn mir jemand helfen kann,
MfG Zwoetzen