AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Mehrere Suchbegriffe in einem Datensatz suchen
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Suchbegriffe in einem Datensatz suchen

Ein Thema von Flo · begonnen am 21. Apr 2003 · letzter Beitrag vom 30. Apr 2003
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Flo
Flo

Registriert seit: 30. Mär 2003
Ort: Süd-Niedersachsen
81 Beiträge
 
Delphi 5 Professional
 
#1

Mehrere Suchbegriffe in einem Datensatz suchen

  Alt 21. Apr 2003, 20:50
Ich möchte eine Suche durchführen. Das besondere daran(oder vielleicht auch nicht) ist, dass man drei Suchbegriffe eingeben kann. Also...er soll nachschauen, ob alle drei Suchbegriffe in einem Datensatz vorhanden ist. Ich habe folgenden Code von MrSpock erhalten:

Delphi-Quellcode:
SELECT * from personen
WHERE (abteilung = :abteilung) AND
(reihe = :reihe) AND
(nr = :nummer)

Ich muss irgendwie mit den erzeugten Parametern auf ParamByName('abteilung').Value zugreifen. Vor dem Open muss ich dann alle 3 Parameter besetzen und schon bekommst ich nur die Sätze, die alle 3 Werte enthalten.

Das ist das, welches ich nicht verstehe

Vielen Dank nochmal an MrSpock
MfG
Florian

SwapIt!:
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 21. Apr 2003, 21:22
Hallo Flo,

da bin ich schon wieder .

Ziehe einmal eine TQuery Komponente auf das Formular und setze die Eigenschaft DatabaseName auf den Alias, den du auch für die Tabelle benutzt hast. Dann klicke die SQL Eigenschaft an und schreibe dort das oben gezeigte SQL Statement rein. Dabei musst du natürlich den Tabellennamen, der hinter from steht durch den echten Tabellennamen ersetzen (ohne die Endung .DB), außerdem musst du die drei Felder in der where Klausel durch die korrekten Namen der Felder der Tabelle ersetzen. Die 3 Bezeichner mit dem Doppelpunkt kannst du beliebig nennen, am besten natürlich so, dass die Bedeutung klar wird. Wenn dir das so weit nicht klar ist, dann poste einmal wie die Tabelle heißt und wie die 3 Felder, nach denen du suchen willst.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#3
  Alt 22. Apr 2003, 06:39
Hallo,

ich hätte noch einen anderen Ansatz zu anzubieten, ohne der Parameterfunktion:
Delphi-Quellcode:
  WITH Query1 DO
    BEGIN
        Close;
        WITH SQL DO
          BEGIN
            Clear;
            Add('SELECT * ');
            Add('FROM Tabelle.db');
            Add('WHERE Spalte1 = ' + CHR(39) + Edit1.Text + CHR(39));
            Add('AND Spalte2 = ' + CHR(39) + LCB_AuftraegeFuer.Text + CHR(39)); // Lookupcombobox
            Add('AND TARGSTARTDATE <= ' + CHR(39) + DateToStr(DateTimePicker1.Date) + CHR(39));
          END;
        Query1.Active := True;
        Open;
      END;
    END;
Damit kannst Du Variablen, Comboboxen, Edits usw. als "Parameter" für ein SQL-Statement Übergeben.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von Flo
Flo

Registriert seit: 30. Mär 2003
Ort: Süd-Niedersachsen
81 Beiträge
 
Delphi 5 Professional
 
#4
  Alt 22. Apr 2003, 09:33
Danke erst einmal für eure Antworten.

@MrSpock
Soweit habe ich das hinbekommen. Aber ich weiß jetzt nicht, wie ich den Code per Buttonclick aufrufe.

