AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBGRID über Lookupcombobox oder Edit feld Selektieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBGRID über Lookupcombobox oder Edit feld Selektieren

Ein Thema von renekr · begonnen am 7. Aug 2005 · letzter Beitrag vom 12. Aug 2005
 
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: DBGRID über Lookupcombobox oder Edit feld Selektieren

  Alt 8. Aug 2005, 08:31
Das ist relativ unkompliziert.

Erstelle dir einfach eine Procedure in der du die Query mit den entsprechenden WHERE Paramatern neu öffnest. Die Procedure rufst du dann im onKeyPress deines EditFeldes bzw. im onCloseUp der Combobox auf.

Die Variante mit der DBLookupCombobox kannst du vergessen. Damit bekommst du nur eine Notlösungen hin.
Verwende statt dessen eine Combobox.

kleines Beispiel:
(Den Code habe ich hier schnell zusammengetippt. Habe grade keine IDE zur Verfügung.)

Delphi-Quellcode:
procedure TForm1.RunQuery;
var SQL, Option_e, Option_c, SQLOperator: String; // Option_e = Bedingung des EditFeldes, Option_c = Bedingung der Combobox
begin

  // Optionen parsen

  // Edit
  if trim(Edit1.text) <> 'then
    Option_e = Edit1.text;

  // Combobox Option vervollständigen (Feldname)
  if Combobox1.text <> '<alle>then
  begin
    Option_c = 'Vorname = '''+Combobox1.text+''''; // Suchbegriff muss immer so aussehen ''Suchbegriff''
  end;
  
  // SELECT zusammenbauen
  SQL='SELECT * FROM MeineTabelle';
  
  // Falls Optionen angegeben wurden, dann hinzufügen
  if Length(Option_e + Option_c)> 0 then
  begin
    if (Length(Option_e) <> 0) AND
       (Length(Option_c) <> 0) THEN
      SQLOperator = 'AND';
    
    SQL :=SQL + ' ' + Option_e + ' ' + SQLOperator + ' ' + Option_c;
    
    // Query Öffen, ggf. Fehlermeldung ausgeben
    try
      AdoQuery1.close;
      AdoQuery1.SQL.text:=SQL;
      AdoQuery1.open;
    except
      on e: Exception do
        Showmessage('Bei der Ausführung der Query ist folgender Fehler aufgetreten:'+#13#10+
                     e.message);
    end;
  end;
   
end;

Nachdem die Query geöffnet wurde füllst du die Combobox wieder mit gültigen Werten:

im AdoQuery1.AfterOpen

Delphi-Quellcode:
Procedue TForm1.AdoQuery1.AfterOpen(Dataset:TDataset);
var Q:TAdoQuery;
    S:String;
begin
  // Combobox für den Filter "Vorname" leeren
  Combobox1.items.clear;
  
  // die Option "<alle>" hinzufügen
  Combobox1.items.add('<alle>');

  // jetzt alle Werte der Spalte z.B. "Vorname" in einer zweiten Abfrage noch einmal holen
  // Diesesmal jedoch mit "DISTINCT" um doppelte Werte zu vermeiden und "ODERR BY" zum sortieren
  
  // dynamische Query instanzieren, SQL zusammenbauen und Öffnen
  try
    Q:=TAdoAuery.create(self;
    Q.Connection:=AdoQuery1.Connection;
  
    // Den SQL String deiner AdoQuery ab dem Wort FROM in S einlesen
    S:=COPY(AdoQuery1.sql.text,pos('FROM'),length(AdoQuery1.sql.text);

    // neuen SQL String fpr Q.SQL bauen
    Q.SQL.text := 'SELECT DISTINCT VORNAME'+ ' ' + S + ' ' + 'ORDER BY VORNAME';
      // Sollte jetzt z.B. so aussehen
      // SELECT DISTINCT VORNAME FROM XYZ WHERE Name = ''Meier'' ORDER BY VORNAME

    // Query öffnen und Combobox füllen
    Q.open;

    While not Q.eof do
    begin
      Combobox.items.add(Q.FieldByName('Vorname').AsString;
      Q.next;
    end;
  finally
    FreeAndNil(Q);
  end;

  // Jetzt sieht die Combobox in etwa so aus:
  // <alle>
  // Anton
  // Berta
  // Sigfried
end;

Ich hoffe es hilft etwas.
Wie gesagt, der Code ist hier live getippt und nicht getestet.
Kleine Fehler bitte ich zu entschuldigen ...


Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
 


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:32 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