Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBLookupComboBox in einem Suchformular (https://www.delphipraxis.net/3893-dblookupcombobox-einem-suchformular.html)

diesel 4. Apr 2003 13:29


DBLookupComboBox in einem Suchformular
 
hi,
ich habe in einem Suchformular DBLookupComboBoxen benutzt um bei bestimmten Feldern vorgegebene Werte aus einer DB aufzulisten.
Wenn ich zur Laufzeit nun einen Wert auswähle klappt das wunderbar mit der Suche. Will ich aber nun eine weitere Suche durchführen, das benutzte Feld löschen und ein anderes benutzen, dann läßt es sich nicht mehr löschen.
Ich kann das doch sicherlich nicht nur lösen, indem ich in der DB jeweils einen leeren Datensatz einfüge!?

Bei dieser Gelegenheit fällt mir gerade noch ein weiteres Problem mit selbigem Objekt ein:
Wenn ich bei geöffneter DropDownListe das Scrollrad benutze, stürzt das Programm ab. Warum???

Gruß Diesel
:firejump:

Daniel B 4. Apr 2003 13:49

Hallo,

ab nach Datenbanken.

Grüsse, Daniel :hi:

diesel 7. Apr 2003 08:15

tja wie´s aussieht kann mir wohl keiner helfen.....
Bin ich denn der einzige, der dieses Problem hat ??

Diesel :cry:

Mario 7. Apr 2003 09:17

Dein Problem ist ungenau beschrieben. Wie änderst Du denn das Feld zur Laufzeit, was bei Dir nicht gehen will? Im Edit-Modus ist die DB dann aber nicht mehr?

diesel 7. Apr 2003 09:31

Ich ändere das Feld zur Laufzeit durch Auswahl eines Wertes aus der Drop Down Liste. Was ich gerne hätte ist ein ein Button ("Neue Suche"o.ä.), der mir alle Felder leert.
Gibt es eine Methode die Combobox während der Laufzeit zu leeren?
Ich hoffe ihr könnt mir folgen ;)

Diesel

Mario 7. Apr 2003 12:07

Ich blicke leider nicht, wo Du nun das Problem siehst. Eine DBLookupCombobox schlägt den Wert mit all seinen Möglichkeiten in einer anderen Tabelle (ListSource, Listfield, ListfieldIndex) nach und trägt ihn in eine bestimmte Tabelle ein (DataSource, DataField). Wenn Du andere Werte zur Auswahl anbieten willst, musst Du eine Listsource, die den gewünschten Inhalt hat, zur Verfügung stellen.

Von daher macht der Wunsch, die ComboBox löschen zu wollen, auch keinen Sinn, weil es eben keine ComboBox ist.

diesel 7. Apr 2003 12:22

Ich habe mehrere solcher Boxen auf meinem Formular. Z.B. Kontinent, Land, Anwendungsbereich usw. und diese sind an die entsprechenden Listen gekoppelt. Wenn ich nun in einer ersten Suche nach allen Datensätzen mit z.B. Europa suche und danach aber z.B. nach Anwendungsbereich unabhängig vom Kontinent, dann sollte ich den Momentanen Wert aus Kontinent löschen können, sodass nur nach dem Anwendungsbereich gesucht werden kann. Ist aber einmal ein Wert eingetragen, lässt sich die Box nicht mehr leeren, sondern ich kann nur einen anderen Wert auswählen.
Wenn ich in der ListSource nun einen leeren Datensatz einfüge erfüllt das den Zweck, dass ich dann den leeren Wert auswählen kann. Aber das muss doch auch so lösbar sein, dass ich nicht in alle ListSources einen leeren Datensatz einfügen muss.........oder auch nicht, dass ist meine Frage.
Oder bin ich total auf dem Holzweg ??

Gruß Diesel

Gast 7. Apr 2003 12:22

Hallo Ddiesel 8) , Hallo Mario 8) ,

also wie ich meine Du solltest für solche Such-Auswahl keine DB-Komponenten benutzen... (wie hier DBLookupComboBoxen)... da wenn Du löschen möchtest wird ein Wert in Deiner Tabelle gelöscht (es seitdem Du möchtest das)... Du solltest viel mehr eine Routine entwickelt die eine TComboBox Komponente füllt und dann damit arbeiten...

Oder habe ich das ganze falsch verstanden...


Gruß

Paul Jr.

P.S.

Bei manchen ComboBox- Komponenten kann man mit ESC löschen... (in Eigenschaften Einstelbar)

Gast 7. Apr 2003 12:27

Noch etwas Diesel...

Mann kann aber... wenn man unbedingt das will... Kurzfristig... z.B. die DataField Eigenschaft der Komponente = ’’ setzen und DataSource = NIL... und dann Komponenten UPDATE oder REFRESH meine ich...und dann dir alte Werte schon wieder einstellen...

Vielleicht geht das...

Gruß

Paul Jr.

diesel 7. Apr 2003 12:34

Hallo Paul,
vielen Dank erst mal für deine Antwort :D
Das mit Esc klappt leider nicht aber die andere Idee werd ich mal ausprobieren. :coder:

Gruß Diesel

