Страницы: 1
RSS
Проблема с поиском данных, ошибка "Data type mismatch in criteria expression"
 
Пытаюсь сделать выборку данных из файлика.
Сначала загоняю значения в ексель
Код
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"
не понятно, почему не работает...
причем если брать в кавычки - иногда работает, иногда нет
Изменено: panix1111 - 14.03.2017 23:10:29
Мы в Екселе не работаем, мы в нём живём!
 
Ошибка значит что тип данных в критерии фильтра отличается от типа данных в столбце. Тип данных столбца sql определяет автоматически, не зависимо от формата ячеек. Не уверен, но сдаётся мне что так же как сводная таблица - если в столбце есть хоть одно нечисловое или пустое значение - тип данных - текст.
Попробуйте
Код
where Val(F1)=Val(" & rstTXT(0).Value & ")"
 
Кнопка цитирования не для ответа [МОДЕРАТОР]

Да, скорее всего так и есть, но ваш вариант попробовал - та же ошибка
Мы в Екселе не работаем, мы в нём живём!
 
Доброе время суток.
Цитата
panix1111 написал:
данных из файлика
А где файлик? Сложно же на пальцах...
 
файлик


п.с. Решил тем, что убрал текстовые значения в столбце, в котором происхдит поиск (А)
Изменено: panix1111 - 15.03.2017 12:14:10
Мы в Екселе не работаем, мы в нём живём!
 
А не лучше ли запросы к этому файлику делать? Переименовал файлик в 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

Успехов.
 
Да, я чесно говоря не пошел сразу этим путем, а сечас, когда заказчих хочет еще и еще операций и условий, то воспользуюсь Вашим советом. Тем более готовая схемаш-ини.
Огромное спасибо!
Мы в Екселе не работаем, мы в нём живём!
 
Пишет ошибку, что база данных только для чтения
Мы в Екселе не работаем, мы в нём живём!
Страницы: 1
Читают тему
Наверх