AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.05.2010, 16:45   #1  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
Работа FireBird(FDB) в AX 2009
Собственно интересуют варианты как можно организовать взаимодействие между таблицами из Fdb базы с аксаптовскими таблицами в обе стороны т е как на запись та и на чтение из обоих баз
Через ODBC или Ole DB какие и ка лучше драйверы поставить на fdb
Желательно пример
Старый 27.05.2010, 17:00   #2  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Я когда-то работал через ODBC, но мне только читать из FB базы нужно было. Примеров к сожалению нет, но помню что база была какой-то софтины для таможенных брокеров.
Старый 28.05.2010, 10:02   #3  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
Нашёл я ODBC драйвер но но как в в коде написать доступ к fdb не знаю?
Старый 28.05.2010, 12:47   #4  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Если до вечера никто не отпишется, то пришлю пример, дома есть для 3.0.
Старый 28.05.2010, 12:56   #5  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Посмотрите классы BankImport_RU или AddressCodeImport_RU. Там идет импорт из базы, к которой поключаются через ODBC.
Старый 28.05.2010, 14:10   #6  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
хорошо б пример
Старый 28.05.2010, 16:38   #7  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
PHP код:
  ODBCConnection OC;
  
LoginProperty  LP;
  
Statement      St;
  
ResultSet      rs;
  
str            sql "select get_command_id()";
  ;
  
LP = new LoginProperty();
  
LP.setDSN("Generators"); // имя соединения в system DSN
  
OC = new ODBCConnection(LP);
  
St OC.createStatement();
  
rs st.executeQuery(sql);

  while(
rs.next())
    {
      
info(rs.getString(1));  
    } 
Старый 01.06.2010, 09:33   #8  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Проводили эксперименты на эту тему. Вот отрывки кода, который работал. Если причесать немного - то в общем вполне работоспособно.
Для работы этого, насколько помнится, необходимо предварительно установить драйверы (там их 2 типа, ясно из названий. Работали оба).
Но в итоге остановились на использовании низкоуровневых функций клиентской библиотеки gds32.dll (Пришлось повозится с месяц с их описанием).
Кстати, почему бы не попробовать использовать .NET правайдер для FB ? В ax2009 с этим вроде бы без проблем ?
X++:
static void access_2interbase(Args _args)
{
    CCADOConnection cn = new CCADOConnection();
    CCADOCommand command = new CCADOCommand();
    CCADORecordset rs = new CCADORecordset();
    CCADORecordset rs1 = new CCADORecordset();
    int k;
    DSOConnection cn = new DSOConnection();
    DSOCommand    command = new DSOCommand();
    DSORecordset  rs = new DSORecordset();
    DSOFields     fields;
    DSO_Recordset d_rs;
    InvenTtable inventTable;
    ;
    cn.connection().open(strfmt("DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=K:\\Data\\base.gdb"));
    cn.open(strfmt("DATABASE=G:\\Data\\base.gdb;DIALECT=3;DRIVER=Gemini InterBase ODBC Driver 2.0;OPTIONS=1;PWD=masterkey;PROTOCOL=1;UID=SYSDBA;VERSION=6' "));
    command.setActiveConnection(cn);
 
    command.commandText("update goods set cod = 4 where cod = '3'");
    rs = command.execute();
 
    command.activeConnection(cn);
    command.commandText("select * from goodsgroups");
    rs = command.execute();
    while (!rs.eof())
    {
        info(chi_str(rs.fields().itemName("id").value()));
        info(chi_str(rs.fields().itemName("name").value()));
        info(chi_str(rs.fields().itemName("description").value()));
        rs.fields().itemI
        rs.recordSet().Update(2, "aaaa");
        rs.moveNext();
        k ++;
        if (k==10)
            break;
    }
// insert
    command.commandText("insert into managers (ID,NAME) VALUES ('2','ccc')");
    rs = command.execute();
    d_rs = cn.Execute("select * from goods",, 0);
 
    d_rs.setActiveConnection(cn);
    d_rs = cn.Execute("select * from goods", null, 0);
    d_rs.MoveFirst();
    d_rs.Update(
    !rs.eof())
    {
        info(chi_str(rs.fields().itemName("id").value()));
        info(chi_str(rs.fields().itemName("id").value()) + "\t" + chi_str(rs.fields().itemName("name").value()));
        info(chi_str(rs.fields().itemName("id").value()) + "\t" + chi_str(rs.fields().itemName("description").value()));
        command.commandType();
        //dig DSORecordset
        rs.moveNext();
        k ++;
        if (k==10)
            break;
    }
 
    while select ItemId, ItemName from inventTable
    {
        command.commandText("insert into table1 (COD,NAME) VALUES " +
                            "('"   + inventTable.ItemId +
                            "', '" + str2str(inventTable.ItemName) + "')");
        rs = command.execute();
    }
    info(time2str(timenow(),0,0) + " end");
    cn.close();
}
Старый 11.01.2011, 15:15   #9  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
PHP код:
  ODBCConnection OC;
  
LoginProperty  LP;
  
Statement      St;
  
ResultSet      rs;
  
str            sql "select get_command_id()";
  ;
  
LP = new LoginProperty();
  
LP.setDSN("Generators"); // имя соединения в system DSN
  
OC = new ODBCConnection(LP);
  
St OC.createStatement();
  
rs st.executeQuery(sql);

  while(
rs.next())
    {
      
info(rs.getString(1));  
    } 
За основу взяв этот пример, сделал вроде все нормально,
но будет ли работать такая штука "LP.setDSN("Generators")";
на тех клиентских местах где в Панели управления( Windows) Администрирование\Источники ODBC не прописан DSN(в данном случае Generators) Проверить возможности нет
Как поступить чтоб везде работало?
Попробовал разные функции из LP но какую строку писать не знаю внутри
т е последовательность Driver Provider ит д
Старый 11.01.2011, 15:43   #10  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
На вашем месте я бы не стал использовать odbc.
Из своего опыта: odbc (если подключение идет не к источнику данных Microsoft) - вещь глючная, тормозная, не надежная.

В Ax2009 использовал Net для подключения к FB. Все летает! Кроме того гораздо больше возможностей по управлению транзакциями, метаданными и т.п.

И еще:
- этот код работает и на серверной и на клиентской части, нужно лишь установить NET драйвер FB
- Никаких заморочек с настройкой DSN

Вот пример :
X++:
static void Job34(Args _args)
{
    FirebirdSql.Data.FirebirdClient.FbConnection    connection;
    FirebirdSql.Data.FirebirdClient.FbCommand       command;
    FirebirdSql.Data.FirebirdClient.FbDataReader    dataReader;
    str                     sql;
    str                     connectionString;
    InteropPermission   dllPermission = new InteropPermission(InteropKind::ClrInterop);

    Date netDate(UtcDateTime _utcDateTime)
    {
        return DateTimeUtil::date(_utcDateTime);
    }
    real netDouble(real _value)
    {
        return _value;
    }
    

    ;
    dllPermission.assert();

    connectionString = strFmt("User=%1;Password=%2;DataSource=%3;Port=3050;Database=%4;Charset=WIN1251;Dialect=3;ServerTyp=0",
            "UserLogin",
            "UserPassword",
            "ServerAddres",
            "Filename");

    connection = new FirebirdSql.Data.FirebirdClient.FbConnection(connectionString);

    connection.Open();

    if (connection.get_State() == System.Data.ConnectionState::Open)
    {
        sql = "select * from mytable";

        command = new FirebirdSql.Data.FirebirdClient.FbCommand(sql, connection);
        command.set_Transaction(connection.BeginTransaction(System.Data.IsolationLevel::ReadCommitted));

        dataReader = command.ExecuteReader();

        while (chi_NetBoolean(dataReader.Read()) == true)
        {
            // 0..3 - эно номер стобца в результате запроса, можно обратится и по имени слобца в принципе..
            print netDate(dataReader.GetDateTime(0));
            print dataReader.GetString(1);
            print dataReader.GetInt32(2);
            print netDouble(dataReader.GetDouble(3));
        }

        dataReader.Close();

        connection.Close();
    }
}
Старый 11.01.2011, 16:43   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Pudd Посмотреть сообщение
но будет ли работать такая штука "LP.setDSN("Generators")";
на тех клиентских местах где в Панели управления( Windows) Администрирование\Источники ODBC не прописан DSN(в данном случае Generators)
Конечно же нет
Цитата:
Сообщение от Pudd Посмотреть сообщение
Как поступить чтоб везде работало?
В случае с ODBC можно через групповую политику прописать всем нужным товарищам создание двух веточек в реестре HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ с нужными параметрами (конкретные нюансы узнаются у себя на компьютере после создания системного DSN).
Но на самом деле - лучше отойти от ODBC если есть такая возможность и сделать другим способом.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: jonny.do (1).
Старый 11.01.2011, 16:57   #12  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Конечно же нет

В случае с ODBC можно через групповую политику прописать всем нужным товарищам создание двух веточек в реестре HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ с нужными параметрами (конкретные нюансы узнаются у себя на компьютере после создания системного DSN).
Но на самом деле - лучше отойти от ODBC если есть такая возможность и сделать другим способом.
Прописывать в реестре чтот это не вариант т к у кого конкретно это будет работать я не знаю, т е надо чтоб работало у всех
Отойти от ODBC в принципе можно
попробую вариант someOne
Может ещё какие варианты будут ?

P S Да база Fdb Располагается не локально а сети

Последний раз редактировалось Pudd; 11.01.2011 в 17:00.
Старый 11.01.2011, 18:46   #13  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от Pudd Посмотреть сообщение
но будет ли работать такая штука "LP.setDSN("Generators")";
на тех клиентских местах где в Панели управления( Windows) Администрирование\Источники ODBC не прописан DSN(в данном случае Generators)
Как поступить чтоб везде работало?
Настроить соединение на сервере и на нем же и запускать.
Старый 05.06.2020, 16:55   #14  
jonny.do is offline
jonny.do
Участник
 
7 / 11 (1) +
Регистрация: 14.02.2018
Пытаюсь воскресить динозавра.
Ax 2009.
FirebirdClient под .NET 3.5(https://sourceforge.net/projects/fir...rovider/2.5.2/)

При попытке заюзать библиотеку вываливается синтаксическая ошибка при компиляции на пространстве имен .Data:
DataFirebirdSql.Data.FirebirdClient.FbCommand
После Data подстановка отваливается собственно...

Не в курсе в чем может быть дело?

Последний раз редактировалось jonny.do; 05.06.2020 в 16:58.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mbsturk: Ax 2009 Rollup 4 Version Checker Blog bot DAX Blogs 0 29.04.2010 17:05
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
gatesasbait: Dynamics AX 2009 SSRS and SSAS Integration Tips Blog bot DAX Blogs 3 09.07.2009 13:07
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:16.