Januar 24, 2021, 03:35:35

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Erweiterte Suchfunktion in Formularen (kein Kombinationsfeld)

Begonnen von zallma, Januar 05, 2021, 13:44:09

⏪ vorheriges - nächstes ⏩

zallma

Hallo zusammen,

ich bin gerade dabei ein kleines CRM Tool zu bauen, welches eigentlich recht simpel ist. Nach zwei Tagen erfolgloser Suche würde euch jetzt doch direkt um Hilfe bitten.

Meine DB besteht aus zwei Tabellen "tbl_Kontakte" und "tbl_Kontakt_Protokoll". Zur Eingabe eines neuen Kontaktes habe ich mir bereits ein Formular gebaut, welches einwandfrei funktioniert. Im gleichen Stil wollte ich nun ein Formular erstellen welches es dem Benutzer ermöglicht, über Buttons und Eingabefelder ein neues Gesprächsprotkoll zu erfassen. Dabei muss zunächst eine Kontakt_ID ausgewählt werden, damit die Protokolle später mit dem jeweiligen Kontakt verbunden sind.

Nun zum Problem: Beinahe jeder Forumsbeitrag empfiehlt zur Auswahl (in meinem Fall) des Kontaktes, ein Kombinationsfeld mit Angabe von Vor-, Nachname, etc.. Das würde auch Sinn machen, würde ich hier nicht bereits ca. 1500 Kontakte angelegt haben. Ein Kombifeld ist somit viel zu unübersichtlich und hilft kaum bei der Suche nach dem richtigen Kontakt um ein Protokoll anzulegen.
Ich brauche eine Möglichkeit, dass in dem Protokolleingabe-Formular nach einem Kontakt aus der Tabelle tbl_Kontakte gesucht werden kann und die ID dieses Kontaktes dann zum Speichern eines Protokolls verwendet werden kann. Dabei sollte die Suche bestenfalls anhand mehrerer Kriterien flexibel möglich sein => z.B. Eingabe Vorname ==> Anschließend werden alle Kontakte mit dem Vornamen angezeigt und es kann einer ausgewählt werden, von welchem dann die ID für das Feld eingetragen wird...

Ich gehe davon aus, dass es bestimmt eine einfache Lösung für mein Problem gibt, aber aktuell sehe ich sie leider nicht und ich bin am verzweifeln.

Bin über jede Hilfe dankbar!

Grüße
Manu

DF6GL

Januar 05, 2021, 13:57:48 #1 Letzte Bearbeitung: Januar 05, 2021, 14:03:20 von DF6GL
Hallo,

die einfachste Lösung wäre, das Kombifeld zur Auswahl beizubehalten, es aber zunächst vor zu filtern (abhängiges Kombifeld), falls die eingebaute Filterfunktion des Kombis nicht ausreicht.

Dafür kann ein normales Textfeld verwendet werden oder auch ein weiteres Kombi, dessen Auswahl das zweite Kombi filtert.


Sieh hier für das Prinzip:

http://www.donkarl.com/?FAQ4.36



ZitatDabei sollte die Suche bestenfalls anhand mehrerer Kriterien flexibel möglich sein => z.B. Eingabe Vorname ==>

Was verstehst Du unter "mehrerer Kriterien" ?


ZitatIm gleichen Stil wollte ich nun ein Formular erstellen welches es dem Benutzer ermöglicht, über Buttons und Eingabefelder ein neues Gesprächsprotkoll zu erfassen.

Warum ein neues Form? Das Erfassen eines neuen Protokolls kann gleich im UFO erfolgen, sofern Du eine HFO/UFO-Konstruktion verwendest.

zallma

Hallo Franz,

besten Dank für die schnelle Antwort.

Das mit der Filterfunktion habe ich noch nicht ausprobiert, könnte aber evtl. helfen. Lassen sich hiermit auch nach verschiedenen "Kriterien" suchen?
Mit Kriterien meine ich die 16 verschiedenen Felder die meine Tabelle beinhaltet (z.B. Vorname, Nachname, Firma, Kontakt über, Adresse, etc.). Es wäre praktisch wenn man egal aus welcher Spalte der Tabelle ein Stichwort in das Filterfeld eingeben könnte und anschließend alle Datensätze (z.B. im Kombinationsfeld) sehen kann.

Falls man dann z.B. mal nur den Vornamen weiß, oder eben nur die Firma, dann soll unabhängig alles angezeigt werden, was mit dem Suchwort in Verbindung steht.

Sorry falls die Fragen hier zu einfach sind, aber ich stehe aktuell etwas auf dem Schlauch.

zallma

Zitat von: DF6GL am Januar 05, 2021, 13:57:48Warum ein neues Form? Das Erfassen eines neuen Protokolls kann gleich im UFO erfolgen, sofern Du eine HFO/UFO-Konstruktion verwendest.


Weil ich die Eingabe eines neuen Kontaktes mit der Eingabe eines Protokolls gerne trennen würde. Protokolle werden ja meist nur für bereits bestehende Kontakte angelegt..

DF6GL