@APP
Hab deinen Code auch mal ausprobiert, aber der klappt irgendwie nicht Hab ihn natürlich auch angepasst ! Hier ist er:
Delphi-Quellcode:
procedure TForm7.BitBtn1Click(Sender: TObject);
begin
WITH Query1 DO
    BEGIN
        Close;
        WITH SQL DO
          BEGIN
            Clear;
            Add('SELECT * ');
            Add('FROM kosten.db');
            Add('WHERE abteilung = ' + CHR(39) + Edit1.Text + CHR(39));
            Add('AND reihe = ' + CHR(39) + edit2.Text + CHR(39)); // Lookupcombobox
            Add('AND Nr <= ' + CHR(39) + edit3.text + CHR(39));
          END;
        Query1.Active := True;
        Open;
      END;

end;
MfG
Florian

SwapIt!:
  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
  Alt 22. Apr 2003, 09:54
Hallo Flo,

den abgebildeten Code fügst du in die Methode ein, die auf ein Doppelklick des OnClick Events des gewünschten Schalters erzeugt wird. Das "Open" der Query Komponente führt letztlich die Abfrage aus.

Zum Code vom APP:

Du solltest ihn wie folgt ändern:
Delphi-Quellcode:
WITH Query1 DO
    BEGIN
        Close;
        WITH SQL DO
          BEGIN
            Clear;
            Add('SELECT * ');
            { Tabellenname ohne Punkt, sonst muss er in
              Anführungszeichen gestzt werden }

            Add('FROM kosten');
            Add('WHERE abteilung = ' + CHR(39) + Edit1.Text + CHR(39));
            { falls reihe und Nr Zahlenfelder sind, muss das Chr(39)
              weggelassen werden }

            Add('AND reihe = ' +edit2.Text);
            Add('AND Nr <= ' +edit3.text);
          END;
        Query1.Active := True;
        Open;
      END;
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Flo
Flo

Registriert seit: 30. Mär 2003
Ort: Süd-Niedersachsen
81 Beiträge
 
Delphi 5 Professional
 
#6
  Alt 22. Apr 2003, 19:22
Danke, aber ich bekomme folgende Fehlermeldung:

Ungültiges Schlüsselwort
Symbol-String R1'
and Nummer <= 1
Zeilennummer4

R1 ist die Reihe.
Was sagt die Fehlermeldung aus und wie bekomme ich das Problem in den Griff?
MfG
Florian

SwapIt!:
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7
  Alt 22. Apr 2003, 20:51
Hallo Flo,
wie gesagt, ob du Chr(39) um den Feldwert packen musst, hängt vom Datentyp ab. Ist "Reihe" ein Stringfeld, musst du Edit2.Text in "" übergeben, das gehtmit Chr(39)+Edit2.Text+Chr(39) oder einfacher über QuotedStr(Edit2.Text). Handelt es sich bei einem Feld um ein Numerisches Feld, muss der Wert von Editx.Text direkt benutzt werden.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Flo
Flo

Registriert seit: 30. Mär 2003
Ort: Süd-Niedersachsen
81 Beiträge
 
Delphi 5 Professional
 
#8
  Alt 23. Apr 2003, 10:20
Jetzt kommt die Fehlermedlung:
'Keine Übereinstimmung der Typen im Ausdruck'
MfG
Florian

SwapIt!:
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9
  Alt 23. Apr 2003, 16:15
Hallo Flo,

OK, dann poste doch bitte noch einmal die genaue Definition der Felder:
  • abteilung
  • reihe
  • nr
außerdem die Zuordnung, was steht in Edit1, Edit2 und Edit3.
Mit dieser Info sollte es möglich sein, die Query klar und korrekt zu definieren.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Flo
Flo

Registriert seit: 30. Mär 2003
Ort: Süd-Niedersachsen
81 Beiträge
 
Delphi 5 Professional
 
#10
  Alt 24. Apr 2003, 13:43
Ok....*such*....

in edit2 steht die abteilung,
in edit2 steht die Reihe und
in edit3 steht die Nummer.

Abteilung = Abteilung,
Reihe = Reihe,
Nummer = Nummer.

Abteilung und Nummer enthalten Zahlen und Buchstaben. Reihe nur Zahlen.

Wenn noch was fehlt, bitte melden !
MfG
Florian

SwapIt!:
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 04:25 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