2017-10-02 4 views
0

Ich habe ein Problem mit VBA Access, weil ich die Syntax nicht kenne. Ich habe Funktion, die Felder aus einer Tabelle „IC4_MMI_405“ lesen muss korrekt auf ACCESS aus einer Excel-Datei importiert:Laufzeitfehler -2147217904 (80040e10) kein Wert für einen oder mehrere Parameter

Dim conn As New ADODB.Connection 
Dim record As New ADODB.Recordset 

Set conn = CurrentProject.Connection 
Set record = New ADODB.Recordset 

record.Open "SELECT * WHERE file = '" & sFile & "' And ccu_code = " & iCode, conn, adOpenKeyset, adLockOptimistic 

mit diesem Code funktioniert alles einwandfrei. Wenn ich den Code auf diese Weise zu ändern:

Dim conn As New ADODB.Connection 
Dim record As New ADODB.Recordset 
Dim sSQL As String 

Set conn = CurrentProject.Connection 
Set record = New ADODB.Recordset 
sSQL = "SELECT * FROM IC4_MMI_410 WHERE file = " 
sSQL = sSQL & "" & sFile & "" 
sSQL = sSQL & " And ccu_code = " & iCode 

record.Open sSQL, conn, adOpenKeyset, adLockOptimistic 

Ich werde die Laufzeitfehler. sFile ist als String und iCode ist ein Integer. Wenn ich im Debug-Modus laufe, kann ich sehen, dass die Werte von sFile und iCode die erwarteten sind. Ich denke, das Problem liegt in der Art wie ich sSQL geschrieben habe. Kannst du mir bitte helfen?

+1

In Ihrem ursprünglichen Code, 'sFile' ist' zwischen einfachen Anführungszeichen ' ', aber nicht in Ihrem späteren Code. Vielleicht probier 'sSQL = sSQL & "'" & sFile & "'" '. –

+0

Danke! Sie haben das Problem gelöst :) – Francesco

+0

Mit '" "' (maskiert) double, double quote ist keine schlechte Idee, sondern muss den richtigen Weg ('Debug.Print' das Ergebnis) gemacht werden. Es ist einfacher, Chr (34) als Ersatz zu verwenden. Dies ermöglicht String-Kriterien mit einfachen Anführungszeichen inklusive. Wenn Sie single qutoes als String-Literal verwenden und einfache Anführungszeichen in Kriterien haben möchten, müssen Sie sie durch Verdoppelung von 'Replace (sFile, '', '' '')' 'umgehen. Am besten verwenden Sie [parameter.] (Https: // stackoverflow.com/questions/10352211/vba-ado-connection-and-query-parameters). – BitAccesser

Antwort

0

sollte diese Arbeit:

Dim conn As New ADODB.Connection 
Dim record As New ADODB.Recordset 
Dim sSQL As String 

Set conn = CurrentProject.Connection 
Set record = New ADODB.Recordset 
sSQL = "SELECT * FROM IC4_MMI_410 WHERE file = " 
sSQL = sSQL & "'" & sFile & "'" 
sSQL = sSQL & " And ccu_code = " & iCode 

record.Open sSQL, conn, adOpenKeyset, adLockOptimistic 
Verwandte Themen