Показать сообщение отдельно
Старый 11.01.2011, 15:43   #10  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (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();
    }
}