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
Antwort Antwort
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, 12: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
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#2

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

  Alt 5. Jan 2009, 12:34
Hi,

SELECT * FROM Cards WHERE ID IN (:IDList) hierbei wird :IDList immer als eine (!) Stringvariablen geführt.
Für SQL hat die Menge für den IN-Vergleich damit immer nur ein Element (und zwar einen String/Varchar...).
Gruß
Norman
  Mit Zitat antworten Zitat
Zwoetzen

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

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

  Alt 5. Jan 2009, 12:45
Aso... Dann ist es natürlich klar, warum es nicht geht.

Könnte man das irgendwie anders mit Parametern noch lösen, oder muss ich die ID-Liste direkt in das SQL-Statement einfügen?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

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

  Alt 5. Jan 2009, 13:00
Hallo,

mach's doch so:
Delphi-Quellcode:
  fCommandText : String; // Als Property der Klasse.

[...]
  // Im Konstruktor statt FDSIDList.CommandText := ...
  fCommandText := 'SELECT * FROM Cards WHERE ID IN (:IDList)';
[...]

  // FDSIDList.Parameters.ParamByName('IDList').Value := IDs;
  // stattdessen
  FDSIDList.CommandText := AnsiReplaceText(fCommandText,':IDList',IDs);
  Mit Zitat antworten Zitat
Zwoetzen

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

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

  Alt 5. Jan 2009, 14:22
Werd es wohl so machen, wie du es vorgeschlagen hast, nahpets.

Danke euch beiden für die Antworten 8)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz