Refresh von Listenfeld nach leeren von Textfeldern

Moderator: ModerationP

Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon thommybe71 » 11. Jan 2019, 08:32

Hallo,

Ich habe ein Hauptformular und dort 3 Registerkarten ...
in Registerkarte 2 befindet sich ein Unterformular mit ungebundenen Textfeldern und einem Listenfeld .
Im Listenfeld werden mir die Daten einer Tabelle aufgelistet mit Doppelklick auf einen Datensatz wird mir dieser in den Textfeldern aufgerufen wo man sie ändern kann .
dann hab ich des weiteren dort einen Button der mir alle Textfelder auf einen schlag leeren soll.. was er im Grunde auch tut nur mit dem Problem das mir das Listenfeld nicht aktualisiert wird.... es müsste hier komplett neu die Listenfeldabfrage gestartet werden... macht es aber irgendwie nicht trotz der Anweisung dazu
Code: Alles auswählen
'Textfelder leeren
Private Sub cmd_cls_Click()
On Error GoTo cmd_cls_Err
Dim ctl As Control
For Each ctl In Me.Controls
    If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
        ctl = Null
    End If
   
Next ctl

 Me.Form.Refresh     

( Me.Form.Requery auch kein Erfolg)
( Me!lst_ubw_sicht.Requery auch kein Erfolg )
 
cmd_cls_Exit:
        Exit Sub
       
cmd_cls_Err:
    MsgBox Error$
    Resume cmd_cls_Exit

End Sub


zur Datensatzherkunft des Listenfeld(lst_ubw_sicht) basiert auf einer Tabellen direkt Abfrage wo in einem Textfeld das Kriterium [ Wie'4*' ] steht , um die liste gleich nach der 4 selektiert wird.
beim Aufrufen funktioniert es tadellos. Nur gehe ich auf Felder leeren macht es mir alles leer was es auch soll... aber eben das Listenfeld wird nicht neu nach der 4 aufgerufen :?:

Das TabellenFeld z_EBELN (vielleicht könnte ja hier als Kriterium was anderes hin als Wie'4*' zum Aufrufen der Liste
Textfeld des Formulars: txt_EBELN
als Anmerkung hierzu das Textfeld fungiert gleichzeitig als Eingabe zur Suche
der code dazu:
Code: Alles auswählen
Private Sub txt_EBELN_Change()
     Dim strSuche As String

     strSuche = Me!txt_EBELN.Text
     Me!lst_ubw_sicht.RowSource = "SELECT [z_ID], [z_BEDAT], [z_EBELN], [z_EBELP], [z_BEMERK]" _
                          & " FROM tbl_DATA_BASE" _
                         & " WHERE z_EBELN LIKE '" & strSuche & "*'"
     Me!lst_ubw_sicht.Requery
 End Sub

Hier kann man dann auch in der Liste per doppelklick einen Datensatz in die Textfelder übertragen und wenn man da wieder die Felder leert wird das Listenfeld nicht mehr zurückgesetzt
Eigentlich will ich ja nach dem Felder leeren so ein Refresh haben als ob ich das Formular gerade erst neu starte und die Daten aktualisiert sind.
Vielleicht hat einer ja eine Idee :)
Vielen Dank für eine Rückantwort
Greez Thommy

Wenn einem das Wasser bis zum Halse steht, sollte man nicht auch noch den Kopf hängen lassen.
Benutzeravatar
thommybe71
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 70
Registriert: 13. Mai 2013, 14:14

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon Beaker s.a. » 12. Jan 2019, 15:34

