powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / GetRows
9 сообщений из 9, страница 1 из 1
GetRows
    #32200754
Akni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!

Столкнулась с такой проблемой:
Есть Sybase-база и приложение на VB, которое обращается к этой базе RDO 2.
К базе посылаются запросы через
Код: plaintext
Rs=cn.OpenReadResultSet(SQLQuery, rdOpenFowardOnly, rdConcurReadOnly, rdAsyncEnable + rdExecDirect)

Rs - rdoResultset
Cn - rdoConnection
SQLQuery – строка, содержащая SQL-запрос. Формируется динамически.


Данные, возвращенные запросом, считываются таким образом:

Код: plaintext
1.
2.
3.
Dim ar as variant

ar = rs.GetRows( 10000 )
iRows = UBound(ar,  2 ) +  1 

Проблема заключается в том, что UBound(ar, 2) возвращает иногда (особенно в тех случаях, когда кол-во записей достаточно большое) бОльшее значение, чем истинное кол-во записей.

Напр., при выполнении запроса, содержащегося в SQLQuery непосредственно в Sybase, возврашается N записей, а при вызове описанных выше действий в VB UBound(ar, 2) возвращает iRows > N !!!

Подскажите, пожалуйста, как с этим бороться.
...
Рейтинг: 0 / 0
GetRows
    #32200881
Doro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть дело в том что Вы вызываете GetRows(10000), а если попробовать
GetRows(rs.RecordCount)?
...
Рейтинг: 0 / 0
GetRows
    #32200902
Akni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rs.RowCount здесь не поможет. При указании параметра rdOpenForwardOnly при вызове OpenResultset(...) rs.RowCount всегда возвращает -1
Согласно MSDN, getRows должен писать в массив только реально полученное кол-во строк и соответственно устанавливать границу массива.
...
Рейтинг: 0 / 0
GetRows
    #32200921
Doro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно верно, в нашем случае для перевода в массив используется Snapshot, потом
r.MoveLast
Count = r.RecordCount
r.MoveFirst
RetArray = r.GetRows(Count)
...
Рейтинг: 0 / 0
GetRows
    #32200959
Akni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите за глупый вопрос, но SnapShot в данном случае куда "цеплять"?
...
Рейтинг: 0 / 0
GetRows
    #32201137
Doro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rdo98/html/rdprocursortype.asp

у Вас стоит параметр rdOpenForwardOnly
в нашем случае стоит параметр rdOpenKeyset, это вынесено в компонету доступа к БД и скомпилировано 2 года назад, после этого туда никто не залезал.
...
Рейтинг: 0 / 0
GetRows
    #32201244
Akni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>в нашем случае стоит параметр rdOpenKeyset

замена типа курсора на rdOpenKeyset в вызове OpenReadResultSet и последующий анализ кол-ва записей с пом. RowCount увы, ничего не принесли...
Исходя из этого, можно сделать вывод, что ошибка кроется в самом OpenReadResultSet, и что возвращаемый им ResultSet уже содержит лишние пустые данные.
Что интересно: если GetRows возвращает пустые записи (а это происходит не при каждом обращении), то из кол-во постоянно и всегда равно 100.
...
Рейтинг: 0 / 0
GetRows
    #32201296
Doro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или ошибка в особенности реализации ODBC драйвера для Sybase, может на форуме по этой БД дадут ответ
...
Рейтинг: 0 / 0
GetRows
    #32201304
Akni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry за предыдущий пост, поспешила там с выводами.

Ситуация такова:
заменила типа курсора на rdOpenKeyset в вызове OpenReadResultSet с последующим анализ кол-ва записей с пом. RowCount.

Но RowCount проходит только в том случае, если опрашиваются данные из одной таблицы. Как только в SQL-запросе опрашиваются 2 и больше таблиц (напр. select A.field1, B.field2 From tblA A, tblB B Where B.idxA=A.idA), то RowCount выдает отрицательный результат.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / GetRows
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]