我有一些代码在Excel中,更新基础上,如果RTP_ID等于IngID,下面的比赛,如果他们在数字作品RTP_ID Access表:选择从Access表其中ID是一个字符串
sSQL = "SELECT * FROM Tbl_Primary WHERE RTP_ID = " & lngID
不过,我希望它在RTP_ID
可能是一个字符串。
我已经试过:
sSQL = "SELECT * FROM Tbl_Primary WHERE RTP_ID = '" & lngID & "'"
但仍然无法正常工作,任何想法?
因此,如果RTP_ID
是1
它会工作,但如果它是1A
它不会。
编辑 - 这里是我目前拥有的代码:
Application.ScreenUpdating = False
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
Dim MyConn
Dim lngRow As Long
Dim lngID, LR, Upd
Dim strID As String
Dim j As Long
Dim sSQL As String
LR = Range("B" & Rows.Count).End(xlUp).Row
Upd = LR - 1
lngRow = 2
Do While lngRow <= LR
strID = Cells(lngRow, 2).Value
sSQL = "SELECT * FROM Tbl_Primary WHERE RTP_ID2 = " & strID
Set cnn = New ADODB.Connection
MyConn = "Provider = Microsoft.ACE.OLEDB.12.0;" & _
"Data Source =\Work\Sites\HLAA\NEW\test\HLAA 2015 NEW.mdb"
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
End With
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
rst.Open sSQL, ActiveConnection:=cnn, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
.
With rst
.Fields("MonitorCapacity") = Cells(lngRow, 74).Value
rst.Update
End With
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
lngRow = lngRow + 1
Loop
MsgBox "You just updated " & Upd & " records"
难道第二个SQL字符串正在查看MonitorID而不是RTP_ID?除此之外,SQL看起来很好。我假设lngID是一个字符串变量,所以它可以保存'1A'?如果不是,它会抛出一个错误,或者如果您使用'On Error Resume Next',则返回0。关于你给我们的我不认为这是你的SQL字符串导致错误。 –
对不起,这是从以前的测试我已经更新我的问题,它应该读取'RTP_ID',我的IngID是'lngID = Cells(lngRow,1).Value',因此它可以是列A中包含字符串值的任何内容。 – Calum
您是否使用'On Error Resume Next'?在你的VBA代码的顶部是“Dim lngID AS String”还是“Dim lngID As Long”或“Dim lngID”?一个长镜头的位 - 你试过'Cells(lngRow,1).Value2',虽然(我认为)只会影响货币和日期值数据类型。当你说它不起作用 - 它怎么不起作用?它会抛出错误,还是返回不正确的结果? –