Suchen unter Format()

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Suchen unter Format()

Beitrag von laines »

Hallo

Ich nochmal :oops:

Wie gehe ich denn mit einem % im Format() um, so dass er mir, wenn ich:
eie schreibe
Meier oder meistens oder Vollmeier findet ???
Beispiel:
So sieht es momentan aus:

Code: Alles auswählen

SQLQuery1.SQL.ADD('SELECT tk.kKun...
       'WHERE tk.cFirma LIKE "%'+suchen+ '%" '+
       'OR tk.cName LIKE "%'+suchen+ '%" '+
       'OR tk.cVorname LIKE "%'+suchen+ '%" '+
       'OR tk.ckundenNr LIKE "%'+suchen+ '%" '+
       ...');
So soll es dann in etwa aussehen aussehen:

Code: Alles auswählen

strQuerySuch:= Format('WHERE tk.cFirma LIKE %s OR tk.cName LIKE %s OR tk.cVorname LIKE %s OR tk.ckundenNr LIKE %s ', [suchen, suchen, suchen, suchen]);
    ...
evtl. kommt das unter const schon rein, dass es Global wird.

Gruß
Laines
Zuletzt geändert von Lori am Do 6. Okt 2011, 19:42, insgesamt 1-mal geändert.
Grund: Bitte richtigen Highlighter verwenden.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Suchen unter Format()

Beitrag von Socke »

Code: Alles auswählen

suchen := '%' + suchen + '%'
//oder
format('LIKE %%%s%%', suchen); // zwei aufeinander folgende Prozentzeichen werden durch Format() zu einem gekürzt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: Suchen unter Format()

Beitrag von laines »

Hallo

Irgendwie hab ich da keinen Erfolg ??? :?:

Code: Alles auswählen

suchen:='"%'+EditSuchen.Text+'%"';
//und
strQueryJahr:= Format('SUM( CASE WHEN YEAR(tz.dDatum) = %s THEN tz.fBetrag ELSE 0 END) [%s] ',  [jahr, jahr]);
    strQuerySuch:= Format('WHERE tk.cFirma LIKE %s ', [suchen]);
    srtQuerySort:= Format('ORDER BY [%s] %s', [sortieren, sort1]);
    DBGridCombo:= SQLQuery1.SQL.ADD(Format(sqlQuerySuch, [strQueryJahr, strQuerySuch, srtQuerySort]));
bringt Fehler:
SQLQuery3.jpg
und

Code: Alles auswählen

suchen:='%'+EditSuchen.Text+'%';
//und
strQueryJahr:= Format('SUM( CASE WHEN YEAR(tz.dDatum) = %s THEN tz.fBetrag ELSE 0 END) [%s] ',  [jahr, jahr]);
    strQuerySuch:= Format('WHERE tk.cFirma LIKE %s ', [suchen]);
    srtQuerySort:= Format('ORDER BY [%s] %s', [sortieren, sort1]);
    DBGridCombo:= SQLQuery1.SQL.ADD(Format(sqlQuerySuch, [strQueryJahr, strQuerySuch, srtQuerySort]));
bringt Fehler:
SQLQuery4.jpg
Dateianhänge
SQLQuery4.jpg
SQLQuery4.jpg (44.66 KiB) 1526 mal betrachtet
SQLQuery3.jpg
SQLQuery3.jpg (37.54 KiB) 1526 mal betrachtet

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Suchen unter Format()

Beitrag von Socke »

laines hat geschrieben:Irgendwie hab ich da keinen Erfolg ??? :?:
Ich empfehle mit dem Debugger zu überprüfen, welches SQL-Statement enn wirklich zusammengesetzt wurde. Dass es nicht funktioniert, siehts du auch an der Fehlermeldung; was genau schief geht leider nicht.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: Suchen unter Format()

Beitrag von laines »

ÄHHHH PEINLICH
Wie benutze ich denn den DEBUGGER ??
Wenn ich das mal weiß, dann Frag ich vielleicht nicht mehr so oft.

Ich hoffe ich hab das richtig gemacht.

Code: Alles auswählen

(gdb) 
<-data-evaluate-expression strQuerySuch>
^done,value="0x28bbcb0 'WHERE tk.cFirma LIKE \"%ewrt%\"  '"
(gdb)

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Suchen unter Format()

Beitrag von Socke »

laines hat geschrieben:Wie benutze ich denn den DEBUGGER ??
Quelltextzeile markieren, Rechtsklick darauf und im Kontextmenü einen Menüeintrag suchen, der "Haltepunkt setzen" oder so ähnlich heißt. Bei einem Haltepunkt wird dein Programm vom Debugger angehelten, sobald es dort ankommt.

Über das Hauptmenü "Ansicht->Debugger->Variablen" (oder so ähnlich; Tastenkombination Alt+F7) öfnnet sich ein Fenster, in dem du einen Variablenenamen eingeben kannst und die Werte anzeigen und ändern kannst (Eigenschaften von Objekten funktionieren nicht).
Die Befehle, um dein Programm weiterlaufen zu lassen, findest du im Hauptmenü unter "Start" oder "Ausführen".

-- Ich habe gerade kein Lazarus hier, deswegen sind die ganzen Beschreibungen ein wenig ungenau.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: Suchen unter Format()

Beitrag von laines »

Kann das an den Backslah \ Liegen ?
Ich muss doch eine Suchanfrage mit LIKE "%wort% " in (Anführungszeichen) einbetten ???

Im Debugger kommt dann das raus
(gdb)
<-data-evaluate-expression strQuerySuch>
^done,value="0x28bbcb0 'WHERE tk.cFirma LIKE

Code: Alles auswählen

\"%ewrt%\"  '"
(gdb)

Das ewrt ist nur eine Testsuche.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Suchen unter Format()

Beitrag von Socke »

laines hat geschrieben:Ich hoffe ich hab das richtig gemacht.
Sieht so aus, aber ich arbeite immer mit Lazarus.
laines hat geschrieben:Kann das an den Backslah \ Liegen ?
Ich muss doch eine Suchanfrage mit LIKE "%wort% " in (Anführungszeichen) einbetten ???
Anführungszeichen oder nicht und wenn ja, welche, hängt von der Datenbank ab. Beim MS SQL-Server musst du Zeichenketten in Anführungszeichen setzen. Die Backslashs gehören da nicht rein (außer du hast noch eine Bibltiothek, die diese benötigt).

Code: Alles auswählen

WHERE tk.cFirma LIKE "%ewrt%"
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: Suchen unter Format()

Beitrag von laines »

Jetzt hab ich mal ne s.. bl..e Frage.

Kann das überhaupt so Funktionieren ???

Code: Alles auswählen

const
sqlQuerySuch = 'SELECT tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt ' +
  ',%s '+
  'FROM tkunde tk ' +
  'INNER JOIN trechnung tr ON tk.kKunde = tr.tKunde_kKunde ' +
  'INNER JOIN tZahlung tz ON tr.tBestellung_kBestellung = tz.kBestellung ' +
  '%s '+
  //'OR tk.cName LIKE "%%%s%%" '+
  //'OR tk.cVorname LIKE "%%%s%%" '+
  //'OR tk.ckundenNr LIKE "%%%s%%" '+
  'GROUP BY tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt '+
  '%s';
und dann:

Code: Alles auswählen

procedure TForm1.ButtonSuchenClick(Sender: TObject);
begin
   suchen:=EditSuchen.Text;
   jahr:=Combobox1.Items[ComboBox1.ItemIndex];
  sort1:='ASC';
  sort2:='DESC';
   //Erst mal Verbindungen schliessen
   SQLQuery1.Active:=False;
   //SQLQuery1.Close;
   // SQLQuery1 leeren
   SQLQuery1.SQL.Clear;
 
   IF (jahr <> 'Gesamt') Then
begin
    strQueryJahr:= Format('SUM( CASE WHEN YEAR(tz.dDatum) = %s THEN tz.fBetrag ELSE 0 END) [%s] ',  [jahr, jahr]);
    strQuerySuch:= Format('WHERE tk.cFirma LIKE "%%%s%%"', [suchen]);
    srtQuerySort:= Format('ORDER BY [%s] %s', [jahr, sort2]);
    DBGridCombo:= SQLQuery1.SQL.ADD(Format(sqlQuerySuch, [strQueryJahr, strQuerySuch, srtQuerySort]));
 
    //Hier wird der Combobox Eintrag der gewählt wurde eingetragen
       //Eintrag Betrag ändern Verbindungen wieder öffnen
       DBGrid1.COLUMNS.Items[8].Title.Caption := '*Umsatz bezahlt '+ jahr;
       DBGrid1.COLUMNS.Items[8].FieldName := jahr;
       //SQLQuery1.Open;
       SQLQuery1.Active:= True;
      end
   else
Zuletzt geändert von Lori am Do 6. Okt 2011, 19:42, insgesamt 1-mal geändert.
Grund: Bitte richtige Highlighter verwenden.

Antworten