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

Вниз

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

Наверх





Память: 0.47 MB
Время: 0.043 c
15-1162457313
dr Gonzo
2006-11-02 11:48
2006.11.19
Нужен ли софтверной фирме открытый форум?


2-1162205363
regdown
2006-10-30 13:49
2006.11.19
Помогите с Паскалем


3-1158754017
anrin
2006-09-20 16:06
2006.11.19
Interbase 7.5, Stored procedure, Data Explorer (Delphi 2005)


15-1162464326
GRAND25
2006-11-02 13:45
2006.11.19
А как вам звонят 1С франчайзи?


15-1162047689
homm
2006-10-28 19:01
2006.11.19
Навеяно DMC а точнее движком данного форума





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский