27.05.2010, 16:45 | #1 |
Участник
|
Работа FireBird(FDB) в AX 2009
Собственно интересуют варианты как можно организовать взаимодействие между таблицами из Fdb базы с аксаптовскими таблицами в обе стороны т е как на запись та и на чтение из обоих баз
Через ODBC или Ole DB какие и ка лучше драйверы поставить на fdb Желательно пример |
|
27.05.2010, 17:00 | #2 |
Участник
|
Я когда-то работал через ODBC, но мне только читать из FB базы нужно было. Примеров к сожалению нет, но помню что база была какой-то софтины для таможенных брокеров.
|
|
28.05.2010, 10:02 | #3 |
Участник
|
Нашёл я ODBC драйвер но но как в в коде написать доступ к fdb не знаю?
|
|
28.05.2010, 12:47 | #4 |
Участник
|
Если до вечера никто не отпишется, то пришлю пример, дома есть для 3.0.
|
|
28.05.2010, 12:56 | #5 |
Участник
|
Посмотрите классы BankImport_RU или AddressCodeImport_RU. Там идет импорт из базы, к которой поключаются через ODBC.
|
|
28.05.2010, 14:10 | #6 |
Участник
|
хорошо б пример
|
|
28.05.2010, 16:38 | #7 |
Участник
|
PHP код:
|
|
01.06.2010, 09:33 | #8 |
Участник
|
Проводили эксперименты на эту тему. Вот отрывки кода, который работал. Если причесать немного - то в общем вполне работоспособно.
Для работы этого, насколько помнится, необходимо предварительно установить драйверы (там их 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 |
Участник
|
Цитата:
Сообщение от Shirmin Oleg
PHP код:
но будет ли работать такая штука "LP.setDSN("Generators")"; на тех клиентских местах где в Панели управления( Windows) Администрирование\Источники ODBC не прописан DSN(в данном случае Generators) Проверить возможности нет Как поступить чтоб везде работало? Попробовал разные функции из LP но какую строку писать не знаю внутри т е последовательность Driver Provider ит д |
|
11.01.2011, 15:43 | #10 |
Участник
|
На вашем месте я бы не стал использовать 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 |
Administrator
|
Цитата:
В случае с ODBC можно через групповую политику прописать всем нужным товарищам создание двух веточек в реестре HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ с нужными параметрами (конкретные нюансы узнаются у себя на компьютере после создания системного DSN). Но на самом деле - лучше отойти от ODBC если есть такая возможность и сделать другим способом.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: jonny.do (1). |
11.01.2011, 16:57 | #12 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
Настроить соединение на сервере и на нем же и запускать.
|
|
05.06.2020, 16:55 | #14 |
Участник
|
Пытаюсь воскресить динозавра.
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. |
|
|
|