![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как ускорить обмен между двумя базами? [D7, FireBird1.5, Access]
pavel_guzhanov © (2008-06-03 20:01:00)Здравствуйте.
Мне нужно перегнать данные из базы Firebird в Access. Базы идентичны по структуре. Решил сделать в лоб. Сперва запрос в FireBird, потом в цикле по набору данных, занося их в Access. Для связи с FireBird использую IBDatabase и IBQuery, для связи с Access использую ADO. Выглядит примерно так:
ADOQuery.sql.Clear;
ADOQuery.SQL.Add('insert into Table 1 (Field1, field2, field3,...) values (:v1, :v2, :v3,...)');
IBQuery.SQL.Clear;
IBQuery1.SQL.Add('Select * from TABLE1');
IBQuery.Open;
IBQuery.First;
while not IBQuery.Eof do
begin
ADOQuery.Parameters[0].value:=IBQuery.FieldByName('Field1').value;
ADOQuery.Parameters[1].value:=IBQuery.FieldByName('Field2').value;
ADOQuery.Parameters[2].value:=IBQuery.FieldByName('Field3').value;
...........
IBQuery.next;
end;
Это конечно работает, но очень медленно. Подскажите, как можно сделать то же (т.е. перенос данных), но чтобы работало быстрее?
Sergey Masloff (2008-06-05 11:54:00) [1]pavel_guzhanov © (04.06.08 08:11) [4]
>А где почитать про DataPump?
Да он вместе с дельфой идет в поставке просто по умолчанию не ставится наверное. Хелп к нему тоже есть там все элементарно. Насчет скорости правда не уверен в существенном выигрыше.
попробуй в твоем варианте замени IBQuery на IBSQL, ParamByName на Params[]
Еще можно средствами акцесса делать импорт - через ODBC или из файлов
Виталий Панасенко(дом) (2008-06-04 08:48:00) [2]
> pavel_guzhanov © (04.06.08 08:11) [4]
>
> А где почитать про DataPump?
>
>
> > А данных то сколько ?
>
>
> В самой большой таблице около миллиона, пара таблиц по 30-
> 40 тысяч, остальные - мелочи.
>
но если в исходной БД сотни мегабайт инфы, то быстрее вряд-ли получиться.
+ сделать IBQuery однонаправленным
pavel_guzhanov (2008-06-04 08:11:00) [3]А где почитать про DataPump?
> А данных то сколько ?
В самой большой таблице около миллиона, пара таблиц по 30-40 тысяч, остальные - мелочи.
Правильный_Вася (2008-06-03 21:36:00) [4]
> ADOQuery.Parameters[0].value:= IBQuery.FieldByName('Field1').value;
запомнить выделенное в отдельные переменные, обращаться к ним
это блошки, конечно, но будет чуть быстрее
однако датапамп лучше
ps забудь про квери, используй датасет и комманд
Reindeer Moss Eater (2008-06-03 21:29:00) [5]Data Pump
Виталий Панасенко(дом) (2008-06-03 21:27:00) [6]А данных то сколько ?