AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TADOQuery und LIKE

Ein Thema von DangerDistel · begonnen am 17. Mai 2013 · letzter Beitrag vom 18. Mai 2013
Antwort Antwort
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

AW: TADOQuery und LIKE

  Alt 17. Mai 2013, 20:09
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:
-- ohne doppelte Anführungszeichen würde der Parser ein Minuszeichen erkennen
SELECT "Renten-Betrag" FROM "Brutto-Gehalt"
2. Problem (und Ursache für fehlende Datensätze):
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);
fork me on Github
  Mit Zitat antworten Zitat
DangerDistel

Registriert seit: 3. Aug 2012
16 Beiträge
 
Delphi 2010 Professional
 
#2

AW: TADOQuery und LIKE

  Alt 17. Mai 2013, 20:24
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. ^^
Alex
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: TADOQuery und LIKE

  Alt 17. Mai 2013, 20:30
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. ^^
Über dem Text, den Du eingibts, ist eine Reihe von Symbolen, u. a. ein Delphisymbol. (das 16. von links?) Es erscheint beim Mitdermausdrüberfahren der Hinweis: Delphi-Code einfügen.
Dadrauf klicken und dann an der Cursorposition den Quelltext einfügen.
Per Copy&Paste bleibt die Formatierung erhalten.
Könnte dann in etwa so aussehen:
Delphi-Quellcode:
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;

Geändert von nahpets (17. Mai 2013 um 20:32 Uhr) Grund: Edit fand eine nicht unerhebliche Anzahl von Schreibfehlern.
  Mit Zitat antworten Zitat
DangerDistel

Registriert seit: 3. Aug 2012
16 Beiträge
 
Delphi 2010 Professional
 
#4

AW: TADOQuery und LIKE

  Alt 17. Mai 2013, 20:33
Ahh ok Danke
Alex
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5

AW: TADOQuery und LIKE

  Alt 17. Mai 2013, 20:35
Ja, du kannst im Beitrag oben aus der Formatleiste den "Delphi Helm" auswählen. Dadurch werden die Tags [ delphi ] und das Ende-Delphi Zeichen erzeugt.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: TADOQuery und LIKE

  Alt 18. Mai 2013, 06:24
Sowas
Delphi-Quellcode:
ASQLTemp := ASQLTemp + '[' + ATblName +']![' + arr_TBLCols[ix] + ']' + fConstants.BLANK1
                                 + 'LIKE' + fConstants.BLANK1 + fConstants.AnfZeichen + arr_TBLValues[ix] + '%' + fConstants.AnfZeichen;
schreibt man dann doch besser (z.B.) so:
Delphi-Quellcode:

ASQLTemp := ASQLTemp + Format('[%s]![%s] LIKE %s',aTblName, arr_TBLCols[ix], QuotedStr(arr_TBLValues[ix]+'%'));
Anmerkung 1: Was soll denn 'fConstants.BLANK1'?
Bitte beachte die Verwendung der Funktion 'QuotedStr'. Deine Lösung bringt für Werte, die ein Hochkomma enthalten, einen Fehler.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.220 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TADOQuery und LIKE

  Alt 18. Mai 2013, 06:47
Und wie schon so oft angemerkt: Verwende parametrisierte Abfragen!
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
DangerDistel

Registriert seit: 3. Aug 2012
16 Beiträge
 
Delphi 2010 Professional
 
#8

AW: TADOQuery und LIKE

  Alt 18. Mai 2013, 08:28
Sowas
Delphi-Quellcode:
ASQLTemp := ASQLTemp + '[' + ATblName +']![' + arr_TBLCols[ix] + ']' + fConstants.BLANK1
                                 + 'LIKE' + fConstants.BLANK1 + fConstants.AnfZeichen + arr_TBLValues[ix] + '%' + fConstants.AnfZeichen;
schreibt man dann doch besser (z.B.) so:
Delphi-Quellcode:

ASQLTemp := ASQLTemp + Format('[%s]![%s] LIKE %s',aTblName, arr_TBLCols[ix], QuotedStr(arr_TBLValues[ix]+'%'));
Anmerkung 1: Was soll denn 'fConstants.BLANK1'?
Bitte beachte die Verwendung der Funktion 'QuotedStr'. Deine Lösung bringt für Werte, die ein Hochkomma enthalten, einen Fehler.


den Format-Befehl hätte ich dann auch verwendet, ich wollte nur erstma schaun was ich für Ergebnisse bekomm.
fConstants.BLANK1 = Leerzeichen, wenn ich mir strings zusammensetze nutze ich lieber Konstanten, als ' ' , ist ne Angewohnheit von meiner Firma in der ich arbeite ^^
Alex
  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 22:55 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