|
GetRows
|
|||
---|---|---|---|
#18+
Добрый день всем! Столкнулась с такой проблемой: Есть Sybase-база и приложение на VB, которое обращается к этой базе RDO 2. К базе посылаются запросы через Код: plaintext
Rs - rdoResultset Cn - rdoConnection SQLQuery – строка, содержащая SQL-запрос. Формируется динамически. Данные, возвращенные запросом, считываются таким образом: Код: plaintext 1. 2. 3.
Проблема заключается в том, что UBound(ar, 2) возвращает иногда (особенно в тех случаях, когда кол-во записей достаточно большое) бОльшее значение, чем истинное кол-во записей. Напр., при выполнении запроса, содержащегося в SQLQuery непосредственно в Sybase, возврашается N записей, а при вызове описанных выше действий в VB UBound(ar, 2) возвращает iRows > N !!! Подскажите, пожалуйста, как с этим бороться. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 12:37 |
|
GetRows
|
|||
---|---|---|---|
#18+
может быть дело в том что Вы вызываете GetRows(10000), а если попробовать GetRows(rs.RecordCount)? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 13:49 |
|
GetRows
|
|||
---|---|---|---|
#18+
rs.RowCount здесь не поможет. При указании параметра rdOpenForwardOnly при вызове OpenResultset(...) rs.RowCount всегда возвращает -1 Согласно MSDN, getRows должен писать в массив только реально полученное кол-во строк и соответственно устанавливать границу массива. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 13:58 |
|
GetRows
|
|||
---|---|---|---|
#18+
Совершенно верно, в нашем случае для перевода в массив используется Snapshot, потом r.MoveLast Count = r.RecordCount r.MoveFirst RetArray = r.GetRows(Count) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 14:11 |
|
GetRows
|
|||
---|---|---|---|
#18+
Простите за глупый вопрос, но SnapShot в данном случае куда "цеплять"? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 14:33 |
|
GetRows
|
|||
---|---|---|---|
#18+
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rdo98/html/rdprocursortype.asp у Вас стоит параметр rdOpenForwardOnly в нашем случае стоит параметр rdOpenKeyset, это вынесено в компонету доступа к БД и скомпилировано 2 года назад, после этого туда никто не залезал. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 16:15 |
|
GetRows
|
|||
---|---|---|---|
#18+
>в нашем случае стоит параметр rdOpenKeyset замена типа курсора на rdOpenKeyset в вызове OpenReadResultSet и последующий анализ кол-ва записей с пом. RowCount увы, ничего не принесли... Исходя из этого, можно сделать вывод, что ошибка кроется в самом OpenReadResultSet, и что возвращаемый им ResultSet уже содержит лишние пустые данные. Что интересно: если GetRows возвращает пустые записи (а это происходит не при каждом обращении), то из кол-во постоянно и всегда равно 100. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 17:33 |
|
GetRows
|
|||
---|---|---|---|
#18+
или ошибка в особенности реализации ODBC драйвера для Sybase, может на форуме по этой БД дадут ответ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 18:24 |
|
GetRows
|
|||
---|---|---|---|
#18+
Sorry за предыдущий пост, поспешила там с выводами. Ситуация такова: заменила типа курсора на rdOpenKeyset в вызове OpenReadResultSet с последующим анализ кол-ва записей с пом. RowCount. Но RowCount проходит только в том случае, если опрашиваются данные из одной таблицы. Как только в SQL-запросе опрашиваются 2 и больше таблиц (напр. select A.field1, B.field2 From tblA A, tblB B Where B.idxA=A.idA), то RowCount выдает отрицательный результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2003, 18:28 |
|
|
start [/forum/topic.php?fid=60&msg=32201244&tid=2171060]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 427ms |
0 / 0 |