Что за ошибка? |
Здравствуйте, гость ( Вход | Регистрация )
Что за ошибка? |
silver47 |
26.4.2011, 13:29
Сообщение
#11
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
В заголовочном файле:
В методе:
Точнее m_model = new QSqlTableModel(); в конструкторе класса, а остальное в любом другом месте. Сообщение отредактировал silver47 - 26.4.2011, 13:30 |
|
|
mezmay |
27.4.2011, 8:47
Сообщение
#12
|
Активный участник Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1 |
Заработало! думаю проблема была в том что
m_model = new QSqlTableModel(); надо было делать после создания бд Сообщение отредактировал mezmay - 27.4.2011, 8:48 |
|
|
Гость_Гость_* |
27.4.2011, 17:56
Сообщение
#13
|
Гости |
|
|
|
Litkevich Yuriy |
27.4.2011, 18:18
Сообщение
#14
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Borodeys |
27.4.2011, 20:05
Сообщение
#15
|
Студент Группа: Участник Сообщений: 23 Регистрация: 10.4.2011 Пользователь №: 2588 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вот моя проблема из соседнего обсуждения :
Занимаюсь аналогичной проблемой уже длительное время. Подключение к БД осуществляется следующим образом создаем файл connection.h: #ifndef CONNECTION_H #define CONNECTION_H #include <QMessageBox> #include <QSqlDatabase> #include <QSqlError> #include <QtSql> static bool createConnection() { QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName("такая_то_база"); db.setUserName("логин_такой_то"); db.setPassword("пароль_эдакий"); bool connected = db.open(); if (!connected) { QMessageBox::critical(0, ("connection.h "),"Cannot open database =[\n " +(db.lastError().text()), QMessageBox::Cancel); return false; } } #endif // CONNECTION_H Затем из main.cpp обращаемся к данному заголовочному файлу: #include <QtGui/QApplication> #include "mainwindow.h" #include "connection.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.driverName()="count"; app.addLibraryPath("pugins"); if (!createConnection()){ QMessageBox::critical(0, ("main.cpp"),"Cannot open database =[\n" +(db.lastError().text()), QMessageBox::Cancel); return 1; } MainWindow w; w.show(); return app.exec(); } Затем, если у тебя window xp и MSSQL server, создаем драйвер подключения с именем нашей базы данных Панель управления\ Администрирование\Источники данных (ODBC)\вкладка Системный DSN кнопочка добавить Выбираем драйвер SQL Server Native Client и указываем его имя, как имя нашей базы данных. Барабанная дробь........... Тада, теперь можно подключаться к ODBC базе данных. Однако здесь только все начинается, по умолчанию QT использует только драйвера SQLite, а нам же нужен драйвер qsqlodbc4.dll и libqsqlodbc4.lib, которые лежат в папке qtdir\qt\plugins\sqldrivers. Увы, как их подключить я не знаю, необходимо что-то прописать в .pro файле. При компиляции massegeBox из main.cpp говорит следующее: Driver not loaded. Driver not losaded. Вот результаты компиляции: Запускается C:\Qt\TechJ\TechJ-build-desktop\debug\TechJ.exe... QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work. QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed. C:\Qt\TechJ\TechJ-build-desktop\debug\TechJ.exe завершился с кодом 1 Подозреваю, что проблема в библиотеках, вернее в их отсутствии. |
|
|
silver47 |
28.4.2011, 5:01
Сообщение
#16
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Однако здесь только все начинается, по умолчанию QT использует только драйвера SQLite, а нам же нужен драйвер qsqlodbc4.dll и libqsqlodbc4.lib, которые лежат в папке qtdir\qt\plugins\sqldrivers. Из коробки LGPL Qt поддерживает не только SQLite, но и другие типы БД, в том числе и, требуемый Вам, ODBC. Подключать их не нужно. Допустим у вас есть источник данных ODBC с именем MyDB, тогда подключение будет выглядеть так: widget.h
widget.cpp
|
|
|
Litkevich Yuriy |
28.4.2011, 10:11
Сообщение
#17
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Borodeys, форматируй код (тэг: code)
|
|
|
Borodeys |
29.4.2011, 12:53
Сообщение
#18
|
Студент Группа: Участник Сообщений: 23 Регистрация: 10.4.2011 Пользователь №: 2588 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вуху, заработало! Огромное спасибо silver47.
А у меня еще один вопрос, как в SQL запросе использовать значения с timeEdit виджета? То есть ну или как-то так, при выполнении данного запроса MS server говорит, что колонок timeEdit и timeEdit_2 не существует.
|
|
|
silver47 |
29.4.2011, 14:42
Сообщение
#19
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Ну во-первых WHERE (условие) AND (условие).
Во-вторых лучше делать таким образом:
Нужно не забывать, что в 2005SQL сервере нет такого поля как Date и такого поля как Time, есть только DateTime, следовательно, даже если Вы там храните только время, нужно передавать и то и другое. 2 Borodeys если есть еще вопросы, создайте, все-таки отдельную тему. Уже не по теме пошёл разговор. Сообщение отредактировал silver47 - 29.4.2011, 14:47 |
|
|
Текстовая версия | Сейчас: 28.4.2024, 8:52 |