Vreemd verband tussen sql via "Maken > queryontwerp" en via VBA

Status
Niet open voor verdere reacties.

so10070

Gebruiker
Lid geworden
4 feb 2014
Berichten
419
Ik heb een vreemd probleem met een sql die ik maak via "maken > query ontwerp" en de sql via VBA. Via "maken > query" maak ik de volgende query
Code:
SELECT tblWaarden.*
FROM tblWaarden;
Deze tabel is een gerelateerde tabel in een relatie : tblPatientenlijst (PTN_ID) > tblBloedanalyse (BLA_ID) > tblWaarden. Hier kan ik zonder problemen records toevoegen!

Als ik deze situatie via VBA uitschrijf krijg ik het volgende probleem: "U kunt geen record toevoegen of wijzigen omdat de tabel tblBloedAnalyse een gerelateerde record vereist is" - 2147217887

Code:
Private Sub butBloedkenmerken_Click()
    Dim cnn As ADODB.Connection
    Dim sqlKenmerk As String
    Dim sqlWaarden As String
    Dim sqlBloedAnalyse As String 'Om via een UPDATE query de waarden BLA_ID voor alle velden aan te passen
    Dim rst1 As New ADODB.Recordset 'tblKenmerk
    Dim rst2 As New ADODB.Recordset 'tblWaarden

    With Me
        If (IsNull(.datBLA_Datum) Or .datBLA_Datum = "") Or (IsNull(.lstBLA_Aanvrager) Or .lstBLA_Aanvrager = "") Then
            Exit Sub
        End If
    End With
    
    sqlKenmerk = "SELECT tblKenmerk.K_iD " & _
        "FROM tblKenmerk;"

    sqlWaarden = "SELECT tblWaarden.* " & _
        "FROM tblWaarden;" [B][COLOR="#FF0000"]'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> dit is de bewuste query[/COLOR][/B]

    sqlBloedAnalyse = "UPDATE tblWaarden SET tblWaarden.BLA_ID = " & Me.iBLA_ID & ";"
    
    Set cnn = CurrentProject.Connection
    rst1.Open sqlKenmerk, cnn, adOpenKeyset, adLockPessimistic
    rst2.Open sqlWaarden, cnn, adOpenKeyset, adLockPessimistic
    
    If Not rst1.BOF And Not rst1.EOF Then
        rst1.MoveLast
        rst1.MoveFirst
    End If
    If Not rst2.BOF And Not rst2.EOF Then
        rst2.MoveLast
        rst2.MoveFirst
    End If
    
    With rst1
        If Not .BOF And Not .EOF Then
            While Not .EOF
                rst2.AddNew
                rst2!K_ID = !K_ID
                rst2!BLA_ID = Me.iBLA_ID
                rst2.Update[B][COLOR="#FF0000"] '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>< dit geeft de fout[/COLOR][/B]
                .MoveNext
            Wend
        End If
    End With

    rst1.Close
    rst2.Clone
    cnn.Close
    Set cnn = Nothing

    DoCmd.RunSQL sqlBloedAnalyse
    
    DoCmd.Close acForm, "frmBloedanalyse"
    DoCmd.OpenForm "frmKenmerkWaarden", , , , , acDialog
End Sub

Graag hulp! :confused:
 
Hierbij het voorbeeld.

Nog even vergeten te vermelden: het voorbeeld moet je opstarten via "frmPatienten"
 

Bijlagen

  • VreemdProbleem.zip
    122,5 KB · Weergaven: 17
Heb het probleem gevonden! Volgende commando moest bovenaan staan. Het formulier moet afgesloten zijn aangezien in dat formulier de betrokken tabel nog open staat! Heeft me drie dagen gekost! :mad:
Code:
    DoCmd.Close acForm, "frmBloedanalyse"

Om het te reproduceren
  1. Open "frmPatienten"
  2. Dubbelklik op een patientennaam
  3. In "frmBloedAnalyse" klik op "Bloedanalyse toevoegen"
  4. Vul datum en aanvrager in
  5. Klik op "Bloedkenmerken"
  6. En dan heb je de fout!
 
Ik denk dat je je procedure nog maar eens tegen het licht moet houden, want het is echt veuls te ingewikkeld. Kan een héél stuk simpeler!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan