Qt: не удается открыть включаемый файл: «QtSql»: нет такого файла или каталога

Это может быть повторяющийся вопрос, но обоснованные ответы не решили мою проблему. Я пытаюсь создать клиент-серверное приложение в QT, где клиент отправляет на сервер код сообщения String, а сервер должен подключиться к базе данных сервера sql и получить данные относительно кода сообщения клиента. Ниже приведена серверная часть, которую я написал до сих пор. Но я получаю эту ошибку: Не удается открыть включаемый файл: «QtSql»: нет такого файла или каталога. Когда я создаю отдельные проекты и запускаю часть базы данных, все работает идеально, но когда я соединяю их вместе, происходит сбой. У кого-нибудь есть предложения по решению этой проблемы?

ServerSocket.pro

QT       += core
QT       += network
QT       += sql
QT       -= gui

TARGET = ServerSocket
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp \
    server.cpp

HEADERS += \
    server.h

СерверСокет.h

#ifndef SERVER_H
#define SERVER_H

#include <QObject>
#include <QDebug>
#include <QTcpServer>
#include <QTcpSocket>


class Server : public QObject
{
    Q_OBJECT
public:
    explicit Server(QObject *parent = 0);

signals:

public slots:
    void newConnection();
private:
    QTcpServer *server;

};

#endif // SERVER_H

СерверСокет.cpp

#include "server.h"
#include <QtSql>

Server::Server(QObject *parent) :
    QObject(parent)
{
    server = new QTcpServer(this);
    connect(server, SIGNAL(newConnection()),this,SLOT(newConnection()));
    if(!server->listen(QHostAddress::Any,1234)){
        qDebug() << "Server could not start";
    } else {
        qDebug() << "Server started";
    }
}
void Server::newConnection(){
    QTcpSocket *socket = server->nextPendingConnection();
    socket->write("hello client");
    socket->waitForBytesWritten(1000);
    socket->waitForReadyRead(1000);
    QString appCode = socket->readAll();

    QString servername = "LOCALHOST\\SQLEXPRESS";
    QString dbname = "ApplicationsDB";
    QString connectionTemplate = "DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2;";
    QSqlQuery query;
    QStringList results;


    QString connectionString = connectionTemplate.arg(servername).arg(dbname);
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

    db.setDatabaseName(connectionString);

    if (db.open())
    {
        qDebug() << "Opened";
        query = db.exec("select Code from Application a where a.Name = '") + appCode + "';";
        while (query.next())
        {
            QString result = query.record().value(0).toString();
            results.append(result);
        }
        for(QString res : results){
            qDebug() << res;
        }
    }
    else
    {
        qDebug() << "Error = " << db.lastError().text();
    }
    db.close();
}

person laura    schedule 25.05.2014    source источник
comment
Какая это ОС? Какой компилятор? Вы проверили путь включения с VERBOSE=1?   -  person lpapp    schedule 25.05.2014
comment
ОС - Windows 7; Компилятор MSVC 2012   -  person laura    schedule 25.05.2014
comment
Попробуйте запустить qmake с параметром -d, чтобы увидеть, установлен ли includepath, но я думаю, вам следует попробовать его начисто, потому что я не могу воспроизвести проблему. У вас правильно установлен SQL, как и любые другие модули, официальным установщиком qt?   -  person lpapp    schedule 25.05.2014
comment
Да, все установлено правильно. Если я запускаю отдельный проект, в котором я выполняю запрос к базе данных sql, я не получаю никаких ошибок.   -  person laura    schedule 25.05.2014
comment
@LaszloPapp Я решил проблему: щелкните правой кнопкой мыши имя проекта/решения и выберите параметр «Выполнить qmake», перестройте и запустите приложение. Это работает просто отлично. Можете ли вы сформулировать ответ, чтобы принять его? Спасибо   -  person laura    schedule 30.05.2014
comment
Спасибо, что вернулись. Сейчас это сделано, но на будущее: вы можете сделать это самостоятельно. Вы даже можете принять свой собственный ответ, если считаете его технически лучшим. Рад, что теперь работает.   -  person lpapp    schedule 30.05.2014


Ответы (1)


Мне все это кажется нормальным. Убедитесь, что qmake перезапущен правильно.

К сожалению, это должно быть сделано явно, потому что оно еще не распознано автоматически, когда его следует перезапустить при изменении файлов проекта.

person lpapp    schedule 30.05.2014
comment
Если есть сомнения, я сохраняю все, закрываю Qt Creator и уничтожаю все папки сборки и файлы *.user перед повторной загрузкой Qt Creator. Это заботится почти обо всем. Будьте осторожны с открытыми консолями, которые загрузили переменные среды из скриптов. - person kayleeFrye_onDeck; 25.05.2016