Перенести данные из одной базы в другую

Андрей1985
Дата: 02.06.2012 16:31:28
Как перенести данные из одной базы в другую.
Пробовал через ibeblock, выдает ошибку...
 execute ibeblock
 as declare variable id1 integer;
  as declare variable id2 integer;
begin

  
   DB_NEW = ibec_CreateConnection(__ctFirebird, 'DBName="D:\data SURG(new)\GAS_Equip.FDB";
                                            ClientLib=C:\Program Files\Firebird\Firebird_2_5\bin\fbclient.dll;
                                            User=SYSDBA; Password=2625; Names=NONE; SqlDialect=3;');

   DB_OLD = ibec_CreateConnection(__ctFirebird, 'DBName="D:\data SURG\GAS_Equip.FDB";
                                            ClientLib=C:\Program Files\Firebird\Firebird_2_5\bin\fbclient.dll;
                                            User=SYSDBA; Password=2625; Names=NONE; SqlDialect=3;');

   ibec_UseConnection(DB_NEW );
   for execute statement ' select "K.KOD", "K.KOD_HC" from "KLSFCT K" where K.KOD=27 '
   into :id1,:id2
   do
   begin
        ibec_UseConnection(DB_OLD);
        insert into "KLSFCT K" ("KOD","KOD_HC")
        values(:id1,:id2);
        commit;
   end


    ibec_CloseConnection(DB_NEW);
    ibec_CloseConnection(DB_OLD);

  end;

Кто знает, поскажите. Очень нужно...
Дураг
Дата: 02.06.2012 16:34:23
обычно скриптом переносят...

Андрей1985
Пробовал через ibeblock, выдает ошибку...


секретную?
Dimitry Sibiryakov
Дата: 02.06.2012 16:57:00

Дураг
обычно скриптом переносят...

IBDataPump, FBCopy побыстрее будут...

Posted via ActualForum NNTP Server 1.5

Таблоид
Дата: 02.06.2012 16:57:31
Андрей1985,

вот пример запроса к удаленной ФБ-базе через EDS-механизм (external datasource; введён с 2.5) и параметрический запрос:
SQL> create database 't01.fdb'; commit;
SQL> create table t(id int, f01 int, s01 varchar(10)); commit;
SQL> insert into t values(1, 100, 'abcdef');
SQL> insert into t values(2, 200, 'ghijkl');
SQL> insert into t values(3, 300, 'mnopqr');
SQL> commit;
SQL> quit;

SQL> create database 't02.fdb'; commit;
SQL> create table t2(id int, f01 int, s01 varchar(10)); commit;
SQL> set term ^;
SQL> execute block
CON> as
CON> declare v_stt varchar(2048);
CON> declare usr varchar(8)='sysdba';
CON> declare pas varchar(8)='masterke';
CON> declare src varchar(255)='localhost/3050:C:\1INSTALL\FIREBIRD\Data\t01.fdb';
CON> declare id type of column t2.id;
CON> declare f01 type of column t2.f01;
CON> declare s01 type of column t2.s01;
CON> declare v_id int = 2;
CON> begin
CON> delete from t2;
CON> v_stt='select id, f01, s01 from t where id<>:some_id';
CON> for
CON> execute statement(:v_stt)(some_id := :v_id)
CON> on external(:src)
CON> with common transaction
CON> as user(:usr) password(:pas)
CON> into
CON> id, f01, s01
CON> do
CON> insert into t2(id, f01, s01) values(:id, :f01, :s01);
CON> end^
SQL> set term ;^
SQL> commit;
SQL> select * from t2;

ID F01 S01
============ ============ ==========
1 100 abcdef
3 300 mnopqr
IBExpert
Дата: 02.06.2012 17:08:57
Андрей1985
Кто знает, поскажите. Очень нужно...


1. Никому не говори текст ошибки.
2. Коммит после каждого инсерта - это очень жестоко...
BirdFire
Дата: 03.06.2012 20:29:29
Андрей1985,

Вместо commit поставь
ibec_UseConnection(DB_NEW );
затем перед ibec_CloseConnection(..
поставь
ibec_UseConnection(DB_NEW );
commit;
BirdFire
Дата: 03.06.2012 20:31:29
BirdFire
Андрей1985,

Вместо commit поставь
ibec_UseConnection(DB_NEW );
затем перед ibec_CloseConnection(..
поставь
ibec_UseConnection(DB_OLD);
commit;
Андрей1985
Дата: 11.06.2012 17:36:29
Получилось т.о.
execute ibeblock
as

begin
   id1=0; id2=0;
  
   DB_NEW = ibec_CreateConnection(__ctFirebird, 'DBName="D:\data SURG(new)\GAS_Equip.FDB";
                                            ClientLib=C:\Program Files\Firebird\Firebird_2_5\bin\fbclient.dll;
                                            User=SYSDBA; Password=2625; Names=WIN1251; SqlDialect=3;');


   DB_OLD = ibec_CreateConnection(__ctFirebird, 'DBName=D:\data SURG\GAS_Equip.FDB;
                                            ClientLib=C:\Program Files\Firebird\Firebird_2_5\bin\fbclient.dll;
                                            User=SYSDBA; Password=2625; Names=WIN1251; SqlDialect=3;');

   ibec_UseConnection(DB_NEW);
   for select K.KOD, K.KOD_HC from KLSFCT K where K.KOD=27
   into :id1,:id2
   do
   begin
        ibec_UseConnection(DB_OLD);
        execute statement 'insert into KLSFCT (KOD,KOD_HC)
          values(' + ibec_Cast(id1, __typeString)+','+ ibec_Cast(id2, __typeString) + ')';
   end
    commit;
    ibec_CloseConnection(DB_NEW);
    ibec_CloseConnection(DB_OLD);


  end;


Еще вопрос. Нужно выбрать данные из нескольких баз. Структура баз одинаковая. Базы лежат удаленно(192.168.1.10:D:\install\Full_Convert\GAS_Equip.FDB). Можете подсказать как это сделать ?
Андрей1985
Дата: 11.06.2012 17:55:55
execute ibeblock
as

begin
   id1=0; id2=0;
  
   DB_NEW = ibec_CreateConnection(__ctFirebird, 'DBName="D:\data inv\MOGILEV_NEW\GAS_Equip.FDB";
                                            ClientLib=C:\Program Files\Firebird\Firebird_2_5\bin\fbclient.dll;
                                            User=SYSDBA; Password=2625; Names=WIN1251; SqlDialect=3;');


     ibec_UseConnection(DB_NEW);
  begin

         EXECUTE STATEMENT 'select A.kod from ABON_NEW A' into :KOD;

  end
      commit;
      ibec_CloseConnection(DB_NEW);

  end;

Пишет ошибку. There are no syntax errors...