Full Version: Subform Doesn't Show The New Content Of The Recordsource
UtterAccess Forums > Microsoft® Access > Access Forms
Odrap
During the load event of a mainform , the content of the recordsource of the subform is changed using a Docmd.Runsql. See code below.
This works fine. The subform shows the wright data, except for the fact that the field "OrderId" remains empty.
I have to close the form and reopen it to see the complete data. I tried Refresh and Requery in the Load and On Current event of the subform, but without sucess.
What has to be done to sole this problem?
Private Sub Form_Load()
Dim TotBetaald As Double
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Qd As DAO.QueryDef
Dim strSQL As String
Dim strSQL2 As String
Dim Aantal As Integer
Dim Teller As Integer
Dim Hoeveelheid As Integer
Dim Verschil As Double
On Error GoTo ErrorHandler

acbRestoreSize Me

Set db = CurrentDb

strSQL = "PARAMETERS Factuurnr Text;Select B.Factuurnr,B.OrderId,B.Betaaldatum,B.Betaald ,B.Betaalwijze,B.Opgehaald" & _
" FROM tblOrders INNER JOIN tblBetalingOrders As B ON tblOrders.OrderID = B.OrderId ;"

strSQL2 = "Insert into tblOntvangstfacturen (Factuurnr,OrderId,Betaaldatum,Betaald,Betaalwijze)" & _
" Select Factuurnr,OrderId,Betaaldatum,Betaald,Betaalwijze From qryBetalingOrders;"


Me!txtBedrijfsnaam = Nz(DLookup("[Bedrijfsnaam]", "tblKlanten", "[KlntId] =" & Forms!frmRegBetUitgFacturen!KlntID))
Me!txtEmail = Nz(DLookup("[Email]", "tblKlanten", "[KlntId] =" & Forms!frmRegBetUitgFacturen!KlntID))

On Error Resume Next
db.QueryDefs.Delete ("QryBetalingOrders")
On Error GoTo ErrorHandler
Set Qd = db.CreateQueryDef("QryBetalingOrders", strSQL)
Qd.Parameters("Factuurnr") = Me!Factuurnr

Set rs = Qd.OpenRecordset()
On Error Resume Next
rs.MoveLast
On Error GoTo ErrorHandler
Aantal = rs.RecordCount
If Aantal >= 1 Then
rs.MoveFirst
Teller = 1
Hoeveelheid = 0

'Tel het aantal records in rs waarvan het veld opgehaald = true
'Vul in het veld factuurnr van die records het actueel factuurnr

Do While Teller <= Aantal

If rs!opgehaald = False Then
Hoeveelheid = Hoeveelheid + 1
rs.Edit
rs!Factuurnr = Me!Factuurnr
rs!opgehaald = True
TotBetaald = Nz(TotBetaald, 0) + rs!Betaald
rs.Update
End If
rs.MoveNext
DoEvents
Teller = Teller + 1
Loop
End If

'Indien via vorige, lus records zijn gevonden met het veld opgehaald = False
'Voer dan voor deze records onderstaande invoeg operatie uit
'Deze methode vanw werken verhindert het meer dan eens toevoegen van dezelfde records

If Hoeveelheid > 0 Then
DoCmd.RunSQL strSQL2
End If


Me!Vereffeningsbedrag = Nz(Me!Vereffeningsbedrag, 0) + TotBetaald

If Me!Vereffeningsbedrag > Nz(Me!factuurbedrag, 0) Then
Verschil = Me!Vereffeningsbedrag - Me!factuurbedrag
Me!Vereffeningsbedrag = factuurbedrag
Me!TeveelBetaald = Nz(Me!TeveelBetaald, 0) + Verschil
Me!Saldo = 0
ElseIf Me!Vereffeningsbedrag <= Nz(Me!factuurbedrag, 0) Then
Verschil = Me!factuurbedrag - Me!Vereffeningsbedrag
Me!Saldo = Verschil
End If

If Nz(Me!Vereffeningsbedrag, 0) = 0 Then
Me!Omschrijving = "Onbetaald"
ElseIf Me!Vereffeningsbedrag < Nz(Me!factuurbedrag, 0) Then
Me!Omschrijving = "Voorschot"
ElseIf Me!Vereffeningsbedrag = Nz(Me!factuurbedrag, 0) Then
Me!Omschrijving = "Voldaan"
ElseIf Me!Vereffeningsbedrag > Nz(Me!factuurbedrag, 0) Then
Me!Omschrijving = "Voldaan met overschot"
End If

Afsluiten:
On Error GoTo 0
Exit Sub
ErrorHandler:
Mededeling = foutbericht("Form_load", "frmRegBetUitgFacturen", Err.Number)
Resume Afsluiten

End Sub
Jeff B.
In a typical main form/subform design in Access, it isn't necessary to tell the subform which records to display. By using the parent/child (?) properties of the subform control on the main form, you can let Access pick the related subform records.
If course, this relies on there being a reasonably well-normalized data structure, with a one-to-many relationship being displayed.
This is a "lo-fi" version of UA. To view the full version with more information, formatting and images, please click here.