Пытаюсь сделать выборку данных из файлика. Сначала загоняю значения в ексель
Код
Do Until EOF(1)
Line Input #1, textline
text = Split(textline, DELIMITER)
With Sheets(1)
.Cells(i, 1).Value = Int(text(0))
.Range("A" & i & "").NumberFormat = "0"
End With
i = i + 1
Loop
потом пытаюсь сделать выборку
Код
Select Case CLng(Split(Application.Version, ".")(0))
Case Is < 12
strSQL = "Select F1 from [" & Sheets(2).Name & "$] where F1=""" & rstTXT(0).Value & """;"
Case Is >= 12
strSQL = "Select F1 from [" & Sheets(2).Name & "$] where F1=" & rstTXT(0).Value & ";"
End Select
Else
GoTo 111
End If
'rst01.CursorLocation = 3
rst01.Open strSQL, cn, adOpenKeyset, adLockPessimistic
If rst01.RecordCount = 0 Then
r = 3
Rows(r).Insert Shift:=xlDown
Cells(r, 1).Value = rstTXT(0).Value
End If
rst01.Close
в rstTXT(0).Value - значение 301194460
ошибка "Data type mismatch in criteria expression" не понятно, почему не работает... причем если брать в кавычки - иногда работает, иногда нет
Ошибка значит что тип данных в критерии фильтра отличается от типа данных в столбце. Тип данных столбца sql определяет автоматически, не зависимо от формата ячеек. Не уверен, но сдаётся мне что так же как сводная таблица - если в столбце есть хоть одно нечисловое или пустое значение - тип данных - текст. Попробуйте
А не лучше ли запросы к этому файлику делать? Переименовал файлик в simpleName.txt (для примера кода лежит в папке c:\path) Содержимое schema.ini для него
Код
[simpleName.txt]
Format=TabDelimited
ColNameHeader=False
DateTimeFormat=yyyy-mm-dd hh:nn:ss
Col1 = Id Long
Col2 = WorkDate DateTime
Col3 = Sign1 Long
Col4 = Flag1 Long
Col5 = Val1 Long
Col6 = Mark1 Long
Пример запроса
Код
Public Sub test()
Const strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\Path;Extended Properties='text;HDR=NO;FMT=TabDelimited';"
Dim pConn As New ADODB.Connection
Dim pRSet As New ADODB.Recordset
pConn.Open strConn
pRSet.CursorLocation = adUseClient
pRSet.Open "Select * From `simpleName.txt` Where Id = 5207743", pConn
Debug.Print "Selected " & CStr(pRSet.RecordCount)
Debug.Print "First Date " & CStr(pRSet(1).Value)
pRSet.Close
pConn.Close
End Sub
Да, я чесно говоря не пошел сразу этим путем, а сечас, когда заказчих хочет еще и еще операций и условий, то воспользуюсь Вашим советом. Тем более готовая схемаш-ини. Огромное спасибо!