2014-05-25 160 views
2

这可能是一个重复的问题,但建立的答案还没有解决我的问题。我试图在QT中创建一个客户端服务器应用程序,客户端向服务器发送一个String消息代码,服务器必须连接到SQL Server数据库并检索与客户端消息代码相关的数据。 以下是我迄今为止编写的服务器部分。但我得到这个错误:无法打开包含文件:'QtSql':没有这样的文件或目录。当我制作单独的项目并运行数据库部分时,它工作得很完美,但是当我将它们放在一起时,它失败了。 任何人有一些建议可以解决这个问题?Qt:无法打开包含文件:'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 

ServerSocket.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 

ServerSocket.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(); 
} 
+0

这是什么OS?哪个编译器?你是否用VERBOSE = 1检查了包含路径? – lpapp

+0

操作系统 - Windows 7;编译器MSVC 2012 – laura

+0

尝试使用'-d'选项运行qmake以查看includepath是否已设置,但我认为您应该尝试一下,因为我无法重现该问题。你是否像官方的qt安装程序中的其他模块一样正确安装了SQL? – lpapp

回答

3

这一切都似乎是没什么问题。确保qmake重新正常运行。

不幸的是,它必须被明确地完成,因为它在修改项目文件时应该重新运行时尚未自动识别。

+0

如果有疑问,我可以保存所有关闭的Qt Creator,并在重新加载Qt Creator之前对所有生成的文件夹和* .user文件进行核查。这需要处理几乎所有的事情。小心保持已经从脚本加载环境变量的开放式控制台。 –

相关问题