Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

inceremental fetch tclientdataset баг?   Найти похожие ветки 

 
_jk_   (2004-08-24 14:55) [0]

Привет всем.
натолкнулся на ситуацию не знаю как самому справится :((
есть база оракл9и (важно) в ней есть таблица atab с полем afield
в таблице много записей с повторяющмися(важно) значениями в поле afield

в приложении открывается запрос
"select * from atab order by afield"
через TDataSetProvider в клиентдатасете используется PacketRecords=50 (фетчим по 50 записей, FetchOnDemand=true)
клиентдатасет подвязан в гриду.
так вот при открытии запроса фетчится 50 записей, скроллим грид кнопкой вниз, датасет фетчит еще несколько раз по 50 записей и потом вдруг перестает фетчить, якобы уже конец таблицы :((, на самом деле он зафетчил только 150 записей :(, далее если я нажму в гриде "вверх", а потом опять "вниз" - он продолжает фетчить оставшиеся записи... версия midas.dll 7.1.1692.668 (самая последняя вроде)
вот собствено проблема.

далее мой анализ ситуации:
при открытии запроса - открывается набор даныых где есть ряд записей (95 записей) с одинаковвым значением поля afield="ммм", когда клиентдатасет фетчит их - то он фетчит сначала часть из них,
при скроллинге вниз, он фетчит оставшуюся часть этих записей и вызывается метод TCustomClientDataSet.AddDataPacket
который вызывает уже midas.dll -  
FDSBase.AppendData(VarToDataPacket(Data), HitEOF)

так вот "прикол" в том что этот метод добавляет данные НЕ В КОНЕЦ датасета, а в середину - как раз туда где начинается ряд записей с afield="ммм", а грид такого финта не замечает и сам clientdataset возращает Eof после такого финта %-(

кстати если поставить PacketRecords=96 (на 1 больше чем кол-во записей с одинковым значением поля) то глюка нет! но беда в том что я не могу знать зараннее сколько там таких записей есть, и подсчиттывать это тоже не карсиво...

на других субд(файрберд, мсскл) такого глюка не обнаружено - все работает четко.

никто с таким глюком не сталкивался?


 
_jk_   (2004-08-24 16:33) [1]

нашел закономерность...
дело в том что значение идут не совсем одинаковые, они отличаются  регистром. т.о. при открытии запроса из dbexplore, оракл возращает след. набор данных
AAAA
AAAA
AAAA
AAAA
aaaa
aaaa
aaaa
aaaa

а при открытии в клиент датасете получается след. картина:
1. фетчатся записи в с заглавными буквами:
АААА
АААА
АААА
АААА
АААА  < курсор
2. При зачитывании записей с маленькими буквами они вставляютсяне в конец (как их вернул оракл) а вперед:
аааа
аааа
аааа
аааа  < вставка
аааа
АААА
АААА
АААА
АААА
АААА  < курсор

и после этого клиентдатасет возращает Eof, пока его не передернешь в гриде вверх вниз...

и почему клиент датасет не так возращает данные как оракл?

ЗЫ. возможно и под другими субд есть что нить похожее - просто на своих тестах у меня были не одинаковые данные...


 
_jk_   (2004-08-24 16:42) [2]

в предидущей мессаге надо читать так:
... При зачитывании записей с маленькими буквами они вставляются НЕ в конец (как их вернул оракл) а вперед...


 
roottim ©   (2004-08-25 08:08) [3]

а локальные индексы тут не причем?


 
_jk_   (2004-08-27 18:38) [4]

а нету в момент глюка в клиентдасете локальных индексов %-(


 
_jk_   (2004-09-14 10:50) [5]

разобрался!
все дело в провайдере, точнее в его опциях -
надо вклюить флаг poRetainServerOrder и тогда клиент датасет не будет заниматься фигней.



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
1-1096252600
Никита
2004-09-27 06:36
2004.10.10
Работа со строками


1-1096128732
ВиТ
2004-09-25 20:12
2004.10.10
Как правидлно закрыть Excel?


14-1095933019
Lexxx
2004-09-23 13:50
2004.10.10
Помогите найти компонент.


4-1094025255
Alex870
2004-09-01 11:54
2004.10.10
Командный процессор


4-1094537793
BRemB
2004-09-07 10:16
2004.10.10
Нажать левую кнопку мыши