Коллеги, приветствую, столкнулся с проблемой, два дня копался, пока ничего не получилось.
У меня цель, научиться из своего приложения манипулировать окнами и контролами в 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
Потом делать вставку из буфера (предварительно загнав в буфер нужные данные)
Потом сохранять запись....