2015-10-19 84 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

相關問題