|
|
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Может, кто сталкивался с такой проблемой: Для копирования в TClientDataset из любого датасета всегда использовал TDatasetProvider: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Однако при копировании из tpFibDataset обнаружил, что датасет закрывается и открывается снова. В результате получаем двойную работу, если мы до этого уже открыли датасет и отфетчили все записи. Происходит это из-за PSReset: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. В IBX, гляжу, то же самое. Но правильное ли это поведение? В комментариях к функции PSReset пишут, что она всего-навсего: "Сбрасывает набор данных так, чтобы он был позиционирован на первую запись. Провайдер вызывает PSReset, чтобы снова установить набор данных на первой записи перед выборкой записей" Обошел проблему через использование функции TDatasetProvider.GetRecords (при условии, что встаем на первую позицию и отфетчили все записи), но есть неприятность: калькулируемые поля включаются в датасет, но не пересчитываются, их значения будут NULL, ибо пересчитываются они как раз в TDatasetProvider.Reset, который заодно и PSReset использует. Поэтому универсального решения для копирования из любых dataset на все случаи жизни уже не получается, приходится учитывать контекст... Но проблемы бы не было, если разобраться с PSReset. TBDEDataset использует в этой функции процедуру DbiForceReread, которая не приводит к переоткрытию, что TTable, что TQuery, и даже к некоему "обновлению данных "иначе бы давно ошибки повылазили, ибо часто делается запрос в TQuery из временной таблицы, лежащей, допустим, в темпе, открывается запрос, и временная таблица сразу удаляется. Поэтому такое копирование в TClientDataset всегда работало без проблем, и можно было зацапать и калькулируемые поля, и не беспокоиться, что датасет переоткроется. Есть мнения по поводу того, как должен бы выглядеть правильный PSReset для tpFibDataset? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 17:24 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
V.Borzovкак должен бы выглядеть правильный PSReset для tpFibDataset? Как вызов First(). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 17:41 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
V.Borzov...В IBX, гляжу, то же самое. Но правильное ли это поведение?... Вопрос имел бы смысл, если бы ты был разработчиком этих библиотек. А так - утрись и используй то, что есть. Или не используй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 12:36 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
ёёёёё, Я не предлагаю пользоваться моими корректировками. Но для себя я их делаю. В чем проблема-то? Зачем мне утираться ошибкой, если я могу её сам исправить, а не делать затыки в зависящих от неё функциях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 12:50 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
V.Borzovёёёёё, Я не предлагаю пользоваться моими корректировками. Но для себя я их делаю. В чем проблема-то? Зачем мне утираться ошибкой, если я могу её сам исправить, а не делать затыки в зависящих от неё функциях? Не сердись. Откуда мне знать, для чего ты спросил. Может, ты собираешь статистику "правильный/неправильный датасет с т.зр. оптимальнсти процедуры копирования данных в TClientDataset". Интересно же. авторОднако при копировании из tpFibDataset обнаружил, что датасет закрывается и открывается снова. В результате получаем двойную работу, если мы до этого уже открыли датасет и отфетчили все записи. В результате время работы увеличивается на 18 миллисекунд, каждые сутки? ... Вообще, тема чрезвычайно интересная - тут тебе и вопросы оптимизации, и целесообразности применения костыля типа TClientDataset, и методика заточки сторонних библиотек под свои нужды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:19 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
Мне в ODAC тоже пришлось это фиксить Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:31 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
КвейдМне в ODAC тоже пришлось это фиксить Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:38 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
ёёёёёВ результате время работы увеличивается на 18 миллисекунд, каждые сутки? запрос выводит 1000-2000 строк с итоговыми суммами, после нескольких select from select всё выплевывается одним махом, на запрос уходит до 2 минут. В данном случае это критично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:49 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
Во как! Я тут далеко не первый с этой функций. Что и требовалось выяснить :) Всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 15:11 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
ёёёёёВообще, тема чрезвычайно интересная - тут тебе и вопросы оптимизации, и целесообразности применения костыля типа TClientDataset, и методика заточки сторонних библиотек под свои нужды. TClientDataset вполне устраивает как таблица в памяти, не такой уж и костыль. И копирование данных указанным способом, вроде, очень быстрое и достаточно удобное, по крайней мере сравнивал как-то с известными бесплатными MemDataset, пришел к такому выводу. И всякие там легкие сортировки по набору полей и агрегатные функции, тоже неплохо. Одно печалит: ограничение на принятый размер данных <=500мегабайт примерно, по крайней мере в 32 разрядном Delphi XE. Буквально вчера обратился клиент, захотелось отчет ему большой, результат которого собирается в CDS и выводится в грид на экран, а отчет выдает ошибку. Объясняю, что в его случае надо либо уменьшать уровень детализации отчета, что дает 12 тыс строк хотя бы, вместо 600 тыс, либо вообще другие отчеты смотреть (а ей всего-то надо было ведомость реализации товаров за месяц со всех складов сразу с полной детализацией...). Но все-таки, ограничение неприятное, учитывая, что программа может под себя выделить до 2 гиг памяти, а в компе ихнем её очень много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 15:51 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
V.BorzovTClientDataset вполне устраивает как таблица в памяти, не такой уж и костыльда ваще вещь, но больно уж глючный в родной реализации а касаемо прожорливости гляньте в сторону замены строковых полей на мемы, глядишь полегчает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 17:35 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
vavanV.BorzovTClientDataset вполне устраивает как таблица в памяти, не такой уж и костыльда ваще вещь, но больно уж глючный в родной реализации а касаемо прожорливости гляньте в сторону замены строковых полей на мемы, глядишь полегчает Он и глючный, он и медленный, он и жадный до памяти. Прицепи, к примеру, в качестве источника данных собственный (наследник TDataSet) датасет, простейший, который реально данных внутри себя не имеет, но на запросы виртуально возвращает, скажем, 1 млн записей. Например, по 4 ftInteger поля. И всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 21:51 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
ёёёёёон и медленныйв родной реализации кажется действительно не блистал, а в моей в чем-то помнится даже обгонял самый быстрый kbmmt ёёёёёжадный до памятидык in-memory, назначение обязывает. но тут тоже от реализации может варьироваться и выбираемых типов, про строки вот писал уже. у меня юзвери по несколько сот тысяч записей накачивают по 150 полей условно, с кучей разных типов и ничего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2019, 09:24 |
|
||
|
TpFIBDataSet.PSReset - ошибка?
|
|||
|---|---|---|---|
|
#18+
vavan, Родная реализация только для своих приложений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2019, 13:42 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39857849&tid=2039074]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 387ms |

| 0 / 0 |
