![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
mezmay |
![]()
Сообщение
#1
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
Первый раз решил использовать базу данных. Написал по примеру:
error содержит: error = "[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию QODBC3: Unable to connect" |
|
|
![]() |
maint |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
Первый раз решил использовать базу данных. Написал по примеру:
error содержит: error = "[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию QODBC3: Unable to connect" ODBC в системе не настроено |
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
mezmay |
![]()
Сообщение
#4
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
Почему этот код работает (отображается таблица с данными):
Раскрывающийся текст
а этот нет?: Раскрывающийся текст
(отображается пустая таблица) Различие в том в первом случае я все делаю в функции main, а во втором - в классе, с уже добавленной с помощью дизайнера таблицей. Еще вопрос - как добавлять и удалять данные из таблицы с помощью QSqlTableModel. если можно - пример |
|
|
silver47 |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Вместо:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); написать: db = QSqlDatabase::addDatabase("QSQLITE");??? Пы.Сы. В заголовочном файле класса db должен быть объявлен: QSqlDatabase db; Сообщение отредактировал silver47 - 26.4.2011, 10:51 |
|
|
mezmay |
![]()
Сообщение
#6
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
а какая разница? объект QSqlDatabase все равно один на всю программу - синглтон
Сообщение отредактировал mezmay - 26.4.2011, 10:55 |
|
|
silver47 |
![]()
Сообщение
#7
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
ну попробуем по-другому... покажите вывод qDebug() << db.isOpen(); перед заполнением таблицы.
И лучше, все-таки, следить за тем что творит запрос:
Много интересного узнаете, в том числе и почему таблица пустая Сообщение отредактировал silver47 - 26.4.2011, 10:58 |
|
|
mezmay |
![]()
Сообщение
#8
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
Раскрывающийся текст
qDebug:
но данных в таблице нет Сообщение отредактировал mezmay - 26.4.2011, 12:58 |
|
|
silver47 |
![]()
Сообщение
#9
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Тогда ничего не подскажу больше. Ошибок нет, база открыта, запрос выполнен, а данных нет? Не в вашей таблице а вообще? Проверяли сторонними средствами? Просто сдается мне что это:
при выходе из метода уничтожится. Сообщение отредактировал silver47 - 26.4.2011, 13:06 |
|
|
mezmay |
![]()
Сообщение
#10
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
Вообще данные есть - открывал создавшуюся базу в текстовом редакторе
|
|
|
silver47 |
![]()
Сообщение
#11
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
В заголовочном файле:
В методе:
Точнее m_model = new QSqlTableModel(); в конструкторе класса, а остальное в любом другом месте. Сообщение отредактировал silver47 - 26.4.2011, 13:30 |
|
|
mezmay |
![]()
Сообщение
#12
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
Заработало! думаю проблема была в том что
m_model = new QSqlTableModel(); надо было делать после создания бд Сообщение отредактировал mezmay - 27.4.2011, 8:48 |
|
|
Гость_Гость_* |
![]()
Сообщение
#13
|
Гости ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#14
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Borodeys |
![]()
Сообщение
#15
|
Студент ![]() Группа: Участник Сообщений: 23 Регистрация: 10.4.2011 Пользователь №: 2588 Спасибо сказали: 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 |
![]()
Сообщение
#16
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Однако здесь только все начинается, по умолчанию QT использует только драйвера SQLite, а нам же нужен драйвер qsqlodbc4.dll и libqsqlodbc4.lib, которые лежат в папке qtdir\qt\plugins\sqldrivers. Из коробки LGPL Qt поддерживает не только SQLite, но и другие типы БД, в том числе и, требуемый Вам, ODBC. Подключать их не нужно. Допустим у вас есть источник данных ODBC с именем MyDB, тогда подключение будет выглядеть так: widget.h
widget.cpp
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Borodeys, форматируй код (тэг: code)
|
|
|
Borodeys |
![]()
Сообщение
#18
|
Студент ![]() Группа: Участник Сообщений: 23 Регистрация: 10.4.2011 Пользователь №: 2588 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вуху, заработало! Огромное спасибо silver47.
А у меня еще один вопрос, как в SQL запросе использовать значения с timeEdit виджета? То есть ну или как-то так, при выполнении данного запроса MS server говорит, что колонок timeEdit и timeEdit_2 не существует.
|
|
|
silver47 |
![]()
Сообщение
#19
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Ну во-первых WHERE (условие) AND (условие).
Во-вторых лучше делать таким образом:
Нужно не забывать, что в 2005SQL сервере нет такого поля как Date и такого поля как Time, есть только DateTime, следовательно, даже если Вы там храните только время, нужно передавать и то и другое. 2 Borodeys если есть еще вопросы, создайте, все-таки отдельную тему. Уже не по теме пошёл разговор. Сообщение отредактировал silver47 - 29.4.2011, 14:47 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 24.6.2025, 12:01 |