static int SqlConnectIndex;
QSqlDatabase db;
//打开数据库
db = QSqlDatabase::addDatabase("QODBC",QString("sql_con%1").arg(SqlConnectIndex));
// db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(QString("DRIVER={SQL SERVER};"
"SERVER=%1;"
"DATABASE=%2;"
"UID=%3;"
"PWD=%4;")
.arg(DataSourceName)
.arg(DataBaseName)
.arg(UserID)
.arg(PassWord));
if (!db.open())
{
QMessageBox::warning(0, qApp->tr("Cannot open database"),
db.lastError().databaseText(), QMessageBox::Cancel);
ret=false;
}
else
{
qDebug()<<"CONNECT TO SQL"<<endl;
ret=true;
}
//1.从数据库中获取数据并显示到qtableview中
QSqlQueryModel *sqlQ = new QSqlQueryModel(this);
GetRecords(sqlQ,QObject::tr("select CMDID,CMDName,SeqInfoID from CMDInfo order by CMDID"));
sqlQ->setHeaderData(0, Qt::Horizontal, "命令号");//设置各个列头的名称,Qt::Horizontal代表水平
sqlQ->setHeaderData(1, Qt::Horizontal, "命令名称");
sqlQ->setHeaderData(2, Qt::Horizontal, "序列号");
bool SqlServer_RW::GetRecords(QSqlQueryModel* SqlModel, const QString SqlStr)
{
SqlModel->setQuery(SqlStr,db);
while(SqlModel->canFetchMore())
{
SqlModel->fetchMore();
}
if(SqlModel->rowCount()>0)
{
return true;
}
else
{
return false;
}
}
QTable *TVall=new QTableView(this);
TVall->setModel(sqlQ);//把QSqlQueryModel中的数据显示到QTableView中
//2、在数据库中执行更新语句
bool UpdateDeviceInfo(int index, int cmd, QString desc)
{
QString sqlstr=QString("update DeviceInfo set CMD=%1,DeName='%2' where DeID=%3").arg(cmd).arg(desc).arg(index);
return UpdateRecord(sqlstr);
}
bool UpdateRecord(const QString SqlStr)
{
QSqlQuery query(db);
return query.exec(SqlStr);
}
//3、从tableview中获得数据
QAbstractItemModel *model = yourTableView->model ();
QModelIndex index = model->index(3,3);
QVariant data = model->data(index);
data可以根据需要转换为相应的QString,int等等数据类型,具体可以在Qt助手中输入QVariant 查看。
其实这个model是你自己定义的,在定义这个model的时候你留一个接口,能够通过行和列获取你的数据就行了,不一定非要依靠Qt的api。
//4、获取当前选中的行第一列的内容
int row=TVall->currentIndex().row();
QAbstractItemModel *model = TVall->model();
QModelIndex index = model->index(row,0);//选中行第一列的内容
QVariant data = model->data(index);
if(data==QVariant::Int)//可以这样来判断所得到数据的类型
{
}
//5、获得tableview的第一列的列名
QAbstractItemModel *model=TVall->model();
QVariant a=model->headerData(0,Qt::Horizontal,Qt::DisplayRole);
qDebug()<<a.toString()<<endl;
model->columnCount();//获得tableview的列数
//6、tableview通过双击引发相应的槽函数 connect(TVall,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(TVRowDoubleClick(QModelIndex)));
void TVRowDoubleClick(QModelIndex index)
{
int row=index.row();//得到行数后可以根据上面的内容得到相应行数的内容
}
void SqlServer_RW::gettime(QSqlQueryModel *mo)
{
QString str="select Time from CtTime where id=1";
mo->setQuery(str,db);
QString strBuffer;
QDateTime t=mo->record(0).value("Time").toDateTime();//直接从QSqlQueryModel中获取值
strBuffer = t.toString("yyyy-MM-dd hh:mm:ss");
qDebug()<<strBuffer<<endl;
}