![]() |
Datenbank: Access • Version: kA • Zugriff über: ADO
Abfrage verhält sich in Access anders als über ADO in Delphi
'loha Folks,
die untenstehende Abfrage wird in Access ausgeführt:
SQL-Code:
Als Parameter übergebe ich ein Sternchen bei Username und bei der DepartmentID nichts. So werden sämtliche Datensätze aus der Tabelle ausgelesen. Ist der Parameter DepartmentID gesetzt, werden nur noch die Datensätze ausgegeben, welche die entsprechende DepartmentID haben. So weit, so gut.
SELECT * FROM [User]
WHERE Username LIKE :Username AND DepartmentID = :DepartmentID OR :DepartmentID IS NULL ORDER BY Username; Nehme ich nun dieselbe Abfrage und führe sie in einer Applikation aus, so kann als DepartmentID alles mögliche übergeben werden (Username hat immer noch ein Sternchen beziehungsweise Prozentzeichen als Parameter), es werden trotzdem sämtliche in der Tabelle vorhandenen Datensätze ausgegeben, was ich etwas komisch finde. In Delphi werden die Parameter wie folgt gesetzt (habe die Werte versuchsweise von Hand eingetragen):
Delphi-Quellcode:
Wie bereits erwähnt, funktioniert dies aber nicht.
with ADODataSet_UserDepartment do
begin Close; Parameters.ParamByName('Username').Value := '%'; Parameters.ParamByName('DepartmentID').Value := '' Open; end; Weiss jemand Rat? Grüsse hirnstroem |
Re: Abfrage verhält sich in Access anders als über ADO in De
Ado verwendet m.W. ? statt :
|
Re: Abfrage verhält sich in Access anders als über ADO in De
? wäre doch aber ein Platzhalter für ein x-beliebiges Zeichen?!
|
Re: Abfrage verhält sich in Access anders als über ADO in De
SQL-Code:
SELECT * FROM [User]
WHERE Username LIKE ?Username AND DepartmentID = ?DepartmentID OR ?DepartmentID IS NULL ORDER BY Username; |
Re: Abfrage verhält sich in Access anders als über ADO in De
Zitat:
Er meinte natürlich den Parameterindikator. Jet selbst hat keine benannten Parameter, es kann also sein, dass du genauso "?" nehmen kannst, anstatt ":sssw".(Oder musst? kA ich fasse das Viech normal nicht an...) Du musst die Parameter in der gleichen Reihenfolge besetzten, wie du sie im Statement benutzt. Wie gesagt Jet ist IMO zu blöd für benannte Parameter. |
Re: Abfrage verhält sich in Access anders als über ADO in De
Ach so. Nein, Parameter werden schon mit einem Doppelpunkt bezeichnet.
Mein Problem ist vielmehr, dass in Access mit einem Sternchen als Parameter für Username und einem leeren Parameter für die DepartmentID (oder dann halt irgendeine DepartmentID welche in der Datenbank vorkommt) etwas anderes liefert, als ADO dies tut. ADO verlangt einfach Prozentzeichen anstatt Sternchen und Fragezeichen anstatt Underlines. |
Re: Abfrage verhält sich in Access anders als über ADO in De
SQL-Code:
^^ hiermit läuft etwas falsch.
DepartmentID = :DepartmentID
OR :DepartmentID IS NULL Dem Parameter DepartmentID habe ich schon NULL, Unassigned und alles mögliche übergeben, am Ergebnis ändert alles nichts. |
Re: Abfrage verhält sich in Access anders als über ADO in De
Delphi-Quellcode:
Access ist Krieg.
with ADODataSet_UserDepartment do
begin Close; if DepartmentID <> '' then begin CommandText := 'SELECT * FROM [User] WHERE Username LIKE :Username AND Forename LIKE :Forename AND Surname LIKE :Surname AND DepartmentID = :DepartmentID ORDER BY Username;'; Parameters.ParamByName('DepartmentID').Value := DepartmentID; end else CommandText := 'SELECT * FROM [User] WHERE Username LIKE :Username AND Forename LIKE :Forename AND Surname LIKE :Surname ORDER BY Username;'; Parameters.ParamByName('Username').Value := PrepareSearchString(Username) + '%'; Parameters.ParamByName('Forename').Value := PrepareSearchString(Forename) + '%'; Parameters.ParamByName('Surname').Value := PrepareSearchString(Surname) + '%'; Open; end; Ich benutze jetzt einfach zwei verschiedene Abfragen. |
Re: Abfrage verhält sich in Access anders als über ADO in De
Hallo,
SQL-Code:
Wieso übergibst du als zweiten Wert den Paramneter noch mal ?
DepartmentID = :DepartmentID
OR :DepartmentID IS NULL Müsste das nicht heissen ?
SQL-Code:
Heiko
DepartmentID = :DepartmentID
OR DepartmentID IS NULL |
Re: Abfrage verhält sich in Access anders als über ADO in De
Kommt natürlich darauf an, ob er das Feld oder den Parameter übeprüfen will. Ich vermute aber mal das Feld.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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-2025 by Thomas Breitkreuz