Neuigkeiten:

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

Mobiles Hauptmenü

Formular mit Suchfeld auf Unterformular

Begonnen von AllenWalker, August 25, 2013, 21:08:57

⏪ vorheriges - nächstes ⏩

AllenWalker

Zitat
wie lauten die Datensatzherkünfte der 3 Auswahlkombis?
Die Datenherkunft der 3 Auswahlkombis ist eine Tabelle.
Feld - Tabelle
Standort - Standort
Aktiv - AktivArchiv
Kontaktart - KontaktArt

Zitat
Kann das Feld "Standort" im UFO nicht "unsichtbar" gesetzt werden (oder, falls vorhanden, nicht aus der Form-Abfrage entfernt werden)?
In der Entwurfsansicht kann ich die Eigenschaft "Visible" auf No setze aber wenn ich die Ansicht wechsle bleibt das Feld "Standort" trotzdem sichtbar. Brauche ich das Feld nicht wegen der Suchkriterie Standort?

Zitat
einfach auch für diese UFO-Felder je ein Kombi verwenden...
Für die weitere Anwendung des Formulares wäre so ein Auswahlfeld im Unterformular irritierend, da man denken könnte man könnte den Wert ändern außer wenn ich die Eigenschaft "Enable" auf "No" setze.

Danke sehr,
Gruß,
AllenWalker

DF6GL

Hallo,

die Datensatzherkunft der Kombis sollte so lauten (jeweils angepasst):

Select StandortID, Standort From Standort  Order BY Standort


mit  
Spaltenanzahl: 2
Spaltenbreiten: 0cm;2cm



In der Tabelle "Standort"  kommt ein weiterer Eintrag hinzu:

StandortID    Standort

  6                _Alle         Der Unterstrich hier soll für ein Leerzeichen stehen !  Der ID-Wert ist hier natürlich beispielhaft




