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

Вниз

FibPlus - есть ли аналог UpdateBatch ?   Найти похожие ветки 

 
без ника   (2006-09-19 11:09) [0]

Есть ли в компонентах FibPlus аналог UpdateBatch из ADO?

Сейчас я добавляю (изменяю)  данные с помощью сторед процедур(TFibStoredProc) . Но иногда бывает, что изменяется сразу 50-100 записей - подтормаживает. Хотелось бы отдать серверу изменения 1 пакетом.


 
ANB ©   (2006-09-19 11:47) [1]

Что значит пакетом ? Много маленьких апдейтов - сильно быстрее не будет, т.к. все равно по очереди выполнятся будут.
Напиши один грамотный апдейт и выполни.


 
Виталий Панасенко   (2006-09-19 12:06) [2]

кэширование тебе поможет(должно)


 
без ника   (2006-09-19 12:09) [3]

собственно о чем писал:

Допустим есть процедура для вставки записи StoredProc1. Чтобы вставить 100 записей - 100 вызовов. Тормоза. Самому генерировать скрипт на Insert хм... скажем так не охота :)

Нашел решение для Fib, собственно делается с пом-ю FibDataSet :

1. Прописать SQL на SELECT "SELECT P1,P2,P3  FROM T";
2. Прописать SQL на Insert "INSERT INTO T (P1,P2,P3) VALUES (:P1,:P2,:P3)";
3. FibDataSet.CachedUpdates := True;
3. FibDataSet.Active:=True;
4. далее в цикле :

   FibDataSet.Append;
   FibDataSet.FieldByName("P1").Value := XXXX;
   ....
   FIBDataSet.Post;

и потом FibDataSet.ApplyUpdates;
ну и транзакцию Commit;  Вот так решилась проблема.


 
без ника   (2006-09-19 12:11) [4]

2000 - вставок в цикле ~ 2 сек,а  если делать 1000 вызовов хранимой процедуры уже ~ 6 сек.


 
без ника   (2006-09-19 12:12) [5]

А ну да, если нужно сделать множественный Update - собственно заполнить SQL на Update :)


 
ANB ©   (2006-09-19 12:51) [6]


> без ника   (19.09.06 12:11) [4]

Пынятно, сам вызов хранимки тоже время кушает.

Откуда данные для вставки берешь ?


 
без ника   (2006-09-19 16:33) [7]

Да из за этих накладных расходов тормоза и образуются.

Данные для вставки - это список(аналог TList"a ток под типизированные данные). Точнее скажем, так буфер куда приходят результаты измерений, их нужно просто тупо записать в базу. Желательно побыстрее :)


 
ANB ©   (2006-09-19 17:12) [8]


> без ника   (19.09.06 16:33) [7]

Есть идея.
FB поддерживает конструкцию типа :

select * from
(
select 1 ID "Вася" Name from dual
union all
select 2 ID "Петя" Name from dual
union all
select 3 ID "Коля" Name from dual
)

?


 
без ника   (2006-09-20 11:08) [9]

в принципе данный синтаксис поддерживается. Но не поддерживается синтаксис(хотя я пока поверхностно смотрел) :

Select 1     AS P1,
         2.3  AS P2,
         "XX" AS P3

так бы можно было создать большой SQL запрос вида:

inser Into T(P1,P2,P3)
From ( SELECT 1      AS P1,
                    2.3   AS P2,
                    "XX"  AS P3
        UNION ALL
         SELECT 3      AS P1,
                    55.1   AS P2,
                    "YY"  AS P3
        ....
      )

Но во первых не очень хочется делать все ручками :) а во вторых по опыту общения с MSSQL, знаю, что есть какое то ограничение на объем передаваемого SQL запроса (хотя может это и пролемы ADO). А тут он може оказаться громадным -> его придется разбивать на несколько INSERT"ов. В принципе пока быстродействия хватает, потом можно будет попробовать и такой вариант.



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

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

Наверх




Память: 0.49 MB
Время: 0.052 c
15-1162041151
DillerXX
2006-10-28 17:12
2006.11.19
Все дружно поздравляем обладателя хорошего LCD монитора :о)


3-1158571057
memo
2006-09-18 13:17
2006.11.19
BLOB поле


3-1158743677
kaif
2006-09-20 13:14
2006.11.19
Преемственность данных и суррогатные ключи


2-1162307017
Megabyte
2006-10-31 18:03
2006.11.19
После формирования отчета в Excel висит процесс


11-1139132248
homm
2006-02-05 12:37
2006.11.19
Хранение двоичных данных(файла) в *.dfm