2 Stimmen

Fehler bei der Datentypübereinstimmung mit OpenRecordSet

Access 2007 verwenden. Ich versuche, eine VBA-Funktion zu schreiben, die eine Abfrage aus dem Tabellennamen, den Feldern und den Werten erstellt, die ich als Parameter übergebe. Ich erhalte ständig einen "Laufzeitfehler '3464': Datentyp-Fehlanpassung im Kriterienausdruck".

Hier ist der Code:

Function getPrimaryFromForeign(db As Database, table As String, field As String, _
                            value As Long, _
                            field2 As String, value2 As Long) As Long

Dim sStr As String
Dim istr As String
Dim rs As Recordset

sStr = "select * from " & table & " where " _
        & field & "='" & value & "' and " & field2 & "='" & value2 & "'"
    istr = "insert into " & table & "(" & _
    field & "," & field2 & ") values ('" & value & "','" & value2 & "')"

Set rs = db.OpenRecordset(sStr)

If rs.RecordCount < 1 Then
    db.Execute (istr), dbFailOnError
    Set rs = db.OpenRecordset(sStr)
End If
getPrimaryFromForeign = rs("id")

End Function

Der Fehler tritt in der Zeile auf: Set rs = db.OpenRecordset(sStr)

Ich denke, es hat etwas mit den Variablentypen von Value und Value2 zu tun. Aber ich habe sie mit typename() überprüft, und sie sind beide Long, wenn OpenRecordSet() aufgerufen wird. Die Abfrage bezieht sich auf eine Tabelle, in der diese beiden Felder vom Typ Zahl sind. Warum gibt es also eine Typinkongruenz?

3voto

DaveP Punkte 210

Dies kann vorkommen, wenn Sie sowohl DAO als auch ADO in Ihrer Referenzbibliothek haben.
In diesem Fall kommt es auf die Reihenfolge der Deklarationen sowohl in den Dim-Anweisungen als auch im Referenzfenster an.

1) "Sie müssen sowohl DAO- als auch ADO-Recordset-Objekte referenzieren und verwenden und die Objekte explizit wie folgt dimensionieren:

Dim adoRS As ADODB.Recordset
Dim daoRS As DAO.Recordset"

2) "Stellen Sie sicher, dass der Verweis auf die DAO-Objektbibliothek im Dialogfeld Verweise eine höhere Priorität hat, oder löschen Sie den Verweis auf Microsoft ActiveX Data Objects."

siehe hier: https://support.microsoft.com/en-us/help/181542/you-receive-a-type-mismatch-error-when-you-run-the-openrecordset-metho

1voto

rsbarro Punkte 26319

Ich habe Access schon lange nicht mehr benutzt, aber ich denken dass das Problem darin besteht, dass Sie die Value y Value2 in einfachen Anführungszeichen in Ihrer SQL-Anweisung zu verwenden und die Felder in der WHERE-Klausel nicht in Klammern einzuschließen.

Versuchen Sie es so:

sStr = "select * from " & table & " where [" _
            & field & "] = " & value & " and [" & field2 & "] = " & value2
istr = "insert into " & table & "([" & _
            field & "], [" & field2 & "]) values (" & value & "," & value2 & ")"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X