這可能是一個重複的問題,但建立的答案還沒有解決我的問題。我試圖在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();
}
這是什麼OS?哪個編譯器?你是否用VERBOSE = 1檢查了包含路徑? – lpapp
操作系統 - Windows 7;編譯器MSVC 2012 – laura
嘗試使用'-d'選項運行qmake以查看includepath是否已設置,但我認爲您應該嘗試一下,因爲我無法重現該問題。你是否像官方的qt安裝程序中的其他模塊一樣正確安裝了SQL? – lpapp