Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert / 13 сообщений из 13, страница 1 из 1
19.11.2015, 02:17
    #39107295
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
FB 2.5.1
IBExpert 2015.11.17.1
Win XP Pro 32
MS Access любой версии
--------------------------------------

Хочу понять можно-ли в IBEBlock (IBEScript) проходить по таблицам базы FB и вставлять их данные в целевые таблицы MS Access?

Судя по коду, который нашел на ibexpert.net , надежда есть:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
execute ibeblock
returns (CustNo integer, Company varchar(100), Addr1 varchar(100))

    as
    begin
    InCust = 3000;
    OdbcCon = ibec_CreateConnection(__ctODBC, 'DBQ=D:\Delphi5\CMP\mODBC\DB\demo.mdb;DRIVER=Microsoft Access Driver (*.mdb)');
    ibec_UseConnection(OdbcCon);

    execute statement 'select Company from customer where CustNo = 4312' into :MyCust;

    for select CustNo, Company, Addr1 from customer
       where CustNo > :InCust
       order by company
       into :CustNo, :Company, :Addr1
    do
    begin
       suspend;
    end
    ibec_CloseConnection(OdbcCon);
 end



Так как опыта написания блоков у меня нет, то подобные задачи раньше я решал через создание клиента в Delphi, который перекидывал данные из одной базы в другую. Через IDE конечно решение можно сделать гибким и с кучей примочек и кнопок.
Но в данном случае, если это конечно возможно, я бы хотел попробовать решить эту задачу средствами IBExpert, так как перед выгрузкой данных на стороне FB нужно запустить много запросов для кэширования итоговых таблиц.

Вдруг кто решал уже успешно подобную задачу и есть пример успешно работающего кода IBEBlock?

Буду признателен за пример, а то велосипед изобретать не очень хочется. )
...
Рейтинг: 0 / 0
19.11.2015, 06:57
    #39107327
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
Все. Сам разобрался.

Вот пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
execute ibeblock
 as
 begin

   FBSrc  = ibec_CreateConnection(__ctFirebird,'DBName="localhost:C:\DB1.FDB";
   ClientLib=C:\Program Files\Firebird\Bin\fbclient.dll;
   user=SYSDBA; password=masterkey; names=WIN1251; sqldialect=3');

   FBDest = ibec_CreateConnection(__ctODBC,'DBQ=C:\bsk.empty.test.mdb;DRIVER=Microsoft Access Driver (*.mdb)');

   ibec_UseConnection(FbSrc);

   for select CustNo, Company, Addr1 from customer order by company into :CustNo, :Company,
     :Addr1
   do
   begin
      use FBDest;
      INSERT INTO CUSTOMER (CustNo, Company, Addr1) VALUES (:CustNo, :Company, :Addr1);
      use FBSrc;
   end
   use FBDest;
   COMMIT;
   ibec_CloseConnection(FBSrc);
   ibec_CloseConnection(FBDest);
 end



Правда появились новые вопросы!

1. Как запускать IBEBlock с кириллическими именами полей таблиц Access?
Если из окна отладчика (в режиме отладки) - все хорошо.
Если из списка блоков по F9 - ругается на абракадабру в которую превращаются имена после принудительного преобразования в UTF-8:


2. Как в поля Access типа Date запихивать значение null?
Я временно(надеюсь что существует более прямое решение) эту задачу решил так:
сохраняю данные из FB в строковой переменной, проверяя в читающем запросе дату на FireBird'овское значение null:
Код: sql
1.
2.
3.
4.
5.
6.
7.
TextDate Varchar(20);
...
Select
    IIF( DateField is null, 'NULL', date_to_str( DateField, '%d.%m.%y' )
FROM TABLE_FB
INTO 
   :TextDate;


а в пишущем запросе проверяю уже строку и вставляю либо Access'овский вариант NULL, либо отформатированную под дату строку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO TABLE_ACCESS
  (
      DateField
  )
VALUES
  (
      IIF( :TextDate = 'NULL', NULL, :TextDate ) 
  )
...
Рейтинг: 0 / 0
19.11.2015, 07:16
    #39107330
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
nofate2009,

1. Похоже на баг.
2. Тебе лучше знать, как засовывать NULL в Access.

Присылай тестовые базы, fb и access, тогда смогу проверить и, возможно, поправить.
...
Рейтинг: 0 / 0
19.11.2015, 07:31
    #39107333
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
С кодировкой кириллических имен вроде бы победилось.
Пошаманил копипастом из Notepad++ с преобразованием текста в нем.
И заметил, что при копировании текста с включенной русской раскладкой клавиатуры и последующей его вставкой в целевой редактор, кириллические имена сохраняются корректно. Или наоборот...
В общем ничего нового - просто хореография с бубном )
...
Рейтинг: 0 / 0
19.11.2015, 07:56
    #39107342
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
IBExpert,

Вот простой пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
execute ibeblock
returns (
            FieldDate  Date
        )

    as
    begin

        AccessDest = ibec_CreateConnection(__ctODBC,     'DBQ=C:\test.mdb;DRIVER=Microsoft Access Driver (*.mdb)');

        FieldDate = null;
        ibec_UseConnection(AccessDest);

        INSERT INTO T_TEST
                  (
                   AccessDateField
                   )
               Values
                  (
                   :FieldDate
                  );

       COMMIT;

       ibec_CloseConnection(AccessDest);

 end



Вот тестовая база Access к этому примеру.

У меня итог работы блока выглядит так:


Модератор: Тема перенесена из форума "Firebird, InterBase".
...
Рейтинг: 0 / 0
19.11.2015, 09:39
    #39107390
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
nofate2009,

С null'ами вроде разобрался. Проверь в свежем билде.
...
Рейтинг: 0 / 0
19.11.2015, 11:15
    #39107504
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
IBExpert,
да вы просто волшебник!!!

Все работает теперь без костылей )))
---------------------------------------------

Может быть тогда получится и с кодировкой в блоках разобраться?

Вот код тестового блока:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
execute ibeblock
returns (
            FieldText  Varchar(255)
        )

    as
    begin

        AccessDest = ibec_CreateConnection(__ctODBC,     'DBQ=C:\test.mdb;DRIVER=Microsoft Access Driver (*.mdb)');

        FieldText  = 'любой текст';
        ibec_UseConnection(AccessDest);

        INSERT INTO "Тестовая таблица"
                  (
                   "Текстовое значение"
                   )
               Values
                  (
                   :FieldText
                  );
         Suspend;
       COMMIT;

       ibec_CloseConnection(AccessDest);

 end



Вот тестовая база Access для него.

Если запускать блок из контекстного меню блоков любой FB-Базы (Вкладка IBExpert "Базы"), то все замечательно:


Но, если создать блок ровно с таким же кодом на вкладке IBExpert "Блоки", то при запуске его из контекстного меню (или по F9), вижу следующую картинку:
...
Рейтинг: 0 / 0
19.11.2015, 11:58
    #39107564
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
IBExpert,
поторопился я вас хвалить )


С null вроде бы решилось. Но завалилось все остальное!
IBEBlock теперь вместо строковых и целочисленных значений забивает поля базы Access нулями!

Это видно даже на последнем тестовом примере с кириллическими именами объектов базы Access.

Вот итог "успешной" работы блока:


- Везде "0", вместо "любой текст".

Думаю такой билд нужно срочно откатить!
...
Рейтинг: 0 / 0
19.11.2015, 12:25
    #39107601
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
nofate2009Думаю такой билд нужно срочно откатить!

Да прям, эти фичи полтора пользователя используют.
Пойду погуляю, потом разберусь.
...
Рейтинг: 0 / 0
19.11.2015, 12:28
    #39107604
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
nofate2009- Везде "0", вместо "любой текст".

Вообще, там только обработка пустых значений изменилась, все остальное осталось как прежде.
Предыдущая версия разве как-то иначе тот же блок отрабатывает, если значение не пустое?
...
Рейтинг: 0 / 0
19.11.2015, 13:05
    #39107656
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
IBExpert,
да, до этого я полностью написал блок, который заливал селект из FB в Access. Почти 30 полей и 3000 записей.
Раз 20 успешно его прокатал.

После обновы блок стал падать на первой-же записи при попытках забить поля нулями.
Сейчас доеду до дома и попробую на другом компе запустить этот блок.
Вдруг дело в клиентской машине.
...
Рейтинг: 0 / 0
19.11.2015, 13:57
    #39107743
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
Мой косяк был. Исправил.
...
Рейтинг: 0 / 0
19.11.2015, 16:53
    #39108002
nofate2009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert
IBExpert,
все замечательно!

Огромное спасибо!
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Insert в mdb-файл (MS Access) данных из FireBird средствами IBExpert / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]