Можно ли установить adodb.Recordset в BOF при открытии

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Можно ли установить adodb.Recordset в BOF при открытии

Сообщение anvg » 23.09.2017 (Сб) 11:13

Доброе время суток.
По умолчанию, Recordset.Open sSQL, Connection открывается и устанавливается на первой записи данных, если они конечно есть. Можно ли комбинацией его параметров или параметров Connection открыть его так, чтобы курсор Recordset был перед первой записью данных, или Recordset.BOF = True?
Необходимость вызвана тем, что при использовании провайдера "Provider=Microsoft.Mashup.OleDb.1" Recordset выдаёт сбой при чтении данных этой первой строки. Recordset.MoveNext помогает и дальнейшее чтение до конца таблицы идёт без проблем. Но хотелось бы иметь и данные первой строки.
P. S. В данном случае нельзя использовать CursorLocation = adUseClient, только adUseServer из-за отказа в подключении.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Можно ли установить adodb.Recordset в BOF при открытии

Сообщение alibek » 23.09.2017 (Сб) 11:21

А MoveFirst не помогает?
Lasciate ogni speranza, voi ch'entrate.

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Re: Можно ли установить adodb.Recordset в BOF при открытии

Сообщение anvg » 23.09.2017 (Сб) 12:09

А MoveFirst не помогает?

Без Recordset.CursorLocation = adUseClient перемещения курсором в Recordset не возможны (впрочем как Filter, Find, Sort), поэтому может и помог бы, только не применим, увы.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Можно ли установить adodb.Recordset в BOF при открытии

Сообщение alibek » 23.09.2017 (Сб) 13:06

anvg писал(а):Без Recordset.CursorLocation = adUseClient перемещения курсором в Recordset не возможны (впрочем как Filter, Find, Sort), поэтому может и помог бы, только не применим, увы.

Я конечно давно не брал в руки шашку, но очень сильно в этом сомневаюсь.
Скорее всего перемещения ограничены из-за типа курсора adOpenForwardOnly.
Lasciate ogni speranza, voi ch'entrate.

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Re: Можно ли установить adodb.Recordset в BOF при открытии

Сообщение anvg » 23.09.2017 (Сб) 13:44

Скорее всего перемещения ограничены из-за типа курсора adOpenForwardOnly.

Вы не правы. Кусок кода
Код: Выделить всё
    adoConn.Open "Provider=Microsoft.Mashup.OleDb.1;Data Source=" & ThisWorkbook.FullName & ";Location=sqlquery;"
    Debug.Print "open"
    pRset.CursorLocation = adUseServer
    pRset.Open "SELECT [quantity], [created], [price] FROM [sqlquery]", adoConn, adOpenStatic, adLockOptimistic, adCmdText
    'Непонятная ошибка с первой записью - костыльный обход
    'If Not pRset.EOF Then pRset.MoveNext
    Do Until pRset.EOF
        Debug.Print pRset("price").Value
        pRset.MoveNext
    Loop
    pRset.Close
    adoConn.Close
Если, как в приведённом коде, поставить комментарий на If, то будет ошибка
Изображение

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Можно ли установить adodb.Recordset в BOF при открытии

Сообщение HandKot » 09.10.2017 (Пн) 7:24

anvg , скорее всего это проблема провайдера .
При провайдере sqloledb, при наличии записей, курсор стоит на первой записи и св-во BOF имеет значение FALSE
I Have Nine Lives You Have One Only
THINK!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 16

    TopList