Я код в 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"
Может ли быть, что вторая строка SQL смотрит на MonitorID, а не на RTP_ID? Помимо этого SQL выглядит отлично. Я предполагаю, что lngID является строковой переменной, поэтому он может содержать '1A'? Если это не значит, что это вызовет ошибку или вернет 0, если вы используете 'On Error Resume Next'. На том, что вы нам дали, я не думаю, что это ваша строка SQL вызывает ошибку. –
Извините, что из предыдущих тестов я обновляю свой вопрос, он должен читать «RTP_ID», а мой Инджид «lngID = Cells (lngRow, 1) .Value», поэтому он может быть любым в столбце A, который содержит строковые значения. – Calum
Вы используете 'On Error Resume Next'? В верхней части вашего кода VBA это 'Dim lngID AS String' или' Dim lngID AS Long' или 'Dim lngID'? Бит длинного выстрела - вы пробовали «Ячейки (lngRow, 1) .Value2» хотя (я думаю), что повлияет только на типы данных с датой и датой. Когда вы говорите, что это не работает - как это работает? Вызывает ли ошибка или возвращает неверные результаты? –