QT中ODBC数据库操作

?QT中ODBC数据库操作(-) (2011-01-26 15:02:20)
分类: QT专栏
1.QT中ODBC数据库编译
如果你在安装QT时什么也没有配置,通常只会有QSQLITE出现。这样就需要安装QODBC4。
所以在这里提醒大家,在编译的时候,最好添加plugin-sql-odbc,否则你用ODBC的时候就麻烦了。
一般来说,如果开始无编译,两种方法
1)--------------------------------------------------------------------------
编译ODBC插件。可以通过 configure -plugin-sql-odbc来保证,

2)----------------------------------------------------------------------------
也可以单独编译~\src\plugins\sqldrivers\odbc
qmake -t vclib odbc.pro
qmake
nmake
编译后,在~\plugins\sqldrivers\下应该有qsqlodbcd4.dll(debug)或qsqlodbc4.dll
----------------------------------------------------------------------------
我们单独编译了N次,不知道什么原因,始终没有成功,最终还是整体编译的。

2.QT中数据库测试
下面的这段测试代码非常有用,可以检测自己的QT支持哪些数据库连接
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "\t" << driver;
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
qDebug() << "ODBC driver valid?" << db.isValid();
}
如果输出中有
Available drivers:
"QSQLITE"
"QODBC4"
"QODBC"
则恭喜大哥,你可以开始您的开发了。

3.QT中ODBC数据库操作模式
QT提供了几种数据库的操作模式:
1)利用QSqlQuery类执行SQL语句;
2)QSqlQueryModel模式操作数据库;
3)QsqlTableModel模式(无需SQL语句)
4)QsqlRelationalTableModel模式
我之前有用过VB,VC和ACCESS进行AOI和SPI的开发,对SQL语句还是比较熟悉,一看几个类,其实实质上没有太多差别。我想在程序中实现以前用https://www.360docs.net/doc/2d16481255.html,中dataset的内存数据库的模式:
程序开始运行-读取整个数据库内容到内存(数据从硬盘数据库到内存数据库)
-然后所有操作在内存中进行(内存数据库进行数据操作,更新,插入,删除等)
-最后保存则更新到硬盘数据库中(内存数据库更新数据到硬盘数据库)
于是选用了类似DATASET的QsqlTableModel模式。

4.QT中ODBC数据库操作QsqlTableModel
我写了一个数据库操作类,主要函数:
//连接数据库------------------------------------------------------------------
bool QDBOperator:: DBConnection(const QString& HostName, const QString& DatabaseName, const QString& UserName, const QString& Password)
{
if( m_db.isOpen())
{
DBClose();
}
m_db = QSqlDatabase::addDatabase("QODBC");
m_db.setHostName(HostName);
m_db.setDatabaseName(DatabaseName);
m_db.setUserName(UserName);
m_db.setPassw

ord(Password);
bool ok = m_db.open();
if(ok == false)
{
QMessageBox::information(NULL,"Error",tr("DB connection Failed!"));
return false;
}
else
{
return true;
}
}

//读取数据库中表的内容-----------------------------------------------------------------------
bool QDBOperator::GetTableStep()
{
m_TableStep = new QSqlTableModel(this);
m_TableStep->setTable("Step");
m_TableStep->setEditStrategy(QSqlTableModel::OnManualSubmit);
m_TableStep->select(); //选取整个表的所有行
//m_TableStep->index(1,1)
return true;
}

//删除行----------------------------------------------------------------------------------
void QDBOperator:: DeleteRowOfTabStep(int iRow)
{
m_TableStep->removeRow(iRow);
}

相信上面这些操作简单到每个人看见这个类都会,非常简单,而且不写SQL语句,让人心情却也好了不少。
但是接下来,问题来了,博文太长,换下一回合。

相关主题
相关文档
最新文档