Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.033 c
3-1094639133
sf
2004-09-08 14:25
2004.10.10
Базы данных в сети


3-1094728587
Yurko
2004-09-09 15:16
2004.10.10
Объединение таблиц по нескольким полям


6-1091719190
kirasuki
2004-08-05 19:19
2004.10.10
Режимы TServerSocket


4-1094655045
Алексей Петухов
2004-09-08 18:50
2004.10.10
Настройки принтера


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский