Показать сообщение отдельно
Старый 01.06.2010, 09:33   #8  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (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();
}