Gast 7. Apr 2003 14:19

Hallo Diesel :lol: ,

schau was ich so bei mir gefunden habe... (das ist schon lange her...als ich das programmiert habe... da war ich noch JUNG und na...ja... schön...)... ist vielleicht nicht perfekt... aber schon etwas...:


Code:

(*____________________________________________________________________________

Diese Procedur dient zum löschen der Inhalte des ComboBox
Sie wird nur (!!!) einmall in dem Ereignis OnkeyDown des FORMULARS
aufgerufen.
      FormLookComboDelete(Sender,Key);

Gelöscht wird anhand der Taste Entf und der Rück (Back)-Taste
__________
Wichtig: Bitte nicht vergessen die Eigenschaft KeyPrieview des Formulars
               auf TRUE zu setzen.
____________________________________________________________________________
*)
PROCEDURE FormLookComboDelete(Sender: TObject; VAR Key: Word);
VAR
   strDataField : STRING;
BEGIN
   IF (Key = vk_Delete) OR (Key = vk_Back) THEN
      BEGIN
         (* Bei DBLookupComboBox unterscheiden wir zwischen zwei Fällen:
          1.) Seine Eigenschaft DataSource und logische Weise auch DataField
                sind nicht belegt d.h. DataField = '';
                In dem Fall reicht es der Eigenschaft DataField zuerst ein
                beliebiges Wert zuzuweisen, da so wie so DataSource leer ist
                und kein Widerspruch erheben wird. Anschließend weisen wir
                schon wieder die Eigenschaft DataField = ''; Und so erreichen
                wir das der Eintrag in dem DBLookupComboBox ausgelöscht wird.

          2.) Jetzt wird bißchen schwieriger, da die Eigenschaften DataSource
                und DataField entsprechende Werte besitzen. Aus diesem Grund
                greiffen wir direkt die DataSet(also Tabelle oder vielleicht Query)
                an. Die DataField Eigenschaft = strDataField verrät uns natürlich
                die Tabellen Feld-Name dessen wert Value auf Null gesetzt wird.
                Und schon ist der Inhalt gelöscht                                 *)

         // für ComboBox des Typs TDBLookupComboBox
         IF (Sender as TForm).ActiveControl is TDBLookupComboBox THEN
            BEGIN
               strDataField := ((Sender as TForm).
                      ActiveControl as TDBLookupComboBox).DataField;
               IF strDataField = '' THEN
                  BEGIN // Fall 1.)
                     ((Sender as TForm).
                                    ActiveControl as TDBLookupComboBox).DataField := '#';
                     ((Sender as TForm).
                                    ActiveControl as TDBLookupComboBox).DataField := '';
                  END
                ELSE // Fall 2.)
                   ((Sender as TForm).ActiveControl as TDBLookupComboBox).
                              DataSource.DataSet.FieldByName(strDataField).Value := NULL;
            END;

         // für ComboBox des Typs TRxDBLookupCombo
         IF (Sender as TForm).ActiveControl is TRxDBLookupCombo THEN
            BEGIN
               strDataField := ((Sender as TForm).
                      ActiveControl as TRxDBLookupCombo).DataField;
               IF strDataField = '' THEN
                  BEGIN // Fall 1.)
                     ((Sender as TForm).
                                    ActiveControl as TRxDBLookupCombo).DataField := '#';
                     ((Sender as TForm).
                                    ActiveControl as TRxDBLookupCombo).DataField := '';
                  END
                ELSE // Fall 2.)
                   ((Sender as TForm).ActiveControl as TRxDBLookupCombo).
                              DataSource.DataSet.FieldByName(strDataField).Value := NULL;
            END;

         // für ComboBox des Typs TRxDBLookupCombo
         IF (Sender as TForm).ActiveControl is TDBComboBox THEN
            BEGIN
               strDataField := ((Sender as TForm).
                      ActiveControl as TDBComboBox).DataField;
               IF strDataField = '' THEN
                  BEGIN // Fall 1.)
                     ((Sender as TForm).
                                    ActiveControl as TDBComboBox).DataField := '#';
                     ((Sender as TForm).
                                    ActiveControl as TDBComboBox).DataField := '';
                  END
                ELSE // Fall 2.)
                   ((Sender as TForm).ActiveControl as TDBComboBox).
                              DataSource.DataSet.FieldByName(strDataField).Value := NULL;
            END;
      END;
//_______________________***__ ENDE DER PROCEDUR __***________________________
END;
Gruß

Paul Jr.

diesel 7. Apr 2003 14:53

:hello: Jipiiee :hello:
genau das war es was ich gesucht habe !!!
Vielen Dank Paul Jr !!

Gruß Diesel

renekr 8. Aug 2005 23:36

Re: DBLookupComboBox in einem Suchformular
 
Hi,
jetzt habe ich mal eine Frage zu dem Thema:

Ich habe eine Gefüllte Dblookupcombobox mit listsource .
Jetzt wähle ich was aus der Liste aus .

Danach will ich auch mit einem Button die Dblookupcombo löschen.und wieder aktiv machen,aber dann ist der alte gewählte wert wieder drin.

Wie kann ich das besser Lösen?

Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:02 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