Klasse.Requery

Liebe ExpertInnen,

heute steh ich auf dem Schlauch: Ein Kombinationsfeld Klasse wird mit einer Rowsource versorgt, anschließend erfolgt ein Klasse.Requery, und im Kombinationsfeld sehe ich - nichts. Die Rowsource findet die richtige Ergebnismenge, der Requery modifiziert aber den Feldinhalt nicht. Was zum Geier läuft da schief? Exakt die gleiche Strecke fahre ich im Formular nebenan, dort tut es.

Wenn ich in das Kombinationsfeld klicke, sehe ich die Ergebnismenge, der gewählte Wert bleibt stehen.

Für die Code-Freaks:

Private Sub Form\_Load()
 Me!Wettbewerb = Me!Wettbewerb.Column(0, 0)
 Call neuerWettbewerb
End Sub

Private Sub neuerWettbewerb()

 Me!Klasse.RowSource = "select B\_Wettbewerbsklasse.Klasse, Bezeichnung " & \_
 "from B\_Wettbewerbsklasse, B\_Klasse " & \_
 "where Wettbewerb = " & Me!Wettbewerb & " " & \_
 "and B\_Wettbewerbsklasse.Klasse = B\_Klasse.klasse " & \_
 "order by Anzeigefolge "
 Me!Klasse.Requery
End Sub

Private Sub Wettbewerb\_Change()

 Call neuerWettbewerb
End Sub

Hallo,
versuche erst mal zu validieren was wirklich SQL-String steht und ob du damit die richtige Datenmenge bekommst.

debug.print Me.Klasse.RowSource

vor dem requery und das Ergebnis im Query Editor mal abschicken.

Gruß
Joey

Hi joey,

ob du damit die richtige Datenmenge bekommst.

dann zitiere ich mich mal selbst:

Die Rowsource findet die richtige Ergebnismenge

das Ergebnis im Query Editor mal abschicken.

so teste ich meine Abfragen - vorher.

Vielleicht sieht die Query ein wenig fremd aus, ich hab’s nicht so mit der Join-Syntax, sie klappt aber :smile: Da wird einfach zu einem Wert aus einer 1:n-Beziehung ein Klartext aus der referierten Tabelle beigestellt.

Gruß Ralf

Hi Ralf,
du kannst deine Abfragen nicht vorher testen, da du sie erst zur Laufzeit zusammenbastelst. Denn nichts anders machst du hier:

"where Wettbewerb = " & Me!Wettbewerb & " " & _

Daher meine Frage den fertig zusammengesetzte Query noch mal zu begutachten.

Ansonsten sieht der Code gut aus, wenn auch etwas altmodisch. (call, „!“ statt „.“)

Weiters kann man erst sagen, wenn man mehr vom Projekt weiß. Timer zb. hauen gerne was durcheinander, aber auch Events die du nicht gepostet hast.

Gruß
Joey

Hallo Ralf

heute steh ich auf dem Schlauch: Ein Kombinationsfeld Klasse
wird mit einer Rowsource versorgt, anschließend erfolgt ein
Klasse.Requery, und im Kombinationsfeld sehe ich - nichts.

Was solltest Du dort auch sehen wollen/können?

Rowsource findet die richtige Ergebnismenge, der Requery
modifiziert aber den Feldinhalt nicht.

Ein Kombinationsfeld besteht - wie der Name ja sagt - eigentlich aus 2 Feldern: einem Textfeld und einem Listenfeld. Rowsource und Requery wirken sich nur auf das Listenfeld aus, im Textfeld geschieht nichts.

Was zum Geier läuft da schief? Exakt die gleiche Strecke
fahre ich im Formular nebenan, dort tut es.

Wirklich „exakt die gleiche“? Würde mich wundern.

Wenn ich in das Kombinationsfeld klicke, sehe ich die
Ergebnismenge, der gewählte Wert bleibt stehen.

Das ist das ganz normale Verhalten.

Für die Code-Freaks:

Frei zitiert nach Stanley Goodspeed (Nicolas Cage in „The Rock“): „Code-Super-Freak“ bitte :wink:

HTH
Peter

Hi Joey,

du kannst deine Abfragen nicht vorher
testen

ich lern Dich watt: Den String, den ich im Sub zusammenbastle, werfe ich dem Abfrage-Editor zum Fraß vor, schmeiß die Gänsefüße raus und ersetze die Variable durch einen Direktoperanden.

Der Witz ist ja gerade, dass die richtigen Werte erscheinen, aber halt erst, wenn ich in das Control klicke - nicht beim Load und nicht beim Change.

Events die du nicht gepostet hast.

Sonst ist da nix, nur das Formular mit den beiden Controls.

Gruß Ralf

Hi Peter,

Ein Kombinationsfeld besteht - wie der Name ja sagt -
eigentlich aus 2 Feldern: einem Textfeld und einem Listenfeld.

??? Das Textfeld dient der Beschriftung.

Rowsource und Requery wirken sich nur auf das Listenfeld aus,
im Textfeld geschieht nichts.

Wozu sollte das auch gut sein?

Was zum Geier läuft da schief? Exakt die gleiche Strecke
fahre ich im Formular nebenan, dort tut es.

Wirklich „exakt die gleiche“? Würde mich wundern.

Mit anderen Daten, natürlich.

Wenn ich in das Kombinationsfeld klicke, sehe ich die
Ergebnismenge, der gewählte Wert bleibt stehen.

Das ist das ganz normale Verhalten.

Pardon, da fehlt das einleitende Wörtchen „Erst…“. Ich würde den ersten Wert aus der Trefferliste gerne gleich beim Load resp. beim Change sehen.

Gruß Ralf

Hi Ralf,

