Конференция "Базы" » Как ускорить обмен между двумя базами? [D7, FireBird1.5, Access]
 
  • pavel_guzhanov © (03.06.08 20:01) [0]
    Здравствуйте.
    Мне нужно перегнать данные из базы 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;



    Это конечно работает, но очень медленно. Подскажите, как можно сделать то же (т.е. перенос данных), но чтобы работало быстрее?
  • Виталий Панасенко(дом) (03.06.08 21:27) [1]
    А данных то сколько ?
  • Reindeer Moss Eater © (03.06.08 21:29) [2]
    Data Pump
  • Правильный_Вася (03.06.08 21:36) [3]

    > ADOQuery.Parameters[0].value:=IBQuery.FieldByName('Field1').value;

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

    ps забудь про квери, используй датасет и комманд
  • pavel_guzhanov © (04.06.08 08:11) [4]
    А где почитать про DataPump?


    > А данных то сколько ?


    В самой большой таблице около миллиона, пара таблиц по 30-40 тысяч, остальные - мелочи.
  • Виталий Панасенко(дом) (04.06.08 08:48) [5]

    > pavel_guzhanov ©   (04.06.08 08:11) [4]
    >
    > А где почитать про DataPump?
    >
    >
    > > А данных то сколько ?
    >
    >
    > В самой большой таблице около миллиона, пара таблиц по 30-
    > 40 тысяч, остальные - мелочи.
    >

    но если в исходной БД сотни мегабайт инфы, то быстрее вряд-ли получиться.
    + сделать IBQuery однонаправленным
  • Sergey Masloff (05.06.08 11:54) [6]
    pavel_guzhanov ©   (04.06.08 08:11) [4]
    >А где почитать про DataPump?
    Да он вместе с дельфой идет в поставке просто по умолчанию не ставится наверное. Хелп к нему тоже есть там все элементарно. Насчет скорости правда не уверен в существенном выигрыше.

    попробуй в твоем варианте замени IBQuery на IBSQL, ParamByName на Params[]

    Еще можно средствами акцесса делать импорт - через ODBC или из файлов
 
Конференция "Базы" » Как ускорить обмен между двумя базами? [D7, FireBird1.5, Access]
Есть новые Нет новых   [134434   +29][b:0][p:0.001]