Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сбросить данные из таблицы в файл. [D6, FB 1.5]


S@shka ©   (2006-05-17 18:31:00) 

Народ есть вот какая задача.

1. Данные из большой таблицы сбросить в файл.
2. Файл перенести.
3. Окрыть и вставить эти данные в другую таблицу.

Делаю это через TIBClientDataSet (пока что):
open;
savetofile ();
- все получается но в процессе выполнения запроса select(данных много) приложение расходует много оп. памяти до 100 мб.
соответственно тормоза!

Второй вариант сделать тоже самое через IBSQL.BatchOutput - тут все здорово - данные методично отправляются в файл (память расходуется разумно) но я при обработке данных на приемнике несколько меняю запрос insert ((

Т.к. на второй стороне я  открываю IBClientDataset и "шагаю" по ней мне было удобно чтобы на этапе select IBClientDataset тоже бы сбрасывал данные методично сразу в файл.

Можно ли этого как то добиться?
Или мож я вообще не тем путем иду?


Petr V. Abramov   (2006-05-19 01:26:00) [1]

если таблица большая, лучше использовать внешние таблицы FB. И быстро, и программирования меньше


S@shka   (2006-05-18 23:50:00) [2]

А вот странно - я все таки решил
делать через
IBSQL.BatchInput(F:TIBInputRawFile)

только вот не пойму
открываю я транзакцию
стартую процесс
после окончания закрываю транзакцию

а если много  данных вливается до 1.000.000 записей
там ведь (в исходнике реализации BatchInput) - нет периодического подтверждения транзакции?

Это нормлаьно?


Sergey13   (2006-05-18 09:04:00) [3]

2S@shka ©   (17.05.06 18:31)
Можно попробовать через внешнюю таблицу перегнать.


atruhin   (2006-05-17 19:47:00) [4]

Очень удобная библиотека для быстрого квотирования, замены управляющих символов, парсинга есть на сайте Alex Konshin модуль называется StringConv лет 5 пользуюсь.


atruhin   (2006-05-17 19:44:00) [5]

Так и пиши в текстовый файл как NULL, строки квотированные, если одна строка - одна запись, не забыть заменить #13#10, я делал подобное для экспорта, работает нежалуюсь :)


S@shka   (2006-05-17 19:39:00) [6]


> Ну так используй Query а вывод в файл формируй сам как нужно,
>  это несколько строк кода.
> При вставке построчно читаешь файл и обновляешь базу, будет
> медленней зато без расхода памяти.

Как в этом случае интерпретировать NULL значения?


atruhin   (2006-05-17 19:34:00) [7]


> [1] Desdechado ©   (17.05.06 18:36)

Вообще я бы при выгрузке формировал не набор опраторов insert, а запрос на вставку, и список параметров, так как при выполнении скрипта (т.е. в операторе insert константы) запрос будет каждый раз компилироваться и вычисляться план, что может быть гораздо медленнее, в разы.


atruhin   (2006-05-17 19:29:00) [8]

Ну так используй Query а вывод в файл формируй сам как нужно, это несколько строк кода.
При вставке построчно читаешь файл и обновляешь базу, будет медленней зато без расхода памяти.


S@shka   (2006-05-17 18:56:00) [9]

)))
Отвечаю на первый вопрос -
это делается редко.
Но надо большим массивом данных


Desdechado   (2006-05-17 18:55:00) [10]

ты не ответил на первый вопрос

а скрипт можнос конструировать уже так, чтоб не нужно было "на приемнике несколько меняю запрос insert"
тогда и грузить в CDS смысла не будет


S@shka   (2006-05-17 18:39:00) [11]

Под скриптом имеется ввиду?
Сделать select и данные сохранить в ввиде текстового файла
insert ... into ... values ... ;
commit;

???

Так это тож самое что BatchOutPut сделать ?


Desdechado   (2006-05-17 18:36:00) [12]

тебе это регулярно делать или разово?
проще выгрузить в скрипт, а потом скриптогонялкой выполнить его на другой базе


Наверх

Титульная страница Поиск, карта сайта Написать письмо