ich lern Dich watt: Den String, den ich im Sub zusammenbastle,
werfe ich dem Abfrage-Editor zum Fraß vor, schmeiß die
Gänsefüße raus und ersetze die Variable durch einen
Direktoperanden.

Ach das habe ich früher auch mal so gemacht. Irgendwann fällt man dabei mit auf die Schnauze weil das ändert leider nichts daran, dass du immer noch nicht den Zustand zur Laufzeit hast. Der Direktoperand kann noch während nach deinem Test durch Events, Timer oder sonst was geändert werden.

Im Debug bist du schon durchgegangen?

Zu deinem Problem.

  1. Ist „Klasse“ Listbox an ein DB feld gebunden?
  2. besitzt es einen Standardwert?

Wenn 1) ja, ist die gebundene Spalte richtig?
Wenn 2) ja, ist der Standardwert ein Teil des Abfrageergebnis?
Wenn 2) nein, schon mal versucht einen Standard Wert zu setzen?

Welche Eigenschaften des Controls sind zum Default geändert worden?

An irgendwas wird es ja liegen.
BTW: welche Access Version ist das denn?

Gruss
Joey

Hallo Ralf

Ein Kombinationsfeld besteht - wie der Name ja sagt -
eigentlich aus 2 Feldern: einem Textfeld und einem Listenfeld.

??? Das Textfeld dient der Beschriftung.

Nein, Du meinst wohl das „Bezeichnungsfeld“. Ich meine das Textfeld (das Feld, in dem Du einen Wert eingibst, oder in dem der aus dem Listenfeld ausgewählte Wert erscheint).

Rowsource und Requery wirken sich nur auf das Listenfeld aus,
im Textfeld geschieht nichts.

Wozu sollte das auch gut sein?

Ich habe Deine Frage so verstanden… aber bezogen auf das Textfeld.

Was zum Geier läuft da schief? Exakt die gleiche Strecke
fahre ich im Formular nebenan, dort tut es.

Wirklich „exakt die gleiche“? Würde mich wundern.

Mit anderen Daten, natürlich.

Ja nee, is klar :smile: Aber keine anderen Eigenschaften oder doch vielleicht noch eine Zeile mehr Code in der entsprechenden Routine? Würde mich wirklich wundern.

Wenn ich in das Kombinationsfeld klicke, sehe ich die
Ergebnismenge, der gewählte Wert bleibt stehen.

Das ist das ganz normale Verhalten.

Pardon, da fehlt das einleitende Wörtchen „Erst…“. Ich würde
den ersten Wert aus der Trefferliste gerne gleich beim Load
resp. beim Change sehen.

Dies hast Du bis jetzt nirgendwo geschrieben, was Du eigentlich erwartest. Ich habe aber ähnliches vermutet.

Also nochmals: Du kannst die Rowsource so oft ändern wie Du willst und Requery machen, bis die CPU abraucht - im Textfeld (Teil des Kombinationsfeldes) tut sich NICHTS, das musst Du explizit programmieren. Z.B. den ersten Wert des Listenfeldes (so es denn mindestens einen Eintrag enthält!) dem Kombinationsfeld zuweisen.

Beispiel, Annahmen:

  1. Kombinationsfeld hat Eigenschaft „Spaltenüberschriften“ auf „ja“

  2. Gebundene Spalte ist 1 (Klasse)

  3. Angezeigt werden soll Spalte 2 (Bezeichnung)
    dann sähe das so aus:

    Me!Klasse.Requery
    Me!Klasse.SetFocus ’ Feld muss den Fokus haben! Kann je nach Situation auch entfallen.

    If Me!Klasse.ListCount > 0 Then
    Me!Klasse.Value = Me!Klasse.ItemData(1)
    Me!Klasse.Text = Me!Klasse.Column(1, 1)
    Else
    Me!Klasse.Value = Null
    Me!Klasse.Text = Null
    End If

Das selbe für:

  1. Kombinationsfeld hat Eigenschaft „Spaltenüberschriften“ auf „nein“

  2. Gebundene Spalte ist 1 (Klasse)

  3. Angezeigt werden soll Spalte 1 (Klasse)
    dann sähe das so aus:

    Me!Klasse.Requery
    Me!Klasse.SetFocus ’ Feld muss den Fokus haben! Kann je nach Situation auch entfallen.

    If Me!Klasse.ListCount > 0 Then
    Me!Klasse.Value = Me!Klasse.ItemData(0)
    Me!Klasse.Text = Me!Klasse.Column(0, 0)
    Else
    Me!Klasse.Value = Null
    Me!Klasse.Text = Null
    End If

Gruss
Peter

Hi,
nachdem ich das noch mal durchgelesen habe.

Me!Klasse.Requery
Me!Klasse= Me!Klasse.ItemData(0)

könnte das helfen?

Gruss
Joey

PS: wenn nicht, dann habe ich das Problem nicht verstanden.

Moin, Joey,

Me!Klasse.Requery
Me!Klasse= Me!Klasse.ItemData(0)

das war’s! Jetzt muss ich nur noch rauskriegen, wo dieses ItemData(0) in der Applikation versteckt ist, aus dem ich die Strecke kopiert habe :wink:

Gruß Ralf

Moin, Peter,

If Me!Klasse.ListCount > 0 Then
Me!Klasse.Value = Me!Klasse.ItemData(0)
Me!Klasse.Text = Me!Klasse.Column(0, 0)
Else
Me!Klasse.Value = Null
Me!Klasse.Text = Null
End If

so wenig habe ich, ehrlich gesagt, noch nie kapiert. Derartige Anweisungen habe ich im Leben noch nicht benutzt, und trotzdem lief es.

Ich suche gerade noch nach der .Itemdata(0), die Joey erwähnt hat, vermutlich versteckt sie sich in der Definition der Combobox.

Dank & Gruß
Ralf