Im Code könnte der SQL-String dann so aussehen (besser bei den Kombis das AfterUpdate()-Ereignis benutzen:


Private Sub cbStandortAuswahl_Afterupdate()
 
 Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'   And kliVorname LIKE '" & Me!tbVornameSuche & "*'  AND (KBO = " & Me!cbStandortAuswahl & " Or " & Me!cbStandortAuswahl & " = 6 )  AND aktivArchiv = " & Me!cbAktivArchiv & " AND KontaktArt = " & Me!cbKontaktart
 
End Sub



Die "rote" Where-Condition muss natürlich auch in den restlichen SQL-Strings so eingesetzt werden...



Bei den Such-Textfeldern sollte bei der Verwendung des Change-Ereignisses die "Text"-Eigenschaft des akt. Textfeldes verwendet werden:


Private Sub tbNachnameSuche_Change()

 Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'   And kliVorname LIKE '" & Me!tbVornameSuche & "*'  AND KBO = " & Me!cbStandortAuswahl & " AND aktivArchiv = " & Me!cbAktivArchiv & " AND KontaktArt = " & Me!cbKontaktart

End Sub






Ich sehe nicht ein , warum ein Feld weiterhin sichtbar sein sollte, wenn dessen Eigenschaft auf "unsichtbar" steht. Außer an der DB (am Formular) ist irgendetwas zerschossen.




Wenn kein Kombi im Ufo benutzt werden soll, kann man:

-- eine verknüpfende Abfrage über alle beteiligten Tabellen für die Datenherkunft des UFOs benutzen und ein Textfeld an das Feld "Standort" binden.

oder

--  ein ungebundenes Textfeld im Detailbereich platzieren, das etwa einen solchen Eintrag hat:

= Dlookup("Standort";"Standort";"StandortID= " & [StandortID])


wobei StandortID das entspr. Feld  aus der Datenherkunft des Forms ist.




Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AllenWalker

Zitat
In der Tabelle "Standort"  kommt ein weiterer Eintrag hinzu:

StandortID    Standort

   6                _Alle         Der Unterstrich hier soll für ein Leerzeichen stehen !  Der ID-Wert ist hier natürlich beispielhaft




Im Code könnte der SQL-String dann so aussehen (besser bei den Kombis das AfterUpdate()-Ereignis benutzen:


Private Sub cbStandortAuswahl_Afterupdate()
 
  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'   And kliVorname LIKE '" & Me!tbVornameSuche & "*'  AND (KBO = " & Me!cbStandortAuswahl & " Or " & Me!cbStandortAuswahl & " = 6 ) AND aktivArchiv = " & Me!cbAktivArchiv & " AND KontaktArt = " & Me!cbKontaktart
   
End Sub



Die "rote" Where-Condition muss natürlich auch in den restlichen SQL-Strings so eingesetzt werden...


Danke sehr für deine Mühe aber kann noch nicht so richtig nachvollziehen in wie fern das bei der Auswahl von dem Eintrag "Alle" alle Datensätze gezeigt werden?

DF6GL

Hallo,

http://www.donkarl.com/?FAQ3.14

Beachte aber auch den letzten Satz in diesem Artikel...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AllenWalker

#34
Ich komme gerade etwas aus dem Konzept bei der langen Abfrage für die Elemente (Dropdown und Textfelder) bei den Suchkriterien.
Versuche mit der Beschreibung von DF6GL die Änderungen vorzunehmen aber bekomme eine Fehlermeldung von Access.

Zitat
Run-Time error '2185'

You can't reference a property or method for a control unless the control has focus.

Mein Code für die Dropdown Box bei AktivArchiv

Private Sub cbAktivArchiv_AfterUpdate()
 'Kontrolle
 MsgBox "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'   And kliVorname LIKE '" & Me!tbVornameSuche.Text & "*' AND (KBO = " & Me!cbStandortAuswahl & " Or " & Me!cbStandortAuswahl & " = 8) AND (aktivArchiv = " & Me!cbAktivArchiv & " Or " & Me!cbAktivArchiv & " = 3) AND (Kontaktart = " & Me!cbKontaktart & " Or " & Me!cbKontaktart & " = 6)"

 Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'   And kliVorname LIKE '" & Me!tbVornameSuche.Text & "*' AND (KBO = " & Me!cbStandortAuswahl & " Or " & Me!cbStandortAuswahl & " = 8) AND (aktivArchiv = " & Me!cbAktivArchiv & " Or " & Me!cbAktivArchiv & " = 3) AND (Kontaktart = " & Me!cbKontaktart & " Or " & Me!cbKontaktart & " = 6)"

End Sub


Kleine Frage am Rande. Wie kann man nochmal im Code Zeilenbrüche einfügen um den Code etwas lesbarer zu machen bei langen Codezeilen?

Für die korrekte Anzeige der Inhalte im Unterformular anstelle der Fremdschlüssel aus der Tabelle Kontakte, habe ich momentan ein ungebundenes Textfeld für Standort im Unterformular hinzugefügt und als Datenherkunft folgende Zeile eingefügt.


=DLookUp("Standortbezeichnung";"Standort";"ID= " & [ID])


Bekomme als Ergebnis im Unterformular "#Name?" angezeigt.

Danke sehr,
Gruß,
AllenWalker

DF6GL

Hallo,

Private Sub cbAktivArchiv_AfterUpdate()
  'Kontrolle
  MsgBox "SELECT kliName, kliVorname, KBO FROM Kontakte WHERE " & _
  " kliName LIKE '" & Me!tbNachnameSuche & "*'   And " & _
  " kliVorname LIKE '" & Me!tbVornameSuche  & "*' AND " & _
  " (KBO = " & Me!cbStandortAuswahl & " Or " & Me!cbStandortAuswahl & " = 8) AND " & _
  " (aktivArchiv = " & Me!cbAktivArchiv & " Or " & Me!cbAktivArchiv & " = 3) AND " & _
  " (Kontaktart = " & Me!cbKontaktart & " Or " & Me!cbKontaktart & " = 6)"

  Me!SucheKontakteDetailSub.Form.RecordSource ="SELECT kliName, kliVorname, KBO FROM Kontakte" & _
  "  WHERE  kliName LIKE '" & Me!tbNachnameSuche & "*' " & _
  "  And kliVorname LIKE '" & Me!tbVornameSuche  & "*' " & _
  "  AND (KBO = " & Me!cbStandortAuswahl & " Or " & Me!cbStandortAuswahl & " = 8)" & _
  "  AND (aktivArchiv = " & Me!cbAktivArchiv & " Or " & Me!cbAktivArchiv & " = 3)" & _
  "  AND (Kontaktart = " & Me!cbKontaktart & " Or " & Me!cbKontaktart & " = 6)"

End Sub




=DLookUp("Standortbezeichnung";"Standort";"ID= " & [ID])   

Gibt es im UFO und in der Tabelle ein Feld mit Namen "ID") ?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AllenWalker

Danke sehr :) Habe meinen Code entsprechend angepasst aber wenn ich bei einem Kombinationsfeld etwas auswähle und die anderen Kombinationsfelder sind leer kommt eine Fehlermeldung die besagt dass in der Abfrage Elemente fehlen. Ich gehe davon aus dass die Kombinationsfelder Standardwerte enthalten sollen. In diesem Fall wäre es das Feld mit dem Wert "_Alle" (Leerzeichen).

Durch eine Suche habe ich folgendes gefunden aber keins von beiden hat den Standardwert im Kombinationsfeld angezeigt.
Zitat

  • =DLookup(" Alle";"Kontaktart")
  • =[cbKontaktart].[ItemData](6)

Zitat
=DLookUp("Standortbezeichnung";"Standort";"ID= " & [ID])    

Gibt es im UFO und in der Tabelle ein Feld mit Namen "ID") ?
Im Unterformular gibt es kein Feld mit dem Namen "ID". Im Unterformular befinden sich die Felder "Name", "Vorname", "Mobil", "KBO" (Standort), "AktivArchiv" und "Kontaktart". Alle Felder kommen aus der Tabelle "Kontakte". Aus den Vorschlägen ein, zwei Post vorher habe ich das mit dem ungebundenen Textfeld benutzt.

Danke sehr,
Gruß,
AllenWalker

DF6GL

#37
Hallo,


nun,  meine Vorschläge sollten halt (im Prinzip) GENAU umgesetzt werden..


Beim Ereignis "Change" eines Kombis/Textfeldes kann (muss) dessen .TEXT- Eigenschaft verwendet werden, beim "AfterUpdate"-Ereignis jedoch nicht....


Wenn bei leeren Feldern Elemente fehlen, dann muss dieser Zustand mit der NZ() oder IsNull()-Funktion abgefangen und ein Ersatzwert bereitgestellt werden.


z. B.:


.
.
" aktivArchiv = " & nz(Me!cbAktivArchiv,3)  AND " & _  
" Kontaktart = " & nz(Me!cbKontaktart,6) "
.
.



Das alleinige Setzen der Standard-Eigenschaft auf den " ALLE"-Wert (besser:  den Primärschlüsselwert für " ALLE" ) eliminiert nicht den Fall, dass der angezeigte Wert manuell gelöscht, d. h. das Kombifeld geleert wird.

Bei solchen Felder, die mit    Like '....*'     verglichen werden, ist das nicht unbedingt nötig.



Hier:
=DLookUp("Standortbezeichnung";"Standort";"ID= " & [ID])

muss für ID  der Name des Primärschlüsselfeldes der Tabelle "Standort" und für ID der Name des Formulartextfeldes, das den Primärschlüsselwert anzeigt, eingesetzt werden.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AllenWalker

Irgendwie habe ich etwas falsch verstanden oder falsch programmiert. Bin der Beschreibung von DF6GL gefolgt um über den Eintrag " Alle" im Kombinationsfeld alle Datensätze im Unterformular anzeigen zu lassen. Wenn ich etwas bei einem Kominationsfeld was auswähle bleibt das Unterformular leer obwohl in der Tabelle solche Datensätze enthalten sind und wenn ich bei den Textfelder was eingebe bekomme ich folgenden Fehler.
Zitat
Run-Time error '2185'

You can't reference a property or method for a control unless the control has focus.

Mein Quellcode

Private Sub cbAktivArchiv_AfterUpdate()
         
  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                                " WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'" & _
                                                " AND kliVorname LIKE '" & Me!tbVornameSuche & "*'" & _
                                                " AND KBO = " & Nz(Me!cbStandortAuswahl, 8) & _
                                                " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                                " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)

End Sub

Private Sub cbKontaktart_AfterUpdate()

  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                                " WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'" & _
                                                " AND kliVorname LIKE '" & Me!tbVornameSuche & "*'" & _
                                                " AND KBO = " & Nz(Me!cbStandortAuswahl, 8) & _
                                                " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                                " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)

End Sub

Private Sub cbStandortAuswahl_AfterUpdate()

  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                                " WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'" & _
                                                " AND kliVorname LIKE '" & Me!tbVornameSuche & "*'" & _
                                                " AND KBO = " & Nz(Me!cbStandortAuswahl, 8) & _
                                                " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                                " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)

End Sub

Private Sub tbNachnameSuche_Change()

  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                                " WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'" & _
                                                " AND kliVorname LIKE '" & Me!tbVornameSuche.Text & "*'" & _
                                                " AND KBO = " & Nz(Me!cbStandortAuswahl, 8) & _
                                                " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                                " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)

End Sub

Private Sub tbVornameSuche_Change()

  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                                " WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'" & _
                                                " AND kliVorname LIKE '" & Me!tbVornameSuche.Text & "*'" & _
                                                " AND KBO = " & Nz(Me!cbStandortAuswahl, 8) & _
                                                " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                                " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)
End Sub


Zitat
Hier:
=DLookUp("Standortbezeichnung";"Standort";"ID= " & [ID])

muss für ID  der Name des Primärschlüsselfeldes der Tabelle "Standort" und für ID der Name des Formulartextfeldes, das den Primärschlüsselwert anzeigt, eingesetzt werden.
Nochmal zum besseren Verständnis, diese Vorgehensweise war gedacht für ein ungebundenes Textfeld im Unterformular. Aber dann kann ich bei ID keinen Wert übergeben da in dem ungebundenen Textfeld vorher kein Wert enthalten ist.

Danke sehr,
Gruß,
AllenWalker

DF6GL

#39
Hallo,

bezgl. "Property" liegt der Fehler darin, dass im Change-Ereignis eines Such-Textfeldes die Referenz auf NUR DESSEN TEXT-Eigenschaft zulässig , bei den anderen aber die Referenz auf deren VALUE-Eigenschaft (die als "Standard" auch weggelassen werden kann) erforderlich ist.


Private Sub tbNachnameSuche_Change()

 Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                               " WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'" & _
                                               " AND kliVorname LIKE '" & Me!tbVornameSuche.Text & "*'" & _
                                               " AND KBO = " & Nz(Me!cbStandortAuswahl, 8) & _
                                               " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                               " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)

End Sub

Private Sub tbVornameSuche_Change()

 Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                               " WHERE kliName LIKE '" & Me!tbNachnameSuche.Text & "*'" & _
                                               " AND kliVorname LIKE '" & Me!tbVornameSuche.Text & "*'" & _
                                               " AND KBO = " & Nz(Me!cbStandortAuswahl, 8) & _
                                               " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                               " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)
End Sub



Bezgl. von " Alle" liegt ein Logik-Fehler vor.  Es muss vor dem Zusammenbau des SQL-Strings der akt. Inhalt aller  Kombifelder auf diese Situation hin geprüft und entspr. reagiert werden:



Private Sub cbStandortAuswahl_AfterUpdate()
If Nz(Me!cbStandortAuswahl, 8) = 8 Then   '"Alle" ist gewählt oder das Kombifeld ist leer

 Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                               " WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'" & _
                                               " AND kliVorname LIKE '" & Me!tbVornameSuche & "*'" & _
                                              " AND KBO = " & Nz(Me!cbStandortAuswahl, 8 ) & _
                                               " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                               " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)

End Sub



wobei hier nur dieses eine Kombifeld berücksichtigt ist, die anderen müssten ebenfalls (in jeder Ereignisprozedur) geprüft werden. In diesem Fall der voneinander unabhängigen Kombifelder und der Tatsache, dass bei Datentyp Zahl, Long nicht mit dem Like-Operator plus "*" gearbeitet werden kann, wäre es angebracht, den Zusammenbau des SQL_Strings in eine Funktion/Sub  auszulagern und dort die Überprüfung aller beteiligten Suchfelder durchzuführen.  In den Ereignisprozeduren käme dann lediglich der Aufruf dieser Funktion/Sub zu stehen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AllenWalker

Zitat
Bezgl. von " Alle" liegt ein Logik-Fehler vor.  Es muss vor dem Zusammenbau des SQL-Strings der akt. Inhalt aller  Kombifelder auf diese Situation hin geprüft und entspr. reagiert werden:

Private Sub cbStandortAuswahl_AfterUpdate()
If Nz(Me!cbStandortAuswahl, Cool = 8 Then   '"Alle" ist gewählt oder das Kombifeld ist leer

  Me!SucheKontakteDetailSub.Form.RecordSource = "SELECT kliName, kliVorname, KBO FROM Kontakte " & _
                                                " WHERE kliName LIKE '" & Me!tbNachnameSuche & "*'" & _
                                                " AND kliVorname LIKE '" & Me!tbVornameSuche & "*'" & _
                                               " AND KBO = " & Nz(Me!cbStandortAuswahl, 8 ) & _
                                                " AND aktivArchiv = " & Nz(Me!cbAktivArchiv, 3) & _
                                                " AND KontaktArt = " & Nz(Me!cbKontaktart, 6)

End Sub



wobei hier nur dieses eine Kombifeld berücksichtigt ist, die anderen müssten ebenfalls (in jeder Ereignisprozedur) geprüft werden. In diesem Fall der voneinander unabhängigen Kombifelder und der Tatsache, dass bei Datentyp Zahl, Long nicht mit dem Like-Operator plus "*" gearbeitet werden kann, wäre es angebracht, den Zusammenbau des SQL_Strings in eine Funktion/Sub  auszulagern und dort die Überprüfung aller beteiligten Suchfelder durchzuführen.  In den Ereignisprozeduren käme dann lediglich der Aufruf dieser Funktion/Sub zu stehen.

Bezüglich des rot markierten Satzes zerbreche ich mir etwas den Kopf. Mir fallen da zwei Möglichkeiten ein. Entweder über IF... THEN... ELIF... END IF oder die Inahlte aller Kombifelder in der IF-Abfrage mit ODER zu verknüpfen. Aber mir will nicht einfallen wie ich den SQL-String zusammengebastelt bekomme. Würde der auch durch die IF-Abfragen zusammengebastelt werden?

AllenWalker

Keiner eine Idee wie er mir helfen könnte ???

DF6GL

Hallo,

wo ist denn das Problem?


unter Logikproblem habe ich gemeint, dass eine "Alle"-Abfrage mit Hilfe einer    " xxx=  yyy  Or  xxx is Null" _Konstruktion innerhalb mehrerer anderer Kriterien nicht so funktioniert, wie es erwartet wird.

Es sollten (müssen) alle Kombinationen von möglichen "NULL"-Situtionen der jeweils anderen Suchfelder über If/Endif oder SelectCase entspr. behandelt werden.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AllenWalker

Die Suche habe ich hinbekommen. Im weiteren der Quellcode dazu:


Private Sub MakeRecordSource()
  Dim strFilter As String
  ' Kombifelder AktivArchiv, Standort und Kontaktart
  If Not IsNull(Me!cbAktivArchiv) Then
    If Not Me!cbAktivArchiv = 3 Then _
    strFilter = strFilter & " AND aktivArchiv = " & Me!cbAktivArchiv
  End If
  If Not IsNull(Me!cbKontaktart) Then
    If Not Me!cbKontaktart = 6 Then _
    strFilter = strFilter & " AND KontaktArt = " & Me!cbKontaktart
  End If
  If Not IsNull(Me!cbStandortAuswahl) Then
    If Not Me!cbStandortAuswahl = 8 Then _
    strFilter = strFilter & " AND KBO = " & Me!cbStandortAuswahl
  End If
  ' Textfelder Vor- und Nachname
  ' mit Unterstützung des Change-Ereignisses
  If Screen.ActiveControl.Name = "tbNachnameSuche" Then
      strFilter = strFilter & " AND kliName LIKE '" & Me!tbNachnameSuche.Text & "*'"
  ElseIf Not IsNull(Me!tbNachnameSuche) Then
      strFilter = strFilter & " AND kliName LIKE '" & Me!tbNachnameSuche & "*'"
  End If
  If Screen.ActiveControl.Name = "tbvornameSuche" Then
      strFilter = strFilter & " AND kliVorname LIKE '" & Me!tbVornameSuche.Text & "*'"
  ElseIf Not IsNull(Me!tbVornameSuche) Then
      strFilter = strFilter & " AND kliVorname LIKE '" & Me!tbVornameSuche & "*'"
  End If
  ' Filterstring auswerten
  If Len(strFilter) > 5 Then
     strFilter = Mid(strFilter, 6) 'erstes AND abschneiden
     MsgBox strFilter
     Me!SucheKontakteDetailSub.Form.Filter = strFilter
     Me!SucheKontakteDetailSub.Form.FilterOn = True
  Else
   'mach was anderes
     Me!SucheKontakteDetailSub.Form.FilterOn = False
  End If
End Sub


Habe nun das Problem wenn ich einen Kunden aus den Suchergebnissen auswähle, die Daten nicht an den Filter eines weiteren Unterformulars weitergeben kann. Dieses Formular enthält die Terminprotokolle aller Kunden und soll anhand des ausgewählten Kunden gefiltert werden.

Dazu habe ich folgenden Quellcode:

Private Sub kliName_Click()

  MsgBox "Text für Label: " & Me!kliName & " " & Me!kliVorname
  ' Von Unterformular "SucheKontakteDetailSub" auf Steuerelement "lblProtokollUebersicht" im Hauptformular
  Me.Parent!lblProtokollUebersicht = Me.Parent!lblProtokollUebersicht & " " & Me!kliName & " " & Me!kliVorname
 
  Dim strFilter As String
 
  strFilter = "KliID = " & Me!KliID
 
  MsgBox strFilter
  'Forms!ProtokollUebersicht.Form.Filter = strFilter
  'Forms!ProtokollUebersicht.Form.FilterOn = True

End Sub


Als Meldung bekomme ich für das Schreiben auf das Label im Hauptformular. Das Label soll nachher den Text "Protokolle von X Y" enthalten. Benötige ja noch die Daten aus dem ersten Formular (Suchergebnisse) für das zweite Unterformular (Protokollübersicht).
Zitat
Laufzeitfehler '438':
Objekt unterstützt diese Eigenschaft oder Methode nicht

Folgende Seite habe ich zur Rate geholt aber hat nichts gebracht.

Danke sehr,
Gruß,
AllenWalker

DF6GL

#44
Hallo,


http://www.ms-office-forum.de/forum/showthread.php?t=304293



I'm not amused..




<gelöscht>
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access