WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   VB Problem - Endlosschleife.... (Bug in Access?) (http://www.wcm.at/forum/showthread.php?t=102166)

renew 09.07.2003 15:03

VB Problem - Endlosschleife.... (Bug in Access?)
 
Folgendes Problem, auf das ich gerade drauf gekommen bin:
Ich hab ein Kombinationsfeld, wo ich auch Eingaben zulasse.
Wenn jetzt jemand etwas eingibt, überprüfe ich bei jedem Buchstaben, ob das, was im Feld drin steht, not "" bzw. not null ist um ein anderes Feld zu Aktivieren.

Das ist die Funktion dazu:
Code:

Private Sub cboLieferant_Change() 'wenn sich etwas in dem Feld ändert - nachsehen ob Kontakt gesperrt werden soll/oder aktiviert wird
   
    Me.Requery 'Alle Felder aktualisieren - damit man die eingegebenen Buchstaben aus dem Feld
    'lesen kann - sonst wäre dort nur ""
    If Len(cboLieferant) > 0 Then
        cboLieferant.SelStart = Len(cboLieferant) 'wenn etwas im feld steht -
        'die Cursor Position wieder an das Ende setzen, da man sonst bei der Eingabe das Wort umdreht
    End If
    If Trim(cboLieferant) <> "" And IsNull(cboLieferant) = False Then
        cboKontakt.Enabled = True
        Else
          cboKontakt.Enabled = False
    End If
   
End Sub

kurze Erklärung: me.requery, damit ich das was im Feld steht lesen kann
Dann setze ich mit cboLieferant.SelStart = ... den Cursor wieder an das Ende - sonst steht das eingegeben genau verkehrt, da bei requery der Cursor am Anfang stehen würde.

Wenn man jetzt Text eingibt, und dann ein bzw. mehrer Lehrzeichen tippt, verschwindet Access in einer Endlosschleife (da läuft kein Programmcode mehr von mir - hab ich mit Einzelschritten geprüft)

Es reicht eigentlich die Zeile me.requery um Access mit ein paar Leerzeichen abschmieren zu lassen.

Hat irgendwer eine Idee woran das liegt - bzw. wie ich das ganze umgehen könnte.
Weil da bin ich etwas überfragt.

flinx 09.07.2003 16:31

Könnte es sein, daß:
So wie ich das jetzt verstanden habe, aktualisiert Me.Requery alle
Felder was wiederum cboLieferant_Change() aufruft, welches wieder
Me.Requery ... also der Me.Requery einen Change-Event auslöst, welcher cboLieferant_Change() aufruft?

renew 09.07.2003 16:41

Zitat:

Original geschrieben von flinx
Könnte es sein, daß:
So wie ich das jetzt verstanden habe, aktualisiert Me.Requery alle
Felder was wiederum cboLieferant_Change() aufruft, welches wieder
Me.Requery ...

leider nein...

Weil in cboLieferant_change() hab ich einen Haltepunkt.

Von dort aus bin ich dann mittels Einzelschritten die Codezeilen durch gegangen.
Er springt in keine von mir programmierte Funktion mehr rein. Sobald ich meinen Programmcode "verlasse" (bei End Sub) startet die Endlosschleife.

Und das auch nur, wenn ich Leerzeichen eingebe.
Sonst ists mir noch nicht aufgefallen. Also ich kann normal reinschreiben - per Maus etwas markieren und löschen etc....

Darum riecht das sehr stark nach Access Bug.

Ich könnte natürlich erst beim Verlassen des Steuerelements überprüfen ob noch etwas drin steht oder nicht.
Nur is das net so schön, da als nächstes "logisches" Feld für den User eigentlich cboKontakt kommen müsste.

PS: ist bei Access XP und 2000 das gleiche. Das habe ich schon probiert. :)

Seidl 09.07.2003 19:36

Bug oder nicht Bug,
das ist hier nicht die Frage ;)

Ich würde es mal mit folgendem Code probieren:

----------------------------------------------
Private Sub cboLieferant_Change()
If Me.cboLieferant.Text <> "" Then
cboKontakt.Enabled = True
Else
cboKontakt.Enabled = False
End If
End Sub
----------------------------------------------

renew 09.07.2003 19:41

Zitat:

Original geschrieben von Seidl
Bug oder nicht Bug,
das ist hier nicht die Frage ;)

Ich würde es mal mit folgendem Code probieren:

----------------------------------------------
Private Sub cboLieferant_Change()
If Me.cboLieferant.Text <> "" Then
cboKontakt.Enabled = True
Else
cboKontakt.Enabled = False
End If
End Sub
----------------------------------------------

mit Me.Objektname kann ich den Text direkt lesen - ohne ein Requery. Des wär a hit (vor allem wenn sich dann Access nicht in einer Schleife verläuft)
Weil da bin ich eh kurz angestanden, weil nix in dem Feld drin gestanden is (vor dem Refresh)

Werds morgen ausprobieren.

War heut eh a bissl peinliche Gschicht: der "Ansprechpartner" in der Firma, für den ich das bastel war grad da, weil ich noch ein paar Sachen klären wollte.
Und grad da isses zum ersten Mal passiert (und ich hab natürlich zuerst an einen Programmierfehler von mir gedacht)

edit: bin grad drauf gekommen, dass ich eh eine Kopie der DB mit hab.
So wies ausschaut, funkts. Werde es morgen noch einmal ausführlicher probieren.
Was würd ich nur ohne den Seidl machen. :confused: ;) :D

Seidl 10.07.2003 08:32

Am Me.Objektname liegt's in dem Fall nicht. Me.Objektname sagt eigentlich nichts anderes aus als Objektname, nur gibt das Me eben explizit das Parent-Objekt an.
Das Problem ist entstanden, weil die Combobox Value als Default-Property definiert hat. Wenn man also auf eine Combobox zugreift ohne eine Property anzugeben, so bekommt man das selbe wie mit me.cboMeinFeld.Value. Value ändert sich für die Combobox aber nicht sofort mit der Eingabe. Direkt verändert sich nur der Text me.cboMeinFeld.Text.
Der Nachteil an .Text ist nur, das man es nur auf Felder anwenden kann, die den Focus besitzen. In diesem Fall ist das aber kein Problem.

renew 10.07.2003 09:59

nochmals Danke.

Habs jetzt etwas ausführlicher "getestet" (eigentlich gibts ja fast gar nix zum testen, is ja eh alles total logisch)
Funkt natürlich.

Und die Erklärung ist auch logisch.

Das mitn Focus stimmt - drum hab ich mir irgendwie abgewöhnt .Text zu nehmen. Es ist zwar kein Problem immer ein .SetFocus davor zu geben, wenn man es auslesen möchte, aber irgendwo doch "lähmend" beim Programmieren, weil ma da (ich zumindest) immer wieder drauf vergisst.

Außerdem hab ich mir nicht gedacht, dass .Text einen Unterschied macht. :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag