Russian Qt Forum

Qt => ActiveX => Тема начата: GavriiL от Май 08, 2011, 14:29



Название: Qt ActiveX MS Access
Отправлено: GavriiL от Май 08, 2011, 14:29
Коллеги, приветствую, столкнулся с проблемой, два дня копался, пока ничего не получилось.
У меня цель, научиться из своего приложения манипулировать окнами и контролами в MS Access.

В частности:
  • Нужно открыть окно, перевести его в режим добавления записи (это вообщем то легко сделать через DoCmd).
  • Заполнить поля на форме;
  • Отдать команду - сохранить запись.

Собственно, когда пытаюсь добраться до формы, всё валится.
Код сейчас вот такой:
Код:
    QAxObject *excel = new QAxObject();
    excel->disableClassInfo();
    excel->setControl("{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}&"); // Поу сути, это Access.Application, но мне нужно именно так, чтобы подключиться к уже открытому окну (мне нужно открыть окно от имени определённого пользователя

 // Данный код открывает файл mdw (файл рабочей группы) и открывает базу данных
    QVariantList param;
    param << QString("c:\\tmp\\paydb\\paydb.mdb") << bool(false);
    excel->dynamicCall("SetDefaultWorkgroupFile(QString)", QString("c:\\tmp\\paydb\\PAYMENT.MDW"));
    excel->dynamicCall("OpenCurrentDatabase(QString, bool, QString)", param);

// Получаю указатель на свойство Формы (коллекция)
    QAxObject *f = excel->querySubObject("Forms");

// По идее, получаю указатель на определённую форму, в данном случае форма с именем Warning
    QAxObject *f0 = f->querySubObject("Item(QVariant)", "Warning");

// Далее, по хорошему, мне нужно получить информацию о том, как работать с данным объектом

    f0->generateDocumentation();
// И вот тут я получаю Segmentation fault.
// В консоль ещё вываливается следующее RTTI symbol not found for class 'QAxObject'
На первый взгляд, у меня сейчас предположение, что рулить формами Access через ActiveX нельзя.

Я прав? Или у кого то данная задача была решена?

В целом, я бы хотел, конечно, сделать красивое решение, но, вместо этого, мне пока видется полурешение...
Открывать форму командой DoCmd
Потом делать вставку из буфера (предварительно загнав в буфер нужные данные)
Потом сохранять запись....


Название: Re: Qt ActiveX MS Access
Отправлено: GavriiL от Май 08, 2011, 14:58
Да, не удивляйтесь по поводу строки:
Код:
QAxObject *excel = new QAxObject();
Просто сначала экспериментировал с Excel :)