Страница 1 из 1

Странное поведение при запросе к xls файлу

Добавлено: 18 июн 2009, 10:24
Ivan093
Привет всем!

Есть у меня два файла xls, первый делает запрос ко второму файлу через adodb. Второй файл лежит в сети.
Все хорошо работает пока кто-нибудь с другого компьютера не откроет второй файл, вот тогда и начинаются странности. Вместо простого получения данных из второго файла при запросе он почему то открывается (появляется окно экселя с этим вторым файлом) и все повисает. :confused:

Код запроса ко второму файлу:

Код: Выделить всё

    Dim conn1
    Dim rs1
    Dim str_conn As String
    Dim sSQL1 As String
    
    Set conn1 = CreateObject("ADODB.Connection")
    Set rs1 = CreateObject("ADODB.Recordset")
    
    str_conn = "Provider=Microsoft.Jet.OLEDB.4.0;" _
    & "Data Source=" + gNomFileName + ";" _
    & "Extended Properties=""Excel 8.0;HDR=Yes"";"
    
    On Error Resume Next
    conn1.Open str_conn
    On Error GoTo 0
    If conn1.State <> 1 Then
        MsgBox "Не удалось подключиться к файлу справочника номенклатуры!"
        Exit Sub
    End If
    
    rs1.ActiveConnection = conn1
    
    Диапазон = gNomSheetName & "$" & Chr(64 + gNomArticulColumn) & gNomStartRow - 1 & ":" & Chr(64 + gNomArticulColumn + 1) & "10000"
    sSQL1 = "SELECT * From [" + Диапазон + "] as Articul"
    
    With rs1
        .CursorType = adOpenStatic
        '.LockType = adLockReadOnly
    End With
    
    Set rs1 = conn1.Execute(sSQL1)
    
    Do While rs1.EOF = False
Как мне победить эту странность? Второй файл нужен только для чтения. может что добавить в строке коннекта?
Так же подозреваю что может помочь строка rs1.LockType = adLockReadOnly, но если ее добавить эксель выдает ошибку "Аргументы имеют неверный тип". В отладчике adLockReadOnly = Empty. Код этот нашел здесь на форуме...
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Ааап! Никто не подскажет чтоли? :(

Re: Странное поведение при запросе к xls файлу

Добавлено: 18 июн 2009, 13:46
Kokain
Попробуйте поставить вместо вашего 'CursorType' это 'CursorTypeEnum'.
И еще вместо 'LockType' вот это 'LockTypeEnum'.

А теперь поиграйтесь с CursorTypeEnum и LockTypeEnum. Возможно подойдет CursorTypeEnum.adOpenForwardOnly.

Отпишите какой результат

Re: Странное поведение при запросе к xls файлу

Добавлено: 18 июн 2009, 17:22
Teslenko_EA
Здравствуйте Ivan093.
Открывать Recordset удобнее подобным образом:

Код: Выделить всё

   ' With rs1
   '     .CursorType = adOpenStatic
        '.LockType = adLockReadOnly
   ' End With
    'Set rs = cn.Execute(sSQL1)
    rs1.Open sSQL1, conn1, adOpenKeyset, adLockReadOnly
    .....
    rs1.Close
и конечно подключение и рекордсет стоит объявлять не Variant а явно указывая тип:

Код: Выделить всё

    'Dim conn1
    'Dim rs1
    
    Dim conn1 As ADODB.Connection
    Dim rs1 As ADODB.Recordset
    
    Set conn1 = New ADODB.Connection
    Set rs1 = New ADODB.Recordset
Евгений.

Re: Странное поведение при запросе к xls файлу

Добавлено: 19 июн 2009, 06:41
Ivan093
Не помогает :( Тем более я в отладчике посмотрел, после выполнения запроса rs1 уже имеет точно такие параметры.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Teslenko_EA писал(а):Здравствуйте Ivan093.
Открывать Recordset удобнее подобным образом:

Код: Выделить всё

   ' With rs1
   '     .CursorType = adOpenStatic
        '.LockType = adLockReadOnly
   ' End With
    'Set rs = cn.Execute(sSQL1)
    rs1.Open sSQL1, conn1, adOpenKeyset, adLockReadOnly
    .....
    rs1.Close
и конечно подключение и рекордсет стоит объявлять не Variant а явно указывая тип:

Код: Выделить всё

    'Dim conn1
    'Dim rs1
    
    Dim conn1 As ADODB.Connection
    Dim rs1 As ADODB.Recordset
    
    Set conn1 = New ADODB.Connection
    Set rs1 = New ADODB.Recordset
Евгений.
Спасибо, подключение переделаю. А вот на объявление переменных как ADODB.xxx выдается ошибка User-defined type not defined.

Re: Странное поведение при запросе к xls файлу

Добавлено: 20 июн 2009, 11:09
mc-black
А вот на объявление переменных как ADODB.xxx выдается ошибка User-defined type not defined.
Так это потому, что вы не подключили библиотеку ADO через меню Tools - References... в окне References найти и выбрать галочкой Microsoft Activex Data Objects 2.X Library

Насчет совместного доступа, тут кроме типов указателей стоит поэкспериментировать со строкой подключения, т.к. по умолчанию доступ к базе монопольный под администратором, по-моему.