我有一些代碼在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',雖然(我認爲)只會影響貨幣和日期值數據類型。當你說它不起作用 - 它怎麼不起作用?它會拋出錯誤,還是返回不正確的結果? –