qtsqlquery查询出来的条数和sqlserver不一致的原因就在于实体对象中的Key列即列1的值相同(在我们的例子中都为1)。
在句容等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、网站设计 网站设计制作按需网站制作,公司网站建设,企业网站建设,品牌网站设计,网络营销推广,成都外贸网站建设,句容网站建设费用合理。
为了避免错误的结果,可以把把视图中col1,col2,col3的列都设为实体键。
这样可以避免一些问题,有时候列太多了,全设为实体键,不是一个好办法。
qt可以使用odbc驱动去连接sqlserver,先配置好odbc数据源,然后在qt里面调用数据源即可连接;
连接长时间不操作是可能会断开,检查数据库的配置连接时间,一般会有时间限制,建议你程序启动需要和数据库交互时,先判断数据库是否是连接状态,未连接时重新连接
前提:
SQL Server里已经建立了相应的数据库,有对应的表和数据。
步骤:
1. Qt里新建一个空工程,添加main.cpp文件。
2. 在工程文件(.pro文件)添加一行:QT += sql。
3. 该敲代码了,代码如下:
[cpp] view plain copy
#include QtGui
#include QString
#include QTextCodec
#include QSqlDatabase
#include QtSql
/*连接数据库*/
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);
/*设置编码格式*/
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. 看看运行结果吧。
参考网址: