Russian Qt Forum
Ноябрь 01, 2024, 13:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt ActiveX MS Access  (Прочитано 4481 раз)
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
Потом делать вставку из буфера (предварительно загнав в буфер нужные данные)
Потом сохранять запись....
Записан
GavriiL
Гость
« Ответ #1 : Май 08, 2011, 14:58 »

Да, не удивляйтесь по поводу строки:
Код:
QAxObject *excel = new QAxObject();
Просто сначала экспериментировал с Excel Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.08 секунд. Запросов: 21.