WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 09.07.2003, 15:03   #1
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard 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.
renew ist offline   Mit Zitat antworten
Alt 09.07.2003, 16:31   #2
flinx
Inventar
 
Registriert seit: 08.04.2001
Beiträge: 3.101


Standard

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?
flinx ist offline   Mit Zitat antworten
Alt 09.07.2003, 16:41   #3
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

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.
renew ist offline   Mit Zitat antworten
Alt 09.07.2003, 19:36   #4
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

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
----------------------------------------------
Seidl ist offline   Mit Zitat antworten
Alt 09.07.2003, 19:41   #5
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

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.
renew ist offline   Mit Zitat antworten
Alt 10.07.2003, 08:32   #6
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

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.
Seidl ist offline   Mit Zitat antworten
Alt 10.07.2003, 09:59   #7
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

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.
renew ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


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


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