Несоответствие типов данных в выражении критериев при запросе файла Excel с использованием vbscript - PullRequest
0 голосов
/ 30 августа 2011

У меня есть сценарий, в котором мне нужно запросить таблицу Excel с помощью SQL. В Excel у меня есть столбец с именем «test_case_id», который содержит буквенно-цифровое значение Я использую следующий код VBScript, чтобы получить значения из Excel. Столбец «test_case_id» в Excel был отформатирован как «Общий». Когда значение для этого столбца является целым числом (например, 1,2,3 ...)

SELECT  *   FROM [05 Invest Allocate$] WHERE [test_case_id] =1

Кажется, вышеупомянутый запрос работает

Но когда в столбце "test_case_id" есть символ (например, 5b, 6b, 7b)

SELECT  *   FROM [05 Invest Allocate$] WHERE [test_case_id] ='5b'

Приведенный выше запрос выдает ошибку «Несоответствие типов данных в выражении критериев».

Может ли кто-нибудь помочь мне решить эту проблему таким образом, чтобы я мог запрашивать либо в виде строки, либо в виде целого числа в предложении where?

Полный код:

strQuery = "SELECT  *   FROM [05 Invest Allocate$] WHERE [test_case_id] ='5b'"
j_drive_root_path="C:\Documents and Settings\Desktop\"

Set objNetwork = CreateObject("WScript.Network")
            strUserName =objNetwork.UserName

            Set fso = CreateObject("Scripting.FileSystemObject")
            Set original = fso.GetFile(j_drive_root_path & "temp_invest_allocate.xls")

            strCopyPath = "C:\Documents and Settings\" & strUsername & "\copyofexceltable.xls"
            original.Copy (strCopyPath)

            'Set the connection object and path to the copied spreadsheet       
            Set objAdCon =  CreateObject("ADODB.Connection")

            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & strCopyPath & ";" & _
                      "Extended Properties=""Excel 8.0;HDR=Yes"""

            'Open spreadsheet
            objAdCon.Open strConn

            'Create a recordest object (to store the results of the query)
            Set record_set = CreateObject("ADODB.Recordset")

            'Run the query
            record_set.CursorLocation = 3

            record_set.Open strQuery, objAdCon, 1, 3

            If Not record_set.EOF Then
                Set client_to_accountID = CreateObject("Scripting.Dictionary")
                client_to_accountID.CompareMode=vbTextCompare
                client_to_accountID.RemoveAll

                Do Until record_set.EOF
                        tmp_val=Trim(Cstr(record_set("id").Value))
                        print "id=" & tmp_val
                        record_set.MoveNext
                Loop
            End If ' End of if not record_set.EOF

Ответы [ 2 ]

1 голос
/ 31 января 2014

, если вы используете 64-битную версию Win7, папка My Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

0 голосов
/ 30 августа 2011

В http://support.microsoft.com/kb/257819 говорится:

Например: в ваших восьми (8) отсканированных строках, если столбец содержит пять (5) числовых значений и три (3) текстовых значения, поставщик возвращает пять (5) чисел и три (3) нулевых значения. В твои восемь (8) отсканированные строки, если столбец содержит три (3) числовых значения и пять (5) текстовые значения, поставщик возвращает три (3) нулевых значения и пять (5) текстовые значения. В ваших восьми (8) отсканированных строках, если столбец содержит четыре (4) числовых значения и четыре (4) текстовых значения, провайдер возвращает четыре (4) числа и четыре (4) нулевых значения. Как результат, если ваш столбец содержит смешанные значения, ваш единственный выход сохранить числовые значения в этом столбце в виде текста и преобразовать их обратно на номера, когда это необходимо в клиентском приложении с помощью визуального Базовая функция VAL или эквивалент.

Чтобы обойти эту проблему для данных только для чтения, включите режим импорта с помощью используя параметр «IMEX = 1» в разделе расширенных свойств Строка подключения. Это обеспечивает соблюдение реестра ImportMixedTypes = Text установка. Тем не менее, обратите внимание, что обновления могут дать неожиданные результаты в этот режим. Для получения дополнительной информации об этом параметре щелкните номер статьи ниже, чтобы просмотреть статью в Microsoft Knowledge База: 194124 PRB: значения Excel возвращены как NULL с использованием DAO OpenRecordset

Возможно, вам потребуется изменить TypeGuessRows на 0 в реестре на

Hkey_Local_Machine/Software/Microsoft/Jet/4.0/Engines/Excel/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...