Название: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: Zmeishe от Сентябрь 09, 2009, 09:52 Linux Mandriva 2007
Qt-4.5.1 доп пакеты libunixODBC1-2.2.12-2mdv2007 libunixODBC1-devel-2.2.12-2mdv2007 unixODBC-2.2.12-2mdv2007 mdbtools собран из сырцов от Mandriva 2008 "mdbtools-0.6-0.20060524.2mdv2008.0.src.rpm" Qt собрана с ключём -plugin-sql-odbc db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName("MDB"); db.open(); ругается на то, что отсутствует DSN в файле $HOME/.odbc.ini Прописываю в файле $HOME/.odbc.ini следующую секцию [MDB] Description = MS Access file Driver = /usr/local/lib/libmdbodbc.so Database = /home/dm/work/address.mdb после db.open(); программа валится с ошибкой сегментации Через консоль проверяю работоспособность unixODBC и mdbtools [dm@zmeishe]$ /usr/bin/isql MDB SQL> select * from streets ...выдаёт содержимое таблицы... SQLRowCount returns 425 425 rows fetched SQL> quit Всё работает. Почему через Qt вылетает ? Что ещё нужно прописать ? Где ? demos/sqlbrowser - тоже вылетает Кстати, QODBC с базой IBASE работает великолепно. Название: Re: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: KADABRA от Сентябрь 09, 2009, 10:04 Цитировать Почему через Qt вылетает ? На какой строке вылетает?Название: Re: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: Zmeishe от Сентябрь 09, 2009, 10:25 Вылетает непосредственно на db.open();
Название: Re: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: KADABRA от Сентябрь 09, 2009, 14:04 Вылетает непосредственно на db.open(); А внутри open, если отладить?Название: Re: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: Zmeishe от Сентябрь 09, 2009, 14:58 Попробовал.
Показал, что вылетает на SQLGetInfo в этом куске кода файла qsql_odbc.cpp Код: void QODBCDriverPrivate::checkSchemaUsage() Название: Re: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: KADABRA от Сентябрь 10, 2009, 10:46 Цитировать Показал, что вылетает на SQLGetInfo в этом куске кода файла qsql_odbc.cpp Какое значение hDbc при этом?Можно попробовать обновить unixODBC до последней версии - что-то там поправили с SQLGetInfo. Название: Re: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: Zmeishe от Сентябрь 10, 2009, 12:48 Обновил до unixODBC-2.2.14 не помогло.
Валится в том же месте. hDbc имеет значение адреса 0x8261fb0 типа SQLHANLE Название: Re: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: Zmeishe от Сентябрь 10, 2009, 13:08 Дело в следующем:
Для Qt последний параметр нах не нужен в вызове этой функции. SQLGetInfo(hDbc, SQL_SCHEMA_USAGE, (SQLPOINTER) &val, sizeof(val), NULL); А в пакете mdbtools в файле odbc.c в реализации SQLGetInfo не проверяя его на NULL берут разадресовывают и присваивают значение. Усё, ошибка сегментирования. Щас поправлю за них. Название: Re: unixODBC + mdbtools для работы с MS-Access в Linux Отправлено: Zmeishe от Сентябрь 10, 2009, 15:07 Ну, поправил.
База открывается. Запросы выполняются только при условии, sqlQuery->setForwardOnly( true ); Код: int i = 0; На этом всё. Попытка получить значение какого-нибудь поля приводит к ошибке сегментации. Код: QSqlRecord rec = sqlQuery->record(); |