2017-02-15 5 views
0

Ich möchte ein Recordset in Access VBA durchlaufen und die Werte einer Variablen als Zeichenfolge in VBA extrahieren. Das wird nicht funktionieren:Zugriff auf VBA: SQL-Zeichen zu VBA-Zeichenfolge

Sub test() 
Dim rs As DAO.Recordset 
Dim m As String 

Set rs = CurrentDb.openrecordset("myTable") 

If Not (rs.EOF And rs.bof) Then 
rs.movefirst 

Do Until rs.EOF 
debug.print rs!myField 'works 
MsgBox rs!myField 'doesn't work 

rs.movenext 
Loop 

End If 

rs.Close 

End Sub 

Es mir einen Fehler mit dem msgbox über nulls gibt, aber es funktioniert für debug.print in Ordnung. Ich kann nicht scheinen, die rs!myField in eine VBA-String-Variable zu extrahieren. Die Zeichenvariable in der Tabelle enthält Nullwerte, aber ich sollte trotzdem damit arbeiten können.

+0

Probieren Sie etwas wie:. 'MyStr = rs.Fields ("MyField") Dann myStr es in Ihrem MsgBox verwenden value' . –

+0

Ich bekomme den gleichen Fehler, wenn ich den Wert zu "myStr" zuweisen, aber 'debug.print' funktioniert mit Ihrem Code FWIW. – Carl

Antwort

1

Ich denke, ich sehe das Problem. Null ist nicht dasselbe wie vbNullString. Weitere Informationen finden Sie unter here. Es ist Java, aber die Idee hält.

Sie haben die Null Auftreten mit einer if-Anweisung wie folgt zu behandeln:

Sub test() 
    Dim rs As DAO.Recordset: Set rs = CurrentDb.OpenRecordset("myTable") 
    Dim MyStr As String 
    If Not (rs.EOF And rs.BOF) Then rs.MoveFirst 

    Do Until rs.EOF 
     If IsNull(rs!MyField) Then 
      MyStr = vbNullString 
     Else 
      MyStr = rs!MyField 
     End If 
     MsgBox (MyStr) 
     rs.MoveNext 
    Loop 

    rs.Close 
End Sub 
2

Wenn Sie NULL festlegbare Felder haben und wollen, dass sie als Text in VBA zu behandeln, können Sie „coalesce“ sie durch vbNullString anhängt:

MsgBox rs!myField & vbNullString 

Verkettungs ändert den Wert des Ausdrucks zu String, bevor sie wickelt es zu MsgBox übergeben wird.

0

Sie können auch einfach tun MsgBox nz (rs myField, "Wert, wenn null"!)