Главная страница
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.024 c
14-1094544398
9k33
2004-09-07 12:06
2004.10.10
Альтернатива для RENT A CODER


4-1094214349
maxXP
2004-09-03 16:25
2004.10.10
Проверка Мыши На Существование


3-1094627732
yuray
2004-09-08 11:15
2004.10.10
Инфо о клиентах базы


4-1094129994
Lola
2004-09-02 16:59
2004.10.10
Контроль за отправленной и входящей почтой.


14-1095948626
Nikolay M.
2004-09-23 18:10
2004.10.10
Масяня вернулась!