AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abfrage verhält sich in Access anders als über ADO in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage verhält sich in Access anders als über ADO in Delphi

Ein Thema von hirnstroem · begonnen am 20. Jul 2007 · letzter Beitrag vom 23. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

Abfrage verhält sich in Access anders als über ADO in Delphi

  Alt 20. Jul 2007, 12:36
Datenbank: Access • Version: kA • Zugriff über: ADO
'loha Folks,

die untenstehende Abfrage wird in Access ausgeführt:

SQL-Code:
SELECT * FROM [User]
WHERE
Username LIKE :Username
AND
DepartmentID = :DepartmentID
OR
:DepartmentID IS NULL
ORDER BY Username;
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.

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:
  with ADODataSet_UserDepartment do
  begin
    Close;
    Parameters.ParamByName('Username').Value := '%';
    Parameters.ParamByName('DepartmentID').Value := ''
    Open;
  end;
Wie bereits erwähnt, funktioniert dies aber nicht.

Weiss jemand Rat?

Grüsse
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 12:38
Ado verwendet m.W. ? statt :
Markus Kinzler
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 12:44
? wäre doch aber ein Platzhalter für ein x-beliebiges Zeichen?!
inde deus abest
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 12:45
SQL-Code:
SELECT * FROM [User]
WHERE
Username LIKE ?Username
AND
DepartmentID = ?DepartmentID
OR
?DepartmentID IS NULL
ORDER BY Username;
Markus Kinzler
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 12:48
Zitat von hirnstroem:
? wäre doch aber ein Platzhalter für ein x-beliebiges Zeichen?!
Hast du zu lange Access benutzt?
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 12:49
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.
inde deus abest
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 12:56
SQL-Code:
DepartmentID = :DepartmentID
OR
:DepartmentID IS NULL
^^ hiermit läuft etwas falsch.

Dem Parameter DepartmentID habe ich schon NULL, Unassigned und alles mögliche übergeben, am Ergebnis ändert alles nichts.
inde deus abest
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 13:32
Delphi-Quellcode:
  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;
Access ist Krieg.

Ich benutze jetzt einfach zwei verschiedene Abfragen.
inde deus abest
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 14:35
Hallo,

SQL-Code:
DepartmentID = :DepartmentID
OR
:DepartmentID IS NULL
Wieso übergibst du als zweiten Wert den Paramneter noch mal ?
Müsste das nicht heissen ?
SQL-Code:
DepartmentID = :DepartmentID
OR
DepartmentID IS NULL
Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Abfrage verhält sich in Access anders als über ADO in De

  Alt 20. Jul 2007, 14:38
Kommt natürlich darauf an, ob er das Feld oder den Parameter übeprüfen will. Ich vermute aber mal das Feld.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:03 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