Januar 05, 2021, 14:31:39 #4 Letzte Bearbeitung: Januar 06, 2021, 10:59:25 von DF6GL
Hallo,

na, die Fragen sind nicht zu einfach für den, der die Frage stellt   ;)

Filterfunktion des Kombis   ist vielleicht etwas übertrieben ausgedrückt. Damit ist lediglich die "Autovervollständigung" des Kombifeldes gemeint. Soll heißen, wenn zum B. "Mai" im Kombifeld eingegeben wird, springt der Cursor im Listenteil auf den ersten Eintrag, der eben mit "Mai" beginnt.

Das erfüllt aber nicht Deine Vorstellung, wobei ich diese 16 Kriterien für nicht so prickelnd erachte.

Das sagt aus, dass man nicht weiß, was man (für wen man) eigentlich Daten erfasst.



Dazu erstelle ein ungebundenes Textfeld  ("txtVorsuche") mit dieser Ereignisprozedur:




<<Edit>>   Anführungszeichen durch Hochkommata im SQL-String ersetzt

Sub txtVorsuche_Change()

  Me!KontakteID.RowSource = "Select KontaktID, Kontakt_NachName & ( ',' + Kontakt_Vorname) from tblKontakte " & _
  " Where Vorname & '|' & Nachname & '|' & Firma & '|' & [Kontakt über] & '|' & Ort Like '*" & Me!txtVorsuche.Text & "*'"
End Sub


PS:

ZitatWeil ich die Eingabe eines neuen Kontaktes mit der Eingabe eines Protokolls gerne trennen würde. Protokolle werden ja meist nur für bereits bestehende Kontakte angelegt..

Das ist kein Argument !  Wenn ein Kontakt (HFO) neu angelegt wird, existiert im UFO auch kein Kontakt-Protokoll. Ein solches kann anschließend angelegt werden oder auch nicht.

Beaker s.a.

@zallma
Mit vier oder fünf Felder habe ich das vor langer Zeit schon einmal
gemacht.
Dabei beinhaltet das "Such"kombi alle zur Suche gewünschten Spalten, -
die ID-Spalte als gebundene immer zuerst.
Zum Vorfiltern legst du eine Tabelle an mit einem Feld für den Feldnamen
aus Kontakte und einer Spalte mit einem String, in dem die Spaltenbreiten
des "Such"kombis" festgehalten werden. Hierbei wird immer nur die Spalte
des Suchfeldes mit einem Wert > 0cm angegeben.
Diesen String übergibst du nach Auswahl im Feld-Kombis an die entsprechende
Eigenschaft des "Such"kombis", und schon kannst du in der Spalte suchen.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

zallma

Danke für die weiteren Antworten. Leider bin ich trotzdem noch keinen Schritt weiter gekommen.
Zitat von: DF6GL am Januar 05, 2021, 14:31:39Dazu erstelle ein ungebundenes Textfeld  ("txtVorsuche") mit dieser Ereignisprozedur:
Code [Auswählen] Erweitern
Sub txtVorsuche_Change()

  Me!KontakteID.RowSource = "Select KontaktID, Kontakt_NachName & ( "," + Kontakt_Vorname) from tblKontakte " & _
  " Where Vorname & "|" & Nachname & "|" & Firma & "|" & [Kontakt über] & "|" & Adresse Like '* & Me!txtVorsuche.Text & "*'"
End Sub
Habe ich eingefügt und die Feldnamen entsprechend meiner Tabellen angepasst. Funktioniert leider trotzdem nicht.


Zitat von: DF6GL am Januar 05, 2021, 14:31:39Das ist kein Argument !  Wenn ein Kontakt (HFO) neu angelegt wird, existiert im UFO auch kein Kontakt-Protokoll. Ein solches kann anschließend angelegt werden oder auch nicht.

Ich wäre auch offen für eine Lösung über HFO/UFO, aber das hilft doch dann nur bei dem Eintrag eines neuen Kunden oder? Wie könnte ich dann bspw. einen Kunden (aus den 1.500) auswählen um im UFO ein neues Protokoll anzulegen, ohne vorher mich vorher durch alle Kontakte durchklicken zu müssen?

Zitat von: Beaker s.a. am Januar 05, 2021, 15:52:13Mit vier oder fünf Felder habe ich das vor langer Zeit schon einmal
gemacht.
Dabei beinhaltet das "Such"kombi alle zur Suche gewünschten Spalten, -
die ID-Spalte als gebundene immer zuerst.
Zum Vorfiltern legst du eine Tabelle an mit einem Feld für den Feldnamen
aus Kontakte und einer Spalte mit einem String, in dem die Spaltenbreiten
des "Such"kombis" festgehalten werden. Hierbei wird immer nur die Spalte
des Suchfeldes mit einem Wert > 0cm angegeben.
Diesen String übergibst du nach Auswahl im Feld-Kombis an die entsprechende
Eigenschaft des "Such"kombis", und schon kannst du in der Spalte suchen.

Das werde ich wohl als nächstes probieren.

DF6GL

Hallo,

ZitatFunktioniert leider trotzdem nicht.

Soll was heißen? 


ZitatIch wäre auch offen für eine Lösung über HFO/UFO, aber das hilft doch dann nur bei dem Eintrag eines neuen Kunden oder? Wie könnte ich dann bspw. einen Kunden (aus den 1.500) auswählen um im UFO ein neues Protokoll anzulegen, ohne vorher mich vorher durch alle Kontakte durchklicken zu müssen?

Indem zunächst der entspr. Kunde selektiert (mit Hilfe wieder eines Kombis gesucht) wird.. Da wird nichts "durchgeklickt".



Am Besten lädst Du die DB hier mal hoch, komprimiert/repariert und gezippt...



zallma

Danke nochmal für die Unterstützung. Im Anhang mal die Datei ohne die gespeicherten Datensätze. Wie gesagt ist das Ganze nichts spektakuläres. Ich steh noch ganz am Anfang und würde gerne ein einfaches CRM Tool bauen, scheiter aber leider an der Suchfunktion für die Protokoll Tabelle.

Freue mich über Rückmeldungen. Vielen Dank!

Sie dürfen in diesem Board keine Dateianhänge sehen.

MzKlMu

Januar 06, 2021, 00:13:23 #9 Letzte Bearbeitung: Januar 06, 2021, 00:59:20 von MzKlMu
Hallo,
für diesen einfachen Aufbau mit den 2 Tabellen in einer 1:n Beziehung machst Du das viel, viel zu kompliziert.
Lege ein Hautformular an für die Kunden und darin ein verknüpftes Unterformular für die Kontaktprotokolle.
Dann siehst Du in einem Formular den Kunden und im Ufo direkt die Protokolldaten.

In das Hafo gehören auch die 4 Buttons des Menüs (Kontakt suchen, Neuer Kontakt, Protokoll suchen, Neues Protokoll).
Zur Suche der Kunden kannst Du ein Kombinationsfeld verwenden, das über sehr komfortable Funktionen verfügt die man zur Suche nutzen kann. Z.B. "Automatisch Ergänzen", sodass Du mit wenigen Zeichen bereits den richtigen Kunden hast.
Alles sehr einfach und bedienungsfreundlich.

Weitere Hinweise:
Für die Kategorie und die Anrede sind Tabellen anzulegen, Wertelisten sind ungeeignet. In die Tabelle für die Anrede lassen sich auch noch gleich Felder für die Briefanreden unterbringen, die ja für Mann und Frau unterschiedlich sind. Ggf. muss auch naoch als Anrede "Firma" aufgenommen werden.

Auch die Kommunikationsfelder sind als n:m Beziehung in einer eigenen Tabelle auszulagern. Wobei auch eine Tabelle für die Kommunikationsarten anzulegen ist.

PS:
Warum nennst Du die Tabelle "Kontakte" wenn darin die Kunden sind und Du sogar den PS KundenID nennst?

Im Anhang noch ein einfaches Beispiel für Hafo/Ufo.
Öffne einfach das Formular "frm_Kontakte". In diesem Formular kannst Du alles erledigen.
Wenn Du in das Kombi zur Suche Buchstaben eingibst wird mit jedem Zeichen die Auswahl genauer. Du bist dann auch bei 1500 Einträgen mit wenigen Zeichen beim gewünschten Kunden. So schnell kannst Du mit einem Textfeld nicht suchen.
Gruß
Klaus

DF6GL

Hallo,

und hier zusätzlich die Vorfilterung des Kombis in der angehängten Datei.



PS:

Habe meinen Code in den vorhergehenden Posts syntaktisch korrigiert.

zallma

Hallo Klaus, Hallo Franz,

nach eurer Hilfe muss ich wohl gestehen, dass das tatsächlich zu kompliziert gedacht war. Habe mich da wohl etwas reingesteigert und dann den Wald vor lauter Bäumen nicht mehr gesehen :D

Habe nun beide Ideen zusammengeführt und auch die Hinweise bzgl. der zusätzlichen Tabellen miteinbezogen. Funktioniert prächtig und sieht auch um einiges besser aus.

Vielen Dank für eure schnelle Hilfe! :-)

Viele Grüße
Manu

zallma

Hallo nochmal,

sorry, aber ich muss hier nochmal kurz nachhaken: Mir wäre es ganz recht, dass bei Neuladen des Kontakte Formulares keine Eingaben in den Textfeldern zu sehen sind, sonst würde das meinen Button "neuen Kontakt anlegen" ziemlich sinnlos machen.

Habe es über Me.Undo beim Form Laden probiert, dort wird dann allerdings immer noch der Eintrag aus dem Suchfeld angezeigt. Gibt es eine andere Funktion um alle Felder nach Abbruch und beim Neuladen zurückzusetzen?

Besten Dank schonmal!

MzKlMu

Hallo,
stelle "Daten eingeben" auf Ja, dann sind die Felder leer. Mit Me.Undo hat das nichts zu tun.
Gruß
Klaus

Beaker s.a.

Hallo Klaus,
Zitatstelle "Daten eingeben" auf Ja
Dann kann er aber nicht mehr suchen bzw. muss diese Eigenschaft
zu einer passenden Zeit wieder zurück gesetzt werden.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.