AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [ADO] Attribut IS IN (:Parameter) - Funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

[ADO] Attribut IS IN (:Parameter) - Funktioniert nicht

Ein Thema von Zwoetzen · begonnen am 5. Jan 2009 · letzter Beitrag vom 5. Jan 2009
 
Zwoetzen

Registriert seit: 19. Sep 2007
Ort: Ilmenau
93 Beiträge
 
Delphi 2009 Professional
 
#1

[ADO] Attribut IS IN (:Parameter) - Funktioniert nicht

  Alt 5. Jan 2009, 13:30
Datenbank: MSAccess • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz