![]() |
#1 |
Участник
|
Работа FireBird(FDB) в AX 2009
Собственно интересуют варианты как можно организовать взаимодействие между таблицами из Fdb базы с аксаптовскими таблицами в обе стороны т е как на запись та и на чтение из обоих баз
Через ODBC или Ole DB какие и ка лучше драйверы поставить на fdb Желательно пример ![]() |
|
![]() |
#2 |
Участник
|
Я когда-то работал через ODBC, но мне только читать из FB базы нужно было. Примеров к сожалению нет, но помню что база была какой-то софтины для таможенных брокеров.
|
|
![]() |
#3 |
Участник
|
Нашёл я ODBC драйвер но но как в в коде написать доступ к fdb не знаю?
|
|
![]() |
#4 |
Участник
|
Если до вечера никто не отпишется, то пришлю пример, дома есть для 3.0.
|
|
![]() |
#5 |
Участник
|
Посмотрите классы BankImport_RU или AddressCodeImport_RU. Там идет импорт из базы, к которой поключаются через ODBC.
|
|
![]() |
#6 |
Участник
|
хорошо б пример
|
|
![]() |
#7 |
Участник
|
PHP код:
|
|
![]() |
#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(); } |
|
![]() |
#9 |
Участник
|
Цитата:
Сообщение от Shirmin Oleg
![]() PHP код:
но будет ли работать такая штука "LP.setDSN("Generators")"; на тех клиентских местах где в Панели управления( Windows) Администрирование\Источники ODBC не прописан DSN(в данном случае Generators) Проверить возможности нет ![]() Как поступить чтоб везде работало? Попробовал разные функции из LP но какую строку писать не знаю внутри т е последовательность Driver Provider ит д |
|
![]() |
#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 |
Administrator
|
Цитата:
![]() В случае с ODBC можно через групповую политику прописать всем нужным товарищам создание двух веточек в реестре HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ с нужными параметрами (конкретные нюансы узнаются у себя на компьютере после создания системного DSN). Но на самом деле - лучше отойти от ODBC если есть такая возможность и сделать другим способом.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: jonny.do (1). |
![]() |
#12 |
Участник
|
Цитата:
Сообщение от sukhanchik
![]() Конечно же нет
![]() В случае с ODBC можно через групповую политику прописать всем нужным товарищам создание двух веточек в реестре HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ с нужными параметрами (конкретные нюансы узнаются у себя на компьютере после создания системного DSN). Но на самом деле - лучше отойти от ODBC если есть такая возможность и сделать другим способом. Отойти от ODBC в принципе можно попробую вариант someOne Может ещё какие варианты будут ? P S Да база Fdb Располагается не локально а сети Последний раз редактировалось Pudd; 11.01.2011 в 17:00. |
|
![]() |
#13 |
Участник
|
Настроить соединение на сервере и на нем же и запускать.
|
|
![]() |
#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. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|