2012-04-05 5 views
1

Ich habe ein Problem mit SubForms in Access, da ist etwas, das ich nicht verstehe. Ich habe eine Form (frm) mit einem Steuerelement (Combo) und das Formular enthält ein Unterformular (Subfrm). Im Debugmodus mache ich zwei Haltepunkte, einen bei Combo_AfterUpdate und einen anderen bei frm_AfterUpdate. wenn ich die Daten in der Combo alles ändern scheint in Ordnung:Form_AfterUpdate ist verloren während einer SubForm.Recordset Änderung

Stopp bei combo_AfterUpdate> (außer Form)> Haltestelle frm_AfterUpdate

jetzt ich Code zu meinem combo_AfterUpdate Eventhandler hinzufügen, die die subfrm.Form.Recordset ändert:

Halt in combo_AfterUpdate> (außer Form)> ...

keinen Halt am frm_AfterUpdate !? Wer weiß warum?

EDIT: hier der Code, der in combo_AfterUpdate ausführt:

If Not IsNull(Me!childID) Then 
    Dim childSubSource As QueryDef 
    Set childSubSource = CurrentDb.QueryDefs("qry_parent_Detail_child_WithParam") 
    childSubSource.Parameters("childID").Value = Me!childID 
    Set frmChildSub.Form.Recordset = _ 
     childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges) 
End If 

EDIT: interessant .. wenn ich

ändern
Set frmChildSub.Form.Recordset = _ 
    childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges) 

zu

frmChildSub.Form.Recordsource= childSubSource.SQL 

die Ereignisse arbeiten wie beabsichtigt. Ich habe die schmutzige Eigenschaft der Elternform überprüft und es scheint, dass das Problem hier liegt. Wenn ich dem Unterformular über .recordset ein neues Objekt zuweisen, werden die Änderungen im Elternformular entweder gespeichert oder verloren, trotzdem ist drecky wieder falsch, obwohl ich die Combobox geändert habe.

Grüße

+0

Könnten Sie einen Code posten, der "subfrm.Form.Recordset" ändert? Es kann sein, weil Ihr Update abgebrochen wird, das Ereignis des Formulars nicht ausgelöst wird –

+1

Ich vermute, ich verstehe nicht, warum Sie das Recordset eines Formulars nach einer der Werte der Steuerelemente tauschen würde. Ich vermute, du versuchst etwas ziemlich "Nicht-Standard" hier zu machen. Wird Ihre Änderung an der Combo in der Datenbank gespeichert oder handelt es sich um eine ungebundene Kontrolle? – HK1

+0

Igor: hier der Code. childID ist der Wert der Combobox. HK1: Es ist ein gebundenes Steuerelement und ich möchte das Re-Cord-Set austauschen, da ich unterschiedliche Daten in dem Unterformular abhängig von dem Wert in der Combobox benötige. Ich würde die "Link Master-/Childfields" -Feauture verwenden, aber meine Eltern-Recordset wird auch ausgetauscht:/ – Egi

Antwort

0

Eigentlich macht es Art von Sinn für mich ...

In der ersten Instanz:

Set frmChildSub.Form.Recordset = _ 
    childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges) 

Dies ist ein brandneues-Cord in die Form geladen, und der Natürlich wird es keine schmutzigen Aufzeichnungen geben, also sollte der schmutzige Zustand falsch sein.

Im zweiten Fall:

frmChildSub.Form.Recordsource= childSubSource.SQL 

Sie erzählen die Form, wo sie die Daten das nächste Mal zu bekommen, dass Sie die Form/Daten laden. Wenn ja folgend:

frmChildSub.Form.Recordsource= childSubSource.SQL 
frmChildSub.Form.Requery 

Dann würde ich das gleiche Verhalten wie die erste Instanz erwarten - einfach, weil Sie mal wieder MS Access zwingen in einem frischen Cord-Set zu bringen - was wiederum nicht schmutzig sein wird .

+0

Set frmChildSub.Form.Recordset = _ childSubSource.OpenRecordset (dbOpenDynaset, dbSeeChanges) ändert das Recordset der Childform, nicht die Form bin ich tatsächlich. Sind sie irgendwie verwandt, auch wenn sie Master/Kind Felder nicht verbunden haben? – Egi

Verwandte Themen