从Access表中selectID是一个string

我有一些在Excel中的代码,更新一个Access表,如果RTP_ID等于IngID,下面的匹配,如果它们是RTP_ID数字作品:

sSQL = "SELECT * FROM Tbl_Primary WHERE RTP_ID = " & lngID 

不过,我希望它RTP_ID可以是一个string。

我试过了:

 sSQL = "SELECT * FROM Tbl_Primary WHERE RTP_ID = '" & lngID & "'" 

但是这仍然行不通,有什么想法?

所以如果RTP_ID1它会工作,但如果它是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" 

我会重写代码如下:

 Dim cnn As Object Dim lngRow As Long Dim lngID As Long, LR As Long, Upd As Long Dim strID As String LR = ThisWorkbook.Worksheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row Upd = LR - 1 lngRow = 2 Set cnn = CreateObject("ADODB.Connection") cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=\Work\Sites\HLAA\NEW\test\HLAA 2015 NEW.mdb;" & _ "Persist Security Info=False;" Do While lngRow <= LR strID = ThisWorkbook.Worksheets("Sheet2").Cells(lngRow, 2).Value cnn.Execute "UPDATE Tbl_Primary SET MonitorCapacity = '" & _ ThisWorkbook.Worksheets("Sheet2").Cells(lngRow, 74).Value2 & _ "' WHERE RTP_ID2 = '" & strID & "'" lngRow = lngRow + 1 Loop MsgBox "You just updated " & Upd & " records" 

您可能需要更改工作表名称 – 当您只放置Range("B" & Rows.Count) ,它将使用当前处于活动状态的任何表单,因此需要声明工作表。