2015-10-19 2 views
0

Я код в Excel, который обновляет таблицу доступа, основанную на RTP_ID если равен IngID, следующие матчи и работы, если они являются числовыми в RTP_ID:Выберите из таблицы 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, это не так.

Edit- вот код, который я в настоящее время:

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'? Если это не значит, что это вызовет ошибку или вернет 0, если вы используете 'On Error Resume Next'. На том, что вы нам дали, я не думаю, что это ваша строка SQL вызывает ошибку. –

+0

Извините, что из предыдущих тестов я обновляю свой вопрос, он должен читать «RTP_ID», а мой Инджид «lngID = Cells (lngRow, 1) .Value», поэтому он может быть любым в столбце A, который содержит строковые значения. – Calum

+0

Вы используете 'On Error Resume Next'? В верхней части вашего кода VBA это 'Dim lngID AS String' или' Dim lngID AS Long' или 'Dim lngID'? Бит длинного выстрела - вы пробовали «Ячейки (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"). Ячейки (lngRow, 74) .Value2 = "", " Null ", _ " '"& ThisWorkbook.Worksheets (" Sheet2 "). Ячейки (lngRow, 74) .Value2 &"' ") & _ " WHERE RTP_ID2 = '"& strID &"' "' –

+0

Блестящие, Большое вам спасибо, у меня была пустая ячейка! – Calum

Смежные вопросы