AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 27.05.2010, 16:45   #1  
Pudd ist offline
Pudd
Участник
 
34 / 10 (1) +
Registriert seit: 31.03.2010
Работа FireBird(FDB) в AX 2009
Собственно интересуют варианты как можно организовать взаимодействие между таблицами из Fdb базы с аксаптовскими таблицами в обе стороны т е как на запись та и на чтение из обоих баз
Через ODBC или Ole DB какие и ка лучше драйверы поставить на fdb
Желательно пример
Alt 27.05.2010, 17:00   #2  
greench ist offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Registriert seit: 12.07.2007
Ort: Киев
Я когда-то работал через ODBC, но мне только читать из FB базы нужно было. Примеров к сожалению нет, но помню что база была какой-то софтины для таможенных брокеров.
Alt 28.05.2010, 10:02   #3  
Pudd ist offline
Pudd
Участник
 
34 / 10 (1) +
Registriert seit: 31.03.2010
Нашёл я ODBC драйвер но но как в в коде написать доступ к fdb не знаю?
Alt 28.05.2010, 12:47   #4  
greench ist offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Registriert seit: 12.07.2007
Ort: Киев
Если до вечера никто не отпишется, то пришлю пример, дома есть для 3.0.
Alt 28.05.2010, 12:56   #5  
greench ist offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Registriert seit: 12.07.2007
Ort: Киев
Посмотрите классы BankImport_RU или AddressCodeImport_RU. Там идет импорт из базы, к которой поключаются через ODBC.
Alt 28.05.2010, 14:10   #6  
Pudd ist offline
Pudd
Участник
 
34 / 10 (1) +
Registriert seit: 31.03.2010
хорошо б пример
Alt 28.05.2010, 16:38   #7  
Shirmin Oleg ist offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Registriert seit: 26.03.2004
PHP-Code:
  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));  
    } 
Alt 01.06.2010, 09:33   #8  
someOne ist offline
someOne
Участник
Benutzerbild von someOne
 
174 / 432 (15) +++++++
Registriert seit: 11.12.2008
Ort: Москва
Проводили эксперименты на эту тему. Вот отрывки кода, который работал. Если причесать немного - то в общем вполне работоспособно.
Для работы этого, насколько помнится, необходимо предварительно установить драйверы (там их 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();
}
Alt 11.01.2011, 15:15   #9  
Pudd ist offline
Pudd
Участник
 
34 / 10 (1) +
Registriert seit: 31.03.2010
Zitat:
Zitat von Shirmin Oleg Beitrag anzeigen
PHP-Code:
  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 ит д
Alt 11.01.2011, 15:43   #10  
someOne ist offline
someOne
Участник
Benutzerbild von someOne
 
174 / 432 (15) +++++++
Registriert seit: 11.12.2008
Ort: Москва
На вашем месте я бы не стал использовать 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();
    }
}
Alt 11.01.2011, 16:43   #11  
sukhanchik ist offline
sukhanchik
Administrator
Benutzerbild von sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.343 / 3563 (125) ++++++++++
Registriert seit: 13.06.2004
Ort: Москва
Zitat:
Zitat von Pudd Beitrag anzeigen
но будет ли работать такая штука "LP.setDSN("Generators")";
на тех клиентских местах где в Панели управления( Windows) Администрирование\Источники ODBC не прописан DSN(в данном случае Generators)
Конечно же нет
Zitat:
Zitat von Pudd Beitrag anzeigen
Как поступить чтоб везде работало?
В случае с ODBC можно через групповую политику прописать всем нужным товарищам создание двух веточек в реестре HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ с нужными параметрами (конкретные нюансы узнаются у себя на компьютере после создания системного DSN).
Но на самом деле - лучше отойти от ODBC если есть такая возможность и сделать другим способом.
__________________
Возможно сделать все. Вопрос времени
This post has been rated by: jonny.do (1).
Alt 11.01.2011, 16:57   #12  
Pudd ist offline
Pudd
Участник
 
34 / 10 (1) +
Registriert seit: 31.03.2010
Zitat:
Zitat von sukhanchik Beitrag anzeigen
Конечно же нет

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

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

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

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

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

Geändert von jonny.do (05.06.2020 um 16:58 Uhr)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 06:21 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.