2015-10-19 80 views
0

我有一些代码在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_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" 
+0

难道第二个SQL字符串正在查看MonitorID而不是RTP_ID?除此之外,SQL看起来很好。我假设lngID是一个字符串变量,所以它可以保存'1A'?如果不是,它会抛出一个错误,或者如果您使用'On Error Resume Next',则返回0。关于你给我们的我不认为这是你的SQL字符串导致错误。 –

+0

对不起,这是从以前的测试我已经更新我的问题,它应该读取'RTP_ID',我的IngID是'lngID = Cells(lngRow,1).Value',因此它可以是列A中包含字符串值的任何内容。 – Calum

+0

您是否使用'On Error Resume Next'?在你的VBA代码的顶部是“Dim lngID AS String”还是“Dim lngID As Long”或“Dim lngID”?一个长镜头的位 - 你试过'Cells(lngRow,1).Value2',虽然(我认为)只会影响货币和日期值数据类型。当你说它不起作用 - 它怎么不起作用?它会抛出错误,还是返回不正确的结果? –

回答

1

我改写为下面的代码:

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)它将使用当前处于活动状态的纸张,因此需要声明工作表。

+0

对不起,我意识到这是因为我没有将其更改为'Monitor_Capacity',但我现在得到:“没有给出一个或多个必需参数的值” – Calum

+1

这可能是由于工作表中的空白单元格造成的。当它抛出错误时检查strID和Cells(lngRow,74)的值。您可能需要更新SQL来检查这些 - “cnn.Execute”UPDATE Tbl_Primary SET MonitorCapacity =“&_ IIf(ThisWorkbook.Worksheets(”Sheet2“)。Cells(lngRow,74).Value2 =”“,” Null“,_ ”'“&ThisWorkbook.Worksheets(”Sheet2“)。Cells(lngRow,74).Value2&”'“)&_ ”WHERE RTP_ID2 ='“&strID&”'“' –

+0

Brilliant,非常感谢你,我有一个空白的单元格! – Calum

相关问题