2013-11-30 2 views
1

Я полностью застрял с загрузкой расширений в Qt-SQLite-драйвере. Я сделал все шаги от this 'how to'. Просто изменил SQLITE_ENABLE_LOAD_EXTENSION на DSQLITE_ENABLE_LOAD_EXTENSION.
После этого я пытаюсь запустить следующий код в моем приложении:QSQLITE: авторизованный не может получить строку

QSqlQuery tSqlQuery; 
QString sql_command_text; 
sql_command_text = QString("SELECT load_extension(\"libspatialite-4.dll\")"); 
if(!tSqlQuery.exec(sql_command_text)) 
    qDebug() << tSqlQuery.lastError().text(); 

И QDebug дает мне это: «не авторизован Невозможно получить строку».

Я использую Qt 4.6.3

Что я делаю неправильно? Я прочитал множество статей, но не нашел решения.


Вы можете быть уверены в следующих вещах:

  1. я сделал все шаги, от того, как к
  2. Я восстановить библиотеки DLL и заменил их
+1

"Просто изменилось SQLITE_ENABLE_LOAD_EXTENSION в DSQLITE_ENABLE_LOAD_EXTENSION". Зачем? Вы правы? –

+0

@FrankOsterfeld Это была моя ошибка. Но поскольку я изменил его на SQLITE_ENABLE_LOAD_EXTENSION, появилась новая ошибка: указанного модуля не удалось найти. Не удалось получить строку. Кстати, я поместил libspatialite.dll в исходную папку и отлаживаю папку также – tema

+1

Оставшаяся проблема выглядит идентично тому, что обсуждалось здесь: http://stackoverflow.com/questions/8590599/sqlite-load-extension-fail- для-SpatiaLite-в-питон –

ответ

0

Когда я сталкиваюсь это проблема Я решил это так: Добавить в Src \ qtbase \ src \ 3rdparty \ sqlite \ sqlite3.c следующие строки:

#ifndef SQLITE_ENABLE_LOAD_EXTENSION 
    # define SQLITE_ENABLE_LOAD_EXTENSION 1 
#endif 

Добавил его где-то около 150 строк.

Удалены из файла Src \ qtbase \ SRC \ 3rdparty \ sqlite.pri из DEFINES:

SQLITE_OMIT_EXTENSION 

Оставьте это следующим образом:

DEFINES += SQLITE_OMIT_COMPLETE SQLITE_ENABLE_FTS3 SQLITE_ENABLE_FTS3_PARENTHESIS SQLITE_ENABLE_RTREE 

затем кд командной строки (да , Я нахожусь в Win) до Src \ qtbase \ src \ plugins \ sqldrivers \ sqlite и выполнить Следующие команды:

mingw32-make -j 
mingw32-make install 

флаг -j делает используют все доступные ядра для компиляции и установки копия привела DLL к плагинов \ sqldrivers \ SQLite реж (место, где все другие библиотеки DLL держать) в кварт установки ,

В Linux (Ubuntu 14.10) мне пришлось добавить эту строку в sqlite.pro перед компиляцией:

LIBS=-ldl 
Смежные вопросы