Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/56: Рейтинг темы: голосов - 56, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61

Sql в Qt

30.11.2010, 15:50. Показов 12137. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день! Нужно подключить sql к qt.
Sql у меня microsoft sql server management studio express 2005
Пишу такой код для подключения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool Window::CreateConection()
{
    m_sqlDatabase = QSqlDatabase::addDatabase("QODBC");
    m_sqlDatabase.setDatabaseName("var5sql");
    m_sqlDatabase.setHostName("ONU-JOKER");
    m_sqlDatabase.setUserName("Joker");
    m_sqlDatabase.setPassword("");
 
    if(!m_sqlDatabase.open())
    {
        QMessageBox mb;
        mb.setText((m_sqlDatabase.lastError()).text());
        mb.exec();
        return false;
    }
 
    return true;
}
Не работает! MessageBox выдает ошибку:
[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию QODBC3: Unable to connect.

Помогите разобраться, в чем проблема! И что надо вводить в setDatabaseName. Откуда взять это имя, не могу понять!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.11.2010, 15:50
Ответы с готовыми решениями:

[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection
Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection Вот такую ошибку выдает. В DSN...

Как перейти с SQL 2003 на SQL 2005 без потери информации?
Здравствуйте всем! Подскажите пожалуйста как перейти с SQL 2003 на SQL 2005 без потери информации! у меня на машине стоит 2003 SQL но...

sql query analyzer и sql enterprise manager выводят отличающиеся данные
Доброго времени суток, ALL! Софт: MS SQL 2000. Возникла следующая проблема: при запросе в query analyzer выводится строка, например,...

12
 Аватар для OdNairy
8 / 8 / 2
Регистрация: 07.02.2010
Сообщений: 22
30.11.2010, 16:35
Сам не могу вам помочь - самого это ещё ждет. Но может вам поможет такая ссылочка:
такая ссылочка...
1
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
30.11.2010, 16:59  [ТС]
Спасибо но это же самое я и в книге прочитал, мне бы какие-то ссылки, не знаю поподробнее может, не могу понять, хоть ты убей)))
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
01.12.2010, 16:18
C++
1
2
3
QSqlDatabase dbo = QSqlDatabase::addDatabase( "QODBC", "my_connection_1" );
dbo.setDatabaseName( "DRIVER={SQL Server};Server=SERVER_NAME;Database=master;Trusted_Connection=yes" );
dbo.open();
Где SERVER_NAME - это IP или DNS имя компьютера.
Здесь подключение доверительное. То есть используется имя пользователя рабочей станции.
Если строка подключения не подходит, смотри тут
2
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
01.12.2010, 18:42  [ТС]
Спасибо большое. Ссылка очень помогла! Хотя бы разобрался где что в этой строке подключения!

Добавлено через 1 час 11 минут
Продолжение проблемы! К базе данных он теперь вроде как без ошибок подключается, да только при попытке выполнить любой запрос, скажем
C++
1
2
3
4
5
6
7
8
9
10
11
12
QString str = "insert into var5sql.dbo.spravka(z_name,razryad,zona) values('ssssss',1,1)";
    QSqlQuery query;
    // И запускаем его. Если при этом ошибка
    if(!query.exec(str))
    {
        // Выдаем об этом сообщение
        QMessageBox mb;
        mb.setText("Unable insert operation!\n" + (query.lastError()).text());
        mb.setIcon(QMessageBox::Information);
        mb.exec();
        return;
    }
выдает ошибку в mb: Driver not loaded. Как это при подключении никакой ошибки нету, а при попытке запроса ошибка?

Добавлено через 12 минут
Полазил по форумам, там пишут что драйвера просто может не быть, и действительно в папке с драйверами есть только драйвер для qsqlite4. Где взять аналогичный драйвер для QODBC и как его подключить? http://doc.crossplatform.ru/qt... dbc-plugin Здесь написано, как собрать драйвер под линукс, а как это сделать под винду?
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
01.12.2010, 20:59
Посмотри вот сюда
Похожая ситуация. Если не поможет, уточни пожалуйста, каким компилятором ты пользуешься и какая версия Qt?
0
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
02.12.2010, 07:04  [ТС]
Не помогло! Покопался еще с файликами драйвиров, я их таки нашел! Позапихивал их в каталог с exeшником, в system32, не помогает. Qt версии 4.7, Стоит microsoft sql server management studio 2005 express, Windows sp3.

Вот мой запускающийся но неработающий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <QtGui>
#include <QtSql>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    //Window window;
    //window.show();
 
    QLabel lbl;
    lbl.show();
 
    QSqlDatabase sqlDatabase = QSqlDatabase::addDatabase("QODBC", "my_connection_1");
 
    // Путь к базе
    QString path = "AttachDbFilename=D:\\Learning\\Grishin\\labs_obd_last\\var5\\var5sql.mdf";
    sqlDatabase.setDatabaseName("DRIVER={SQL Server}; Server=.\\SQLExpress;" + path + ";Database=var5sql; Trusted_Connection=Yes;");
 
    qDebug() << "Available drivers: ";
    qDebug() << sqlDatabase.drivers();
 
    // Устанавливаем соединение
    if(!sqlDatabase.open())
    {
        // Если не установилось выдаем сообщение об ошибке
        qDebug() << "Unable to connect: " + sqlDatabase.lastError().text();
        return 0;
    }
 
    QString str = "insert into spravka values('ssssss',1,1)";
    QSqlQuery query;
    // И запускаем его. Если при этом ошибка
    if(!query.exec(str))
    {
        // Выдаем об этом сообщение
        qDebug() << "Unable insert operation!\n" + query.lastError().text();
    }
 
    return a.exec();
}
Вот что выдает output на все это:

Available drivers:
("QSQLITE", "QODBC3", "QODBC")
QSqlQuery::exec: database not open
"Unable insert operation!
Driver not loaded Driver not loaded"

Интересно, что sqlDatabase.open() проходит без ошибок, а при запуске запроса выдается ошибка, что драйвер не загружен.
Может где-то в проге нужно явно указать путь к драйверу?
Не знаю уже что с этим делать. Надо просто написать клиентское приложение, которое будет работать чисто с базой mdf, добавляя, удаляя, и выводя данные на экран.
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
02.12.2010, 09:11
В *.pro файле есть QT += sql ?
Или, если используешь MSVC компилятор, то зайди в свойства проекта:
Configuration properties -> Linker -> Input -> Additional dependencies
и добавь туда QtSqld4.lib для debug и QtSql4.lib для release
1
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
02.12.2010, 13:28  [ТС]
Это я давно проверил, все вроде на месте! Есть еще идеи, что проверить?
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
02.12.2010, 13:31
Сделай так:
C++
1
2
QApplication app( argc, argv );
app.addLibraryPath( "plugins" );
и в директории с *.exe сделай папку plugins. В нее закинь папку sqldrivers и туда положи qsqlodbc4.dll
0
8 / 8 / 0
Регистрация: 17.10.2012
Сообщений: 70
15.11.2012, 21:39
у меня вообще выдает ошибку
C2061: syntax error : identifier 'addDatabase'
вот код, может я где напортачил
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
QCoreApplication a(argc, argv);
    QSqlDatabase db = new QSqlDatabase::addDatabase("QMYSQL", "mydb");
    db.setHostName("Home-PC");
    db.setDatabaseName("DB_1");
    db.setUserName("Admin");
    db.setPassword("rhfdxerandry");
    db.open();
    QSqlQuery query;
    QString str = " CREATE TABLE database ("
                  " number INTEGER PRIMARE KEY NOT NULL "
                  " first_name VARCHAR(20) "
                  " last_name VARCHAR(15) "
                  " class VARCHAR(5) "
                  " balu INTEGER "
                  " ); ";
    return a.exec();
может кто сталкиваться с таким и может помочь исправить
0
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
19.11.2012, 15:28
Здравствуйте
Извините, что встреваю, но есть один вопрос как раз тоже по SQL.
Через стринг(если его формировать руками) все работает, но когда
начинаю делать через bindValue то в query.executedQuery() и в
query.lastQuery() вместо данных знак "?". Как увидеть сам запрос?
Спасибо!


C++ (Qt)
1
2
3
4
5
6
7
8
9
  int X=12; qery.clear();
    sql =" SELECT * from table where table.N1=:N1";
    if (query.prepare(sql)==false)
    {
        qDebug()<<sql<<endl;
        QMessageBox::critical(0, tr("Сбой!"),tr("Ошибка!") );
    }
   query.bindValue(":N1",QString::number(X));
   query.exec();
0
0 / 0 / 0
Регистрация: 24.08.2015
Сообщений: 3
24.08.2015, 10:46
Цитата Сообщение от savak Посмотреть сообщение
[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию QODBC3: Unable to connect.
В моем случае
C++ (Qt)
1
2
  db = QSqlDatabase::addDatabase("QODBC3");
db.setDatabaseName("DRIVER=Microsoft Access Driver (*.mdb, *.accdb);FIL=MS Access;DBQ=d:\\QtPrj\\Zone_db\\Zone_test.accdb");
проблема была в том, что QODBC на удавалось найти сам драйвер в Windows 7 (64 разрядная).
Скачал его и установил http://www.microsoft.com/downl... playlang=e.
Проблема ушла, надеюсь кому-то поможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.08.2015, 10:46
Помогаю со студенческими работами здесь

Получить тип столбца из таблицы в SQL Server посредством Linq to SQL
Как получить тип столбца из таблицы в SQL Server посредством Linq to SQL или используя любой другой способ.

Где найти и бесплатно скачать SQL 2005 или SQL 2008
Привет всем. Кто нибудь знает откуда можно бесплатно скачать полную версию SQL 2005 или SQL 2008 английскую версию.

Обязательно ли нужны знания SQL для начала работы с LINQ to SQL
Привет всем! Такой вопрос: обязательно ли нужны знания SQL для начала работы с LINQ to SQL? Спасибо!

Ошибка подключения к SQL (SQL Server не существует, или доступ запрещен.)
Привет Всем уважаемые форумчане! Вопрос такой, у себя на ПК (На котором пишу программу) - запускаю свою программу, спокойно всё...

Соединение с SQL сервером используя аутентификацию Windows, а не SQL-сервера
Коннекчусь к SQL-серверу из апплета, используя com.microsoft.jdbc.sqlserver.SQLServerDriver. String...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru