Модераторы: Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Импорт в базу firebird, через блоки IBExpert - execute ibeblock 
:(
    Опции темы
Akella
Дата 20.3.2008, 15:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



вот такой неплохой скрипт найден

Код

execute ibeblock
returns (CustNo integer, Company varchar(100), Addr1 varchar(100))
as
begin
  InCust = 3000;
  OdbcCon = ibec_CreateConnection(__ctODBC, 'DBQ=E:\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




*******************************

http://ibexpert.net/ibe/index.php?n=Doc.ODBCAccess

Код

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


Строку подключения можно взять отсюда
http://www.connectionstrings.com/

Это сообщение отредактировал(а) Akella - 27.10.2008, 19:23
PM MAIL   Вверх
Deniz
Дата 21.3.2008, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Так это вопрос или ...?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
ksili
Дата 21.3.2008, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Я если честно не понимаю, что такое IBE Blocks и Firebird Blocks. Это первый пример их использования. который попался мне на глаза. 
В чём преимущества их использования?

Вообще в IBExpert'е есть ODBC Viewer, через который можно удобно импортировать данные из ODBC источников. Я совсем недавно импортировал из базы на Access. Только вот связи между таблицами не перенеслись. Т.к. переносятся таблицы по одной, а не все базы. Но по-моему это извечная проблема импорта/экспорта


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Deniz
Дата 21.3.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(ksili @  21.3.2008,  10:09 Найти цитируемый пост)
В чём преимущества их использования?
[skiped]
Но по-моему это извечная проблема импорта/экспорта 
так вот как раз и можно, написав скрипт, решить данную проблему.
Только сначала прописываются все таблицы и связи, а потом пишется скрипт импорта.
Т.е. в примере выбираются данные из .mdb, и потом с ними можно сделать все что хочешь.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
ksili
Дата 21.3.2008, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(Deniz @  21.3.2008,  12:56 Найти цитируемый пост)
потом с ними можно сделать все что хочешь

Так я и так могу делать всё что хочу после импорта с помощью ODBC Viewer (таблицу он может создать автоматически или импортировать в существующую таблицу). 
Т.е. что скрипт писать вручную, что связи добавлять посе импорта вручную. А вот если бы связи импортировались автоматически...


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 21.3.2008, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Deniz @  21.3.2008,  06:21 Найти цитируемый пост)
Так это вопрос или ...?

Да нет, просто последнее время видел несколько тем, где народ пытался импортировать данные из dbf или paradox в базу жарптицы, вот и выложил найденный блок. К сожалению нет времени его тестировать.
PM MAIL   Вверх
Magnifico
Дата 22.3.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: нет
Всего: 17



этот скрипт  в эксперте дает такую ошибку

Цитата

An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Function unknown.
IBEC_CREATECONNECTION.


ibeblock это что - плагин какой нибудь или это надо настраивть чтобы работало 
( или это работает в эксперте по умолчанию )


--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
Akella
Дата 22.3.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



мож у тебя старая версия эксперта?
PM MAIL   Вверх
Akella
Дата 22.3.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



вот ещё пример
Код

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=WIN1252; sqldialect=3');
FBDest =
ibec_CreateConnection(__ctFirebird,'DBName="localhost:C:\DB2.FDB";
ClientLib=C:\Program Files\Firebird\Bin\fbclient.dll;
user=SYSDBA; password=masterkey; names=WIN1252; sqldialect=3');
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


Добавлено через 3 минуты и 45 секунд
Нашёл классный документ
Цитата

Top Ten Reasons why you need the
IBExpert VAR License


http://www.hk-software.net/ibexpert.com/co...sons_071129.pdf

Добавлено через 4 минуты и 33 секунды
кстати у FB тоже есть понятие блоков

Добавлено через 6 минут и 51 секунду
Цитата

With EXECUTE IBEBLOCK you will be able to: 

    * Work with different connections within the single IBEBLOCK at the same time. 
    * Move (copy) data from one database to another.
    * Join tables from different databases.
    * Compare data from different databases and synchronize them.
    * Populate a table with test data using random values or values from other tables or even from other databases.
    *  ... and much more.


Добавлено через 10 минут и 14 секунд
Цитата

IBEScript.exe can be used to execute any valid IBExpert script in batch files.

PM MAIL   Вверх
Magnifico
Дата 22.3.2008, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: нет
Всего: 17



да действительно удалил эксперт непонятно где взятый 2 года назад
установил новый все заработало .

Спасибо -  наиполезнейшие скрипты
раньше только   clever component  пользовал.

импорт из акцесс чуть переделал:

Код

execute ibeblock
as
begin
    FBSource = ibec_CreateConnection(__ctODBC, 'DBQ=C:\Files\demo.mdb; DRIVER=Microsoft Access Driver (*.mdb)');
ibec_UseConnection(FBSource);

    FBDestination =
ibec_CreateConnection(__ctFirebird,'DBName="localhost:H:\BASES\clone.FDB";
        ClientLib=D:\Program Files\Firebird\Firebird_2_0\bin\fbclient.dll;
        user=SYSDBA; password=masterkey; names=WIN1251; sqldialect=3');
ibec_UseConnection(FBSource);

        for select CustNo, Company, Addr1 from customer  order by company
                into :CustNo, :Company, :Addr1
        do
        begin
  ibec_UseConnection(FBDestination);
        INSERT INTO CUSTOMER (CustNo, Company, Addr1)
        VALUES (:CustNo, :Company, :Addr1);
  ibec_UseConnection(FBSource);
        suspend;
        end
   ibec_UseConnection(FBDestination);
        commit;
   ibec_CloseConnection(FBSource);
   ibec_CloseConnection(FBDestination);
end


и с эксель тоже работает  только меняем драйвер :

Код

FBSource = ibec_CreateConnection(__ctODBC, 'DBQ=C:\Files\demo.xls; DRIVER=Microsoft Excel Driver (*.xls)');
ibec_UseConnection(FBSource);



--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
Alessias
Дата 17.8.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 26.1.2007

Репутация: нет
Всего: 2



Имеем 2 базы Firebird v1.5.3 в разных городах. Базы идентичны по структуре. Необходимо передавать данные из одной в другую. 
Нашел эту тему, попробовал написать скрипт
(сначала решил протестить в локальной сети)
(извините, полей много, плохо читабельный, но в коде синтаксических ошибок нет)

Код

execute ibeblock
as
begin
FBSrc=ibec_CreateConnection(__ctFirebird,'DBName="localhost:ars_local";
ClientLib=C:\Program Files\Firebird\Firebird_1_5\bin\fbclient.dll;
user=SYSDBA; password=masterkey; names=WIN1251; sqldialect=3');
FBDest=ibec_CreateConnection(__ctFirebird,'DBName="192.168.1.24:ars_local";
ClientLib=C:\Program Files\Firebird\Firebird_1_5\bin\fbclient.dll;
user=SYSDBA; password=masterkey; names=WIN1251; sqldialect=3');
ibec_UseConnection(FbSrc);
for select TK_ID, TK_DATE,dOC_ID,TK_CODE,TK_NUMBER,TK_CONJ,TK_PAS_NAME,
PAS_ID,TK_ORIDEST,TK_ALDATA,TK_FARE_USD,TK_FARE_UAH,TK_TAX_USD,TK_TAX_UAH,
TK_RATE,TK_KOEF,COMM_ID,TK_COMM_NET,TK_COMM_NET_AMOUNT,TK_COMM_PERCENT,
TK_COMM_AMOUNT,TK_COMM_CURRENCY,TK_VAT,TK_TOURCODE,TK_ROUTE,TK_PAY_FORM,
TK_PAY_CURRENCY,TK_PAY_DATE,TK_PAY_AMOUNT,CUST_ID,AGY_ID,BRANCH_ID,
MGR_ID,CTIME,CUSER,MTIME,MUSER,PROV_ID,TK_STATE,TK_TOTAL_USD,TK_TOTAL_UAH,
INV_NUM,TK_REF_PENALTY_USD,TK_REF_PENALTY_UAH,TK_FARE_BASIS,TK_TYPE,ADD1,
ADD2,ADD3,TK_CARRIER,TK_DISC_CURRENCY,TK_DISC_AMOUNT,TK_DISC_NOTE,DISC_ID,
TK_SVC_SCHG_CURRENCY,TK_SVC_SCHG_AMOUNT,TK_BSP,TK_AUD,FIELDSTATE
from tickets
where fieldstate<>'T'
into :TK_ID,:TK_DATE,:DOC_ID,:TK_CODE,:TK_NUMBER,:TK_CONJ,:TK_PAS_NAME,:PAS_ID,:TK_ORIDEST,
:TK_ALDATA,:TK_FARE_USD,:TK_FARE_UAH,:TK_TAX_USD,:TK_TAX_UAH,:TK_RATE,:TK_KOEF,:COMM_ID,
:TK_COMM_NET,:TK_COMM_NET_AMOUNT,:TK_COMM_PERCENT,:TK_COMM_AMOUNT,:TK_COMM_CURRENCY,
:TK_VAT,:TK_TOURCODE,:TK_ROUTE,:TK_PAY_FORM,:TK_PAY_CURRENCY,:TK_PAY_DATE,:TK_PAY_AMOUNT,
:CUST_ID,:AGY_ID,:BRANCH_ID,:MGR_ID,:CTIME,:CUSER,:MTIME,:MUSER,:PROV_ID,:TK_STATE,:TK_TOTAL_USD,
:TK_TOTAL_UAH,:INV_NUM,:TK_REF_PENALTY_USD,:TK_REF_PENALTY_UAH,:TK_FARE_BASIS,:TK_TYPE,
:ADD1,:ADD2,:ADD3,:TK_CARRIER,:TK_DISC_CURRENCY,:TK_DISC_AMOUNT,:TK_DISC_NOTE,:DISC_ID,
:TK_SVC_SCHG_CURRENCY,:TK_SVC_SCHG_AMOUNT,:TK_BSP,:TK_AUD,:FIELDSTATE
do
begin
ibec_UseConnection(FBDest);
INSERT INTO
TICKETS (TK_ID, TK_DATE,dOC_ID,TK_CODE,TK_NUMBER,TK_CONJ,TK_PAS_NAME,
PAS_ID,TK_ORIDEST,TK_ALDATA,TK_FARE_USD,TK_FARE_UAH,TK_TAX_USD,TK_TAX_UAH,
TK_RATE,TK_KOEF,COMM_ID,TK_COMM_NET,TK_COMM_NET_AMOUNT,TK_COMM_PERCENT,
TK_COMM_AMOUNT,TK_COMM_CURRENCY,TK_VAT,TK_TOURCODE,TK_ROUTE,TK_PAY_FORM,
TK_PAY_CURRENCY,TK_PAY_DATE,TK_PAY_AMOUNT,CUST_ID,AGY_ID,BRANCH_ID,
MGR_ID,CTIME,CUSER,MTIME,MUSER,PROV_ID,TK_STATE,TK_TOTAL_USD,TK_TOTAL_UAH,
INV_NUM,TK_REF_PENALTY_USD,TK_REF_PENALTY_UAH,TK_FARE_BASIS,TK_TYPE,ADD1,
ADD2,ADD3,TK_CARRIER,TK_DISC_CURRENCY,TK_DISC_AMOUNT,TK_DISC_NOTE,DISC_ID,
TK_SVC_SCHG_CURRENCY,TK_SVC_SCHG_AMOUNT,TK_BSP,TK_AUD,FIELDSTATE)
VALUES (:TK_ID,:TK_DATE,:DOC_ID,:TK_CODE,:TK_NUMBER,:TK_CONJ,:TK_PAS_NAME,:PAS_ID,:TK_ORIDEST,
:TK_ALDATA,:TK_FARE_USD,:TK_FARE_UAH,:TK_TAX_USD,:TK_TAX_UAH,:TK_RATE,:TK_KOEF,:COMM_ID,
:TK_COMM_NET,:TK_COMM_NET_AMOUNT,:TK_COMM_PERCENT,:TK_COMM_AMOUNT,:TK_COMM_CURRENCY,
:TK_VAT,:TK_TOURCODE,:TK_ROUTE,:TK_PAY_FORM,:TK_PAY_CURRENCY,:TK_PAY_DATE,:TK_PAY_AMOUNT,
:CUST_ID,:AGY_ID,:BRANCH_ID,:MGR_ID,:CTIME,:CUSER,:MTIME,:MUSER,:PROV_ID,:TK_STATE,:TK_TOTAL_USD,
:TK_TOTAL_UAH,:INV_NUM,:TK_REF_PENALTY_USD,:TK_REF_PENALTY_UAH,:TK_FARE_BASIS,:TK_TYPE,
:ADD1,:ADD2,:ADD3,:TK_CARRIER,:TK_DISC_CURRENCY,:TK_DISC_AMOUNT,:TK_DISC_NOTE,:DISC_ID,
:TK_SVC_SCHG_CURRENCY,:TK_SVC_SCHG_AMOUNT,:TK_BSP,:TK_AUD,:FIELDSTATE);
COMMIT;
ibec_UseConnection(FBSrc);
end

ibec_CloseConnection(FBSrc);
ibec_CloseConnection(FBDest);
end


сохранил скрипт в файл,
запускаю IBEScript.exe get.sql -Vlog.log
в результате смотрю лог - 


Executing script: get.sql
(Line: 56) : Executing IBEBlock ...

Error occurred while executing following statement (line 56):
--------  STATEMENT ----------
INSERT INTO
TICKETS (TK_ID, TK_DATE,dOC_ID,TK_CODE,TK_NUMBER,TK_CONJ,TK_PAS_NAME,
PAS_ID,TK_ORIDEST,TK_ALDATA,TK_FARE_USD,TK_FARE_UAH,TK_TAX_USD,TK_TAX_UAH,
TK_RATE,TK_KOEF,COMM_ID,TK_COMM_NET,TK_COMM_NET_AMOUNT,TK_COMM_PERCENT,
TK_COMM_AMOUNT,TK_COMM_CURRENCY,TK_VAT,TK_TOURCODE,TK_ROUTE,TK_PAY_FORM,
TK_PAY_CURRENCY,TK_PAY_DATE,TK_PAY_AMOUNT,CUST_ID,AGY_ID,BRANCH_ID,
MGR_ID,CTIME,CUSER,MTIME,MUSER,PROV_ID,TK_STATE,TK_TOTAL_USD,TK_TOTAL_UAH,
INV_NUM,TK_REF_PENALTY_USD,TK_REF_PENALTY_UAH,TK_FARE_BASIS,TK_TYPE,ADD1,
ADD2,ADD3,TK_CARRIER,TK_DISC_CURRENCY,TK_DISC_AMOUNT,TK_DISC_NOTE,DISC_ID,
TK_SVC_SCHG_CURRENCY,TK_SVC_SCHG_AMOUNT,TK_BSP,TK_AUD,FIELDSTATE)
VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? ,
 ? , ? , ? , ? , ? , ? , ? , ? ,
 ? , ? , ? , ? , ? ,
 ? , ? , ? , ? , ? , ? , ? ,
 ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ,
 ? , ? , ? , ? , ? , ? ,
 ? , ? , ? , ? , ? , ? , ? , ? ,
 ? , ? , ? , ? , ? )

--------  ERROR ----------
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 11, char 19.
1.
Script executed with errors.
Total execution time: 12s 172ms

____________
то есть полученные из одной базы значения не посылаются в другую...
В чем проблем?? Как можно решить?

Это сообщение отредактировал(а) Alessias - 17.8.2008, 13:00
PM MAIL   Вверх
Akella
Дата 17.8.2008, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Код

from tickets
where fieldstate<>'T'
into :TK_ID,:TK_DATE,:DOC_ID,:TK_CODE,:TK_NUMBER,:TK_CONJ,:TK_PAS_NAME,:PAS_ID,:TK_ORIDEST,
:TK_ALDATA,:TK_FARE_USD,:TK_FARE_UAH,:TK_TAX_USD,:TK_TAX_UAH,:TK_RATE,:TK_KOEF,:COMM_ID,
:TK_COMM_NET,:TK_COMM_NET_AMOUNT,:TK_COMM_PERCENT,:TK_COMM_AMOUNT,:TK_COMM_CURRENCY,
:TK_VAT,:TK_TOURCODE,:TK_ROUTE,:TK_PAY_FORM,:TK_PAY_CURRENCY,:TK_PAY_DATE,:TK_PAY_AMOUNT,
:CUST_ID,:AGY_ID,:BRANCH_ID,:MGR_ID,:CTIME,:CUSER,:MTIME,:MUSER,:PROV_ID,:TK_STATE,:TK_TOTAL_USD,
:TK_TOTAL_UAH,:INV_NUM,:TK_REF_PENALTY_USD,:TK_REF_PENALTY_UAH,:TK_FARE_BASIS,:TK_TYPE,
:ADD1,:ADD2,:ADD3,:TK_CARRIER,:TK_DISC_CURRENCY,:TK_DISC_AMOUNT,:TK_DISC_NOTE,:DISC_ID,
:TK_SVC_SCHG_CURRENCY,:TK_SVC_SCHG_AMOUNT,:TK_BSP,:TK_AUD,:FIELDSTATE
do
begin


помоему нужно объявить переменные
PM MAIL   Вверх
Alessias
Дата 23.8.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 26.1.2007

Репутация: нет
Всего: 2



Хорошо, попробую
PM MAIL   Вверх
Alessias
Дата 23.8.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 26.1.2007

Репутация: нет
Всего: 2



На тестовой таблице проверил - вроде работаетsmilesmile
Спасибо.
PM MAIL   Вверх
DVS83
Дата 27.10.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



написал такой скрипт:
Код

execute ibeblock
as
DECLARE VARIABLE D1 DECIMAL(7,2);
DECLARE VARIABLE В2 CHAR(10);
begin
    FBSource = ibec_CreateConnection(__ctODBC, 'DBQ=C:\test.dbf; DRIVER=Microsoft dBase Driver (*.dbf)');
ibec_UseConnection(FBSource);
    FBDestination =
ibec_CreateConnection(__ctFirebird,'DBName="localhost:C:\test.FDB";
        ClientLib=C:\Program Files\Firebird\Firebird_1_5\bin\fbclient.dll;
        user=SYSDBA; password=masterkey; names=WIN1251; sqldialect=3');
ibec_UseConnection(FBSource);
        for select D1, B2 from test
                into : D1, :B2
        do
        begin
  ibec_UseConnection(FBDestination);
        INSERT INTO test (D1,B2)
        VALUES (: D1,:B2);
  ibec_UseConnection(FBSource);
        suspend;
        end
   ibec_UseConnection(FBDestination);
        commit;
   ibec_CloseConnection(FBSource);
   ibec_CloseConnection(FBDestination);
end

выдвет ошибку, что база данных test.dbf не найдена, хотя путь прописан верно???   при нажатии на кнопку ОК появляется окно для выбора файла при этом все файлы доступны только для просмотра, выбор же сделать нельзя. Может кто подскажет в чем может быть проблема?


Это сообщение отредактировал(а) Akella - 27.10.2008, 18:49
PM MAIL   Вверх
Akella
Дата 27.10.2008, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



DVS83, есть кнопка Код, чтобы твоё сообщение было более читабельным



Цитата(DVS83 @  27.10.2008,  18:07 Найти цитируемый пост)
DECLARE VARIABLE В2 CHAR(10);

поправь имя переменной, по моему у тебя там русская буква В

Это сообщение отредактировал(а) Akella - 27.10.2008, 18:56
PM MAIL   Вверх
DVS83
Дата 28.10.2008, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Цитата(Akella @ 27.10.2008,  18:48)
DVS83, есть кнопка Код, чтобы твоё сообщение было более читабельным



Цитата(DVS83 @  27.10.2008,  18:07 Найти цитируемый пост)
DECLARE VARIABLE В2 CHAR(10);

поправь имя переменной, по моему у тебя там русская буква В

здесь я привел условные названия, проблема не в этом...
указал при появлении окна выбора базы вручную путь к базе теперь выдает ошибку:
 Access violation at address 0032BD38 in module 'ibexpert.exe'. Read of address 00000000. 

Это сообщение отредактировал(а) DVS83 - 28.10.2008, 09:20
PM MAIL   Вверх
Akella
Дата 28.10.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Составь нормальный отчёт об ошибке и отправь. В эксперт багтракер даже встроен
PM MAIL   Вверх
opx
Дата 26.6.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



Че-то я никак не догоню как сделать наооборот(экспорт fdb->mdb). Пробовал так:
Код

execute ibeblock
as
begin
    FBDestination = ibec_CreateConnection(__ctODBC, 'DBQ=C:\123\dbExport.mdb; DRIVER=Microsoft Access Driver (*.mdb)');
ibec_UseConnection(FBDestination);

    FBSource =
ibec_CreateConnection(__ctFirebird,'DBName="localhost:C:\FbDatabase.FDB";
        ClientLib=C:\Program Files\Firebird\Firebird_2_1\bin\fbclient.dll;
        user=SYSDBA; password=masterkey; names=WIN1251; sqldialect=3');
ibec_UseConnection(FBSource);

        for select id, name from price_t
                into :id, :name
        do
        begin
  ibec_UseConnection(FBDestination);
        INSERT INTO price (id, name)
        VALUES (:id, :name);
  ibec_UseConnection(FBSource);
        suspend;
        end
   ibec_UseConnection(FBDestination);
        commit;
   ibec_CloseConnection(FBDestination);
   ibec_CloseConnection(FBSource);
end


но не хочет. видимо ошибка в создании временной таблицы. Как же тогда делать?

Это сообщение отредактировал(а) opx - 26.6.2009, 13:27
PM MAIL   Вверх
Akella
Дата 26.6.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(opx @  26.6.2009,  13:26 Найти цитируемый пост)
но не хочет.

сожалею
PM MAIL   Вверх
Akella
Дата 18.3.2010, 12:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



В новой версии от 2010.03.17 появился импорт данных в базу Firebird и Interbase
Импорт в базу Firebird и Interbase
PM MAIL   Вверх
Akella
  Дата 15.6.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Импорт в базу Firebird из CSV средствами IBEBlock`ов IBExpert`а

Код

execute ibeblock
returns(outstr varchar(100))
as
begin
  -- First, let's create a simple CSV-file with some data
  FS = ibec_fs_OpenFile('C:\MyData.csv', __fmCreate);
  if (not FS is null) then
  begin
    s = '1:John:Doe:M';
    ibec_fs_Writeln(FS, s);
    s = '2:Bill:Gates:M';
    ibec_fs_Writeln(FS, s);
    s = '3:Sharon:Stone:F';
    ibec_fs_Writeln(FS, s);
    s = '4:Stephen:King:M';
    ibec_fs_Writeln(FS, s);
    ibec_fs_CloseFile(FS);
  end

  -- If table IBE$$TEST_PEOPLE exists we'll drop it
  if (exists(select rdb$relation_name from rdb$relations where rdb$relation_name = 'IBE$$TEST_PEOPLE')) then
  begin
    s = 'DROP TABLE IBE$$TEST_PEOPLE';
    execute statement s;
    commit;
  end

  -- Let's create a new table that will store the imported data
  s = 'CREATE TABLE IBE$$TEST_PEOPLE (
       ID integer, 
       FIRST_NAME varchar(50),
       LAST_NAME varchar(50),
       SEX varchar(1))';
  execute statement s;
  commit;

  i = 0; -- Just a counter of inserted records
  FS = ibec_fs_OpenFile('C:\MyData.csv', __fmOpenRead);
  if (not FS is null) then
  begin
    while (not ibec_fs_Eof(FS)) do
    begin
      s = ibec_fs_Readln(FS);
      ValCount = ibec_ParseCSVLine(Vals, s, '', ':', __csvEmptyStringAsNull);
      INSERT INTO IBE$$TEST_PEOPLE (ID, FIRST_NAME, LAST_NAME, SEX) VALUES :Vals;
      commit;
      i = i + 1;
    end
    ibec_fs_CloseFile(FS);
  end

  outstr = i || ' records inserted into IBE$$TEST_PEOPLE';
  suspend;
end


Добавлено @ 22:37
Импорт сразу нескольких  файлов, указав путь, тип (расширение) средствами IBEBlock`ов IBExpert`а

Код

set names win1251;
set sql dialect 3;
set clientlib 'C:\Program Files\Firebird\bin\fbclient.dll';

create database 'localhost/3060:D:\allscripts.fdb'
user 'SYSDBA' password 'masterkey'
page_size 8192 default character set WIN1251;

create generator gen_script_id;

create table scripts (
  ID INTEGER NOT NULL PRIMARY KEY,
  FILENAME VARCHAR(2000),
  SCRIPT_TEXT BLOB sub_type text);

create trigger script_bi for scripts
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_script_id, 1);
end;

execute ibeblock
as
begin
  ibec_progress('Searching for script files...');
  files_count = ibec_getfiles(files_list, 'D:\', '*.sql', __gfRecursiveSearch + __gfFullName);

  if (files_count > 0) then
  begin
    i = 0;
    while (i < ibec_high(files_list)) do
    begin
      file_name = files_list[i];
      if (ibec_filesize(file_name) < 10240000) then
      begin
        script_data = ibec_loadfromfile(file_name);
        ibec_progress('Adding script file ' || :file_name);
        insert into scripts (filename, script_text) values (:file_name, :script_data);
        commit;
      end
      i = i + 1;
    end
  end
end;



Добавлено @ 22:41
Пересоздание индексов средствами IBEBlock`ов IBExpert`а

Код

execute ibeblock
returns (info varchar(1000))
as
begin
  i = 0;

  for select i.rdb$index_name, i.rdb$relation_name, i.rdb$unique_flag,
             i.rdb$index_inactive, i.rdb$index_type
      from rdb$indices i
      left join rdb$relation_constraints rc on (i.rdb$index_name = rc.rdb$index_name)
      where (i.rdb$system_flag is null) and (rc.rdb$index_name is null)
      into :IdxName, :IdxRelName, :IdxUnique, :IdxInactive, :IdxType
  do
  begin
    sFields = '';
    for select rdb$field_name from rdb$index_segments
        where rdb$index_name = :IdxName
        order by rdb$field_position
        into :ifields
    do
    begin
      if (sFields <> '') then
        sFields = sFields || ', ';
      sFields = sFields || ibec_formatident(ibec_trim(ifields));
    end

    DropStmt[i] = 'drop index ' || ibec_formatident(ibec_trim(IdxName));
    CreateStmt[i] = 'create ' || ibec_iif(IdxUnique = 1, 'unique ', '') || ibec_iif(IdxType = 1, 'descending ', '') ||
                    ' index ' || ibec_formatident(ibec_trim(IdxName)) ||
                    ' on ' || ibec_formatident(ibec_trim(IdxRelName)) || ' (' || sFields || ')';

    i = i + 1;
  end

  i = 0;
  while (i <= ibec_high(DropStmt)) do
  begin
    s = DropStmt[i];
    info = s;
    suspend;
    ibec_progress(info);
    execute statement :s;
    commit;
  
    s = CreateStmt[i];
    info = s;
    suspend;
    ibec_progress(info);
    execute statement :s;
    commit;

    i = i + 1;
  end
end



Добавлено @ 22:42
Второй способ пересоздания индексов
Код

execute ibeblock
returns (info varchar(1000))
as
begin
  select i.rdb$index_name, i.rdb$relation_name, i.rdb$unique_flag,
         i.rdb$index_inactive, i.rdb$index_type
  from rdb$indices i
  left join rdb$relation_constraints rc on (i.rdb$index_name = rc.rdb$index_name)
  where (i.rdb$system_flag is null) and (rc.rdb$index_name is null)
  as dataset ds_indices;

  while (not ibec_ds_eof(ds_indices)) do
  begin
    IdxName = ibec_trim(ibec_ds_getfield(ds_indices,0));
    IdxRelName = ibec_trim(ibec_ds_getfield(ds_indices,1));
    IdxUnique = ibec_ds_getfield(ds_indices,2);
    IdxInactive = ibec_ds_getfield(ds_indices,3);
    IdxType = ibec_ds_getfield(ds_indices,4);

    sFields = '';
    for select rdb$field_name from rdb$index_segments
        where rdb$index_name = :IdxName
        order by rdb$field_position
        into :IdxField
    do
    begin
      IdxField = ibec_trim(IdxField);
      if (sFields <> '') then
        sFields = sFields || ', ';
      sFields = sFields || ibec_formatident(IdxField);
    end

    DropStmt   = 'drop index ' || ibec_formatident(IdxName);
    CreateStmt = 'create ' || ibec_iif(IdxUnique = 1, 'unique ', '') || ibec_iif(IdxType = 1, 'descending ', '') ||
                 ' index ' || ibec_formatident(IdxName) ||
                 ' on ' || ibec_formatident(IdxRelName) || ' (' || sFields || ')';

    info = DropStmt;
    suspend;
    ibec_progress(info);
    execute statement :DropStmt;
    commit;
  
    info = CreateStmt;
    suspend;
    ibec_progress(info);
    execute statement :CreateStmt;
    commit;

    ibec_ds_next(ds_indices);
  end

  close dataset ds_indices;
end


/Скрипты не мои. Найдены на просторах интернета/
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.2108 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.