前提:
創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務(wù),主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都做網(wǎng)站,重慶APP開發(fā)公司以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。創(chuàng)新互聯(lián)公司深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
SQL Server里已經(jīng)建立了相應(yīng)的數(shù)據(jù)庫,有對應(yīng)的表和數(shù)據(jù)。
步驟:
1. Qt里新建一個(gè)空工程,添加main.cpp文件。
2. 在工程文件(.pro文件)添加一行:QT += sql。
3. 該敲代碼了,代碼如下:
[cpp] view plain copy
#include QtGui
#include QString
#include QTextCodec
#include QSqlDatabase
#include QtSql
/*連接數(shù)據(jù)庫*/
void OpenDatabase()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(QString("DRIVER={SQL SERVER};"
"SERVER=%1;"
"DATABASE=%2;"
"UID=%3;"
"PWD=%4;").arg("QIAN-PC")
.arg("StuManager")
.arg("sa")
.arg("123456"));
if (!db.open())
{
QMessageBox::warning(0, qApp-tr("Cannot open database"),
db.lastError().databaseText(), QMessageBox::Cancel);
}
else
{
qDebug()"Connect to Database Success!";
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
/*設(shè)置編碼格式*/
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
OpenDatabase();
QDialog *mainDialog = new QDialog;
QTableView *tableView = new QTableView;
QHBoxLayout *layout = new QHBoxLayout;
layout-addWidget(tableView);
mainDialog-setLayout(layout);
QSqlQueryModel *model = new QSqlQueryModel;
model-setQuery(QObject::tr("select * from 教師"));
tableView-setModel(model);
mainDialog-adjustSize();
mainDialog-show();
return a.exec();
}
4. 看看運(yùn)行結(jié)果吧。
參考網(wǎng)址:
qt可以使用odbc驅(qū)動去連接sqlserver,先配置好odbc數(shù)據(jù)源,然后在qt里面調(diào)用數(shù)據(jù)源即可連接;
qtsqlquery查詢出來的條數(shù)和sqlserver不一致的原因就在于實(shí)體對象中的Key列即列1的值相同(在我們的例子中都為1)。
為了避免錯(cuò)誤的結(jié)果,可以把把視圖中col1,col2,col3的列都設(shè)為實(shí)體鍵。
這樣可以避免一些問題,有時(shí)候列太多了,全設(shè)為實(shí)體鍵,不是一個(gè)好辦法。