2016-12-16 13 views
0

Ich benutze Access 2007. Ich habe ein Formular (Details eines Kindes), das ein Listenfeld enthält, das die speziellen Bedürfnisse des Kindes auflistet. Die Listbox befindet sich in einer Viele-zu-Viele-Beziehung mit der Tabelle der Kinder und der Tabelle mit der kontrollierten Liste der speziellen Bedürfnisse. Die RowSource der listboxLösche Listenfeld beim Hinzufügen eines neuen Datensatzes

ist
SELECT Child.ID, Need.Category 
FROM Need INNER JOIN 
    (Child INNER JOIN [Child-Need] ON Child.ID = [Child-Need].[Child FK]) 
    ON Need.ID = [Child-Need].[Need FK] 
ORDER BY [Category]; 

Wenn ich versuche, einen neuen Datensatz hinzuzufügen, geht der listbox Inhalt nicht klar, weiterhin relevant für die bestehende Datensatz auf die Werte gesperrt werden.

Wie lösche ich den Inhalt der Listbox, damit der Benutzer die für das neue Kind relevanten Bedürfnisse hinzufügen kann?

Anschließend habe ich festgestellt, dass beim Verschieben von Datensatz zu Datensatz auf dem Formular der Inhalt der Listbox diejenigen des ersten Datensatzes bleibt, der angezeigt wird. Es sieht so aus, als hätte ich einen schwerwiegenden Fehler, vermutlich in meinem SQL!

+1

'listboxName.requery' ?? – GavinP

+0

Ach, nein. Versuchte das! –

+0

Ist das eine gebundene Form? – GavinP

Antwort

0

Versuchen Sie sich mit dem folgenden Code in Form Last: haben

Dim intItemsInList As Integer 
Dim intCounter As Integer 

intItemsInList = Me![lstTest].ListCount 

For intCounter = 0 To intItemsInList - 1 
    Me![lstTest].RemoveItem 0 
Next 
+0

Leider funktioniert das nicht. Ich bekomme einen Fehler bei RemoveItem, weil die Datensätze gesperrt sind. –

1

Die rowsource keinen Hinweis auf das aktuelle Kind, das in der Form angezeigt wird.

denke ich, Sie so etwas wie

SELECT Child.ID, Need.Category 
FROM Need INNER JOIN 
    (Child INNER JOIN [Child-Need] ON Child.ID=[Child-Need].[Need FK]) 
    ON Need.ID=[Child-Need].[Need ID] 
WHERE Child.ID = Forms!frmChild!ID 
ORDER BY [Category]; 

(ersetzen frmChild durch Formularname) benötigen würde.

Und dann brauchen Sie eine myListbox.Requery in der OnCurrent Ereignis des Formulars, so dass es die aktuellen Daten beim Verschieben in einen anderen Datensatz zeigt.

Edit: wenn es eine Unterform, es ist so etwas wie

WHERE Child.ID = Forms!frmFamily!frmChild.Form!ID 

siehe Refer to Form and Subform properties and controls

+0

Das fühlt sich richtig an, außer dass ich keine Formulierung für den zweiten Teil der WHERE-Klausel finde, den Access akzeptieren wird. Es fragt mich nach der ID als Parameter beim Öffnen des Formulars und bei jeder Änderung des Kind-Datensatzes. Wenn ich es anbiete, erscheinen die richtigen Daten. Du bist ganz nah dran: meins wäre 'Child.ID = Forms! FrmFamilies! FrmChild.Form! ID'. –

+0

Wenn ich das Listenfeld RowSource als Teil des Codes im OnCurrent-Ereignis des Child-Formulars hinzugefügt habe, fragt Access beim Öffnen des Formulars keine Parameter ab. Und es funktioniert jetzt. Vielen Dank! –

Verwandte Themen