![]() |
TADOQuery und LIKE
hallo,
bin neu in dem Forum. Ich hoffe man wird nicht zusammengestaucht, falls diese Frage doch schon mal vorkam... Also um was es sich handelt ist, ich möchte in meiner Verwaltung nach Namen suchen. Die Daten sind vorhanden, nun möchte ich über den SQL operator LIKE ähnliche Einträge finden. Ich benutze eine MS Access DB -> SYNTAX: SELECT * FROM STAEDTE WHERE STADT_NAME LIKE "Regens*" Die Syntax erzeuge ich aus meinem Programm. Access zeigt mir die gewünschten Ergebnisse, aber meine ADOQuerry bringt nach dem Übergeben des SQL-Strings einen RecordCount von 0 :( kann mir jemand bitte helfen? |
AW: TADOQuery und LIKE
Hallo,
stell' uns bitte mal den Quelltext zur Verfügung, mit dem Du die Query bestückst. Es könnte sein, dass das SQL dort nicht in der von Dir erwarteten Form ankommt. Ohne Quelltext ist das aber schwer zu beurteilen. |
AW: TADOQuery und LIKE
oh verdammt, ich hab auf Report geklickt ^^ ich denk das kam jetzt falsch an oder?
|
AW: TADOQuery und LIKE
Delphi-Quellcode:
so also die [-Klammern habe hinzugefügt, da Acces mir diese anbietet, die ADOQuery bingt auch keinen Fehler, der RecordCount is immernoch 0 :/
procedure TDataMod.SQL_LIKE_TBLSearch(AConnection:TADOConnection; ATblName:WideString;
arr_TBLCols:array of string; arr_TBLValues:array of string; APK:string; var AResultList:TStringList); var AQuery:TADOQuery; ASQLTemp:string; ix:integer; ASQL_Default:string; begin {SELECT STAEDTE.ID_STADT, STAEDTE.STADT_NAME FROM STAEDTE WHERE (([STAEDTE]![STADT_NAME] Like "*Mark"));} if AConnection <> nil then begin if Trim(ATblName) <> EmptyWideStr then begin if Length(arr_TBLCols) > 0 then begin if Length(arr_TBLValues) > 0 then begin if Length(arr_TBLCols) = Length(arr_TBLValues) then begin if TblExists(AConnection,ATblName) then begin AQuery:=TADOQuery.Create(Self); try ASQLTemp:='SELECT * FROM' + fConstants.BLANK1 + ATblName + fConstants.BLANK1 + 'WHERE' + fConstants.BLANK1; ASQL_Default:=ASQLTemp; for ix:=Low(arr_TBLCols) to High(arr_TBLCols) do begin if (Trim(arr_TBLCols[ix]) <> EmptyStr) and (Trim(arr_TBLValues[ix]) <> EmptyStr) then begin if Length(arr_TBLCols) = 1 then begin ASQLTemp:=ASQLTemp + '[' + ATblName +']![' + arr_TBLCols[ix] + ']' + fConstants.BLANK1 + 'LIKE' + fConstants.BLANK1 + fConstants.AnfZeichen + arr_TBLValues[ix] + '*' + fConstants.AnfZeichen; end else begin if ix < High(arr_TBLCols) then begin ASQLTemp:=ASQLTemp + '[' + ATblName +']![' + arr_TBLCols[ix] + ']' + fConstants.BLANK1 + 'LIKE' + fConstants.BLANK1 + fConstants.AnfZeichen + arr_TBLValues[ix] + fConstants.AnfZeichen + fConstants.BLANK1 + 'AND' + fConstants.BLANK1; end else begin if ix = High(arr_TBLCols) then ASQLTemp:=ASQLTemp + '[' + ATblName +']![' + arr_TBLCols[ix] + ']' + fConstants.BLANK1 + 'LIKE' + fConstants.BLANK1 + fConstants.AnfZeichen + arr_TBLValues[ix] + fConstants.AnfZeichen; end; end; end; end; if ASQLTemp <> ASQL_Default then begin AQuery.Connection:=AConnection; AQuery.SQL.Add(ASQLTemp); AQuery.Open; AQuery.First; while not(AQuery.Eof) do begin AResultList.Add(AQuery.FieldByName(fConstants.TBL_TOWN_ID).AsString); AQuery.Next; end; AQuery.Close; end; finally AQuery.Free; end; end; end; end; end; end; end; end; |
AW: TADOQuery und LIKE
sorry für die nicht vorhandene Formatierung :( , wie kann ich das einstellen? ^^
ich hoffe ihr könnt zumindest etwas entnehmen ^^ danke im voraus |
AW: TADOQuery und LIKE
Zitat:
Über Access werden die bekannten Wildcards verwendet wie man sie von Suche nach Dateien oder bei einer Websuche kennt: * und ? Jedoch ist im SQL-Standard definiert das die Wildcards % und _ sind. Greift man nun über ADO auf Access zu, so verhält sich Access hier standardkonformer als wenn man es direkt verwendet. Lösung: Verwende % und _ als Wildcard. Willst du dem Anwender nicht verwirre, sorge dafür das die eingegeben Wildcards * und ? automatisch nach % und _ gewandelt werden. |
AW: TADOQuery und LIKE
Like mit * kennt Access nur in der eigenen Oberfläche, die im übrigen einiges anders macht als man es beim Zugriff z.B. über ADO machen muss. Wenn Du von außen zugreifst kannst/musst Du die übliche SQL - Syntax mit LIKE verwenden mit % als Asterix
Code:
WHERE XYZ LIKE 'Text%'
oder je nach Anforderung WHERE XYZ LIKE '%Text%' |
AW: TADOQuery und LIKE
1. Problem:
SQL-Strings werden in einfach Hochkommas gesetzt (gleich wie die Strings in Delphi) Doppelte Anführungszeichen verwendet man dann, wenn man Feld- oder Tabellennamen escapen muss:
SQL-Code:
2. Problem (und Ursache für fehlende Datensätze):
-- ohne doppelte Anführungszeichen würde der Parser ein Minuszeichen erkennen
SELECT "Renten-Betrag" FROM "Brutto-Gehalt" die Wildcards für like sind '%' ==> findet 0 oder mehr beliebige Zeichen (entspricht dem * unter DOS/Windows/Linux) '_' ==> findet 1 beliebiges Zeichen
Delphi-Quellcode:
suchmuster := 'Regens%';
ASQLTemp := 'SELECT * FROM STAEDTE WHERE STADT_NAME LIKE ' + QuotedStr(suchmuster); |
AW: TADOQuery und LIKE
Hallo,
okay, haben schon eineinhalb dutzend Leute geantwortet. in der "normalen" SQL-Syntax ist der Platzhalter für beliebig viele Zeichen das % und nicht der *. Wenn es dann noch nicht klappt, gib dir vor dem AQuery.Open; mal AQuery.SQL.Text (von mir aus auch mit ShowMessage kannst Du dann per Strg+C kopieren und hier einfügen) aus und prüfe, ob dadrin das ist, was Du erwartest. Dieser String muss in Access eine Ergebnismenge liefern, sonst ist er inhaltlich falsch, nicht zwingend auch syntaktisch. |
AW: TADOQuery und LIKE
habt vielen Dank :) ich werde dahingehend die Abfrage ändern, falls es noch Probleme geben sollte, melde ich mich noch einmal,
noch eine andere Frage. Gibt es hier im Forum die Delphi - Formatierung? also mit Tab oder Leerzeichen? Weil wenn alles untereinander steht sieht das dumm aus. ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 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