Hallo Thommy,
1. Das Ereignis "Change" wird nicht ausgelöst, wenn der Wert des Feldes mit
VBA geändert wird.
2. Halte für ich in diesen Fall das Ereignis grundsätzlich für ungünstig; - es
wird ja bei jedem Tastendruck ausgelöst. Für mich besser AfterUpdate. Das
wird zwar auch nicht durch Änderung mit VBA ausgelöst, läuft aber nur einmal
ab.
3. Du änderst die "RowSource" der Liste und schreibst sie nicht wieder zurück,
wie soll sie also wieder das gleiche darstellen wie beim Öffnen?
Vorschlag:
Code: Alles auswählen
.
Next ctl
Me.Me!lst_ubw_sicht.RowSource = "NameDeinerAbfrage"  ' oder ursprünglicher SQL-String
.

4. Ein ".Requery" nach ".RowSource = …" ist unnötig, - die Zuweisung erledigt
das automatisch.

gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 439
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon thommybe-71 » 13. Jan 2019, 23:05

Ah ..Hallo Ekkehard,

danke für deine Rückmeldung, ich werde das morgen gleich mal probieren ..und melde mich dann zurück.

danke erstmal

gruss Thommy
thommybe-71
 

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon thommybe71 » 14. Jan 2019, 10:40

Hallo Ekkehard,

Code: Alles auswählen
.
Next ctl
Me.Me!lst_ubw_sicht.RowSource = "NameDeinerAbfrage"  ' oder ursprünglicher SQL-String
.


das Me.Me! vorn hat access es nicht akzeptiert nur mit Me! allein :roll:

Für das erste Listenfeld auf der Registerkarte 1 hat es funktioniert. Für das zweite auf der Registerkarte 2 wo im Grunde die gleichen Textfelder sind bekomme ich eine Fehlermeldung " Sie können dem Objekt keinen Wert zuweisen"

Gibt auch keine weitere Fehlermeldung :?:
Greez Thommy

Wenn einem das Wasser bis zum Halse steht, sollte man nicht auch noch den Kopf hängen lassen.
Benutzeravatar
thommybe71
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 70
Registriert: 13. Mai 2013, 14:14

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon thommybe71 » 14. Jan 2019, 12:21

Hallo noch mal ein Gedanke dazu

ich habe ja nun den code:
Code: Alles auswählen
Private Sub cmd_cls_Click()
On Error GoTo cmd_cls_Err
Dim ctl As Control
For Each ctl In Me.Controls
    If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
        ctl = Null
    End If   
Next ctl

Me!lst_ubw_sicht.RowSource = "qry_ubw_liste" 'aktualisieren Listenfeld

cmd_cls_Exit:
        Exit Sub
       
cmd_cls_Err:
    MsgBox Error$
    Resume cmd_cls_Exit

End Sub


nun denke ich das 2 Felder im Hintergrund . einmal txt_User und das cbf_Zustand (Kombinationsfeld) dort den Fehler aufrufen. Kann man diese 2 vom Leeren ausklammern?
Greez Thommy

Wenn einem das Wasser bis zum Halse steht, sollte man nicht auch noch den Kopf hängen lassen.
Benutzeravatar
thommybe71
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 70
Registriert: 13. Mai 2013, 14:14

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon Beaker s.a. » 14. Jan 2019, 13:57

Hallo Thommy,
Sorry, das mit dem doppelten Me wahr ein Tipp- oder C&P-Fehler.
Um Felder vom Leeren auszuschliessen würde ich die Eigenschaft "Marke"
(VBA = .Tag) heranziehen. Ist flexibler als "fest verdrahtete" Controlnamen.
Also, bei den Feldern, die ausgeschlossen werden sollen schreibst du in die
o.a. Eigenschaft einen Wert, sagen wir einfach 0.
Deinen Code erweiterst du dann wie folgt:
Code: Alles auswählen
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox And ctl.Tag <> "0" Then
        ctl = Null
    End If

gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 439
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon thommybe71 » 14. Jan 2019, 16:04

Hallo Ekkehard

Vielen Dank für deine Rückmeldung..

ich habe das mal genau so eingebaut..
Code: Alles auswählen
Private Sub cmd_cls_Click()
On Error GoTo cmd_cls_Err
Dim ctl As Control
For Each ctl In Me.Controls
    If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox And ctl.Tag <> "0" Then
        ctl = Null
    End If
   
Next ctl

Me!lst_ubw_sicht.RowSource = "qry_ubw_liste" 'aktualisieren Listenfeld

cmd_cls_Exit:
        Exit Sub
       
cmd_cls_Err:
    MsgBox Error$
    Resume cmd_cls_Exit

End Sub


das Resultat ist das gleiche : ich habe aber mittlerweile herausbekommen welches Feld dort den Fehler aufruft . Es ist das Feld txt_user welches die Funktion fncUserHolen beinhaltet

Code: Alles auswählen
'übergabe des Benutzernamens in txt_user - verstecktes Feld
Public Function fncUserHolen()
     fncUserHolen = Environ("UserName")
 End Function


Private Sub ctrl_ABGEF_Click()
On Error GoTo ctrl_ABGEF_Err

'übergabe Datum und Username bei betätigen des Abfertigungshaken
    If Me.txt_EDAT.Value = "" And ctrl_ABGEF.Value = True Then
        Me!txt_EDAT = Date
        Me!txt_BEARBZ = Me.fncUserHolen().Value
   
    End If
    'update mit sub funktion cmd Speichern
       Call cmd_speichern_Click
   
    Me.Form.Refresh
           
ctrl_ABGEF_Exit:
        Exit Sub     
ctrl_ABGEF_Err:
    MsgBox Error$
    Resume ctrl_ABGEF_Exit
       
End Sub


:idea: eben dieses Feld txt user hat das Steuerelement fncUserholen ... wenn man in die Funktion ctrl_ABGEF_Click() das Userholen reinbekäme könnte ich auf das Feld verzichten. nur wie :?:
Greez Thommy

Wenn einem das Wasser bis zum Halse steht, sollte man nicht auch noch den Kopf hängen lassen.
Benutzeravatar
thommybe71
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 70
Registriert: 13. Mai 2013, 14:14

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon Beaker s.a. » 14. Jan 2019, 16:53

Hallo Thommy,
Es ist das Feld txt_user welches die Funktion fncUserHolen beinhaltet

Heisst das, dass im Steuerelementeinhalt "=fncUserHolen()" drin steht?
Dann kannst du Feld nicht mit
Code: Alles auswählen
Feldname.Value = "" 'Oder NULL

beschreiben; - Fehler "Sie können diesem Feld keinen Wert zuweisen!"
Ist das Feld ungebunden oder es steht ein Feldname der DS-Herkunft drin
und du willst es im Code ausfüllen, geht das so
Code: Alles auswählen
Me!txt_BEARBZ = fncUserHolen

Wobei ich der Function auch einen expliciten, datentypgerechten Rückgabewert
spendieren würde
Code: Alles auswählen
Public Function fncUserHolen() As String
     fncUserHolen = Environ("UserName")
 End Function


gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 439
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon thommybe71 » 15. Jan 2019, 08:08

Guten Morgen Ekkehard,

Perfekt!!.. das war des Rätsels Lösung. Habe die Funktion entsprechend abgeändert und das Zwischenfeld konnte ich entfernen.
Nun übernimmt er den Namen so wie ich es möchte. Und die Fehlermeldung tritt auch nicht mehr auf beim Felder leeren. :D

Profi ist eben Profi. vielen Dank
Greez Thommy

Wenn einem das Wasser bis zum Halse steht, sollte man nicht auch noch den Kopf hängen lassen.
Benutzeravatar
thommybe71
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 70
Registriert: 13. Mai 2013, 14:14

Re: Refresh von Listenfeld nach leeren von Textfeldern

Beitragvon Beaker s.a. » 15. Jan 2019, 14:02

Profi? Nein, nur ein fortgeschrittener Anfänger.
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 439
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Beaker s.a. und 13 Gäste