2014-05-25 162 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文件進行覈查。這需要處理幾乎所有的事情。小心保持已經從腳本加載環境變量的開放式控制檯。 –

相關問題