![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() 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 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. |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 08.04.2001
Beiträge: 3.101
|
![]() 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? |
![]() |
![]() |
![]() |
#3 | |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() Zitat:
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. ![]() |
|
![]() |
![]() |
![]() |
#4 |
Veteran
![]() Registriert seit: 10.01.2001
Beiträge: 478
|
![]() 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 ---------------------------------------------- |
![]() |
![]() |
![]() |
#5 | |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() Zitat:
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. ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#6 |
Veteran
![]() Registriert seit: 10.01.2001
Beiträge: 478
|
![]() 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. |
![]() |
![]() |
![]() |
#7 |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() 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. ![]() |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|