QODBC + Excel 解决方案
来源:互联网 发布:淘宝新客户关系营销 编辑:程序博客网 时间:2024/05/16 14:21
通过AxObject的方式不喜欢,百度又比较少其他相关资料,我研究了一下ODBC的方法查EXCEL
当然对于格式化什么的不敢恭维,但是对于我们熟悉的sql等操作还是很亲民的。另外excel作为一个小白都敢动手的文件格式
也是首选,比ini亲切多了。
使用这个请自己添加Qt的SQL库。我在Qt 5.1 - winXP - VS2010 环境下成功运行
2013年9月25日 10:19:39 晴
查,打开
链接成功。关键地方,链接串:DBQ要路径,至少“.\\”或者完整路径,否则无效
但db.open()返回true。
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=E:\\workspace\\QExcel\\QExcel\\test.xls;DefaultDir=c:\\;");
if (db.open())
{
QSqlQuery query;
bool flag = query.exec(QStringLiteral("select * from [Sheet2$]"));
while (query.next()) {
QString title = query.value(0).toString();
QString author = query.value(1).toString();
//QMessageBox::critical(0, title,author);
}
}
//查询列名
bool flag = query.exec(QStringLiteral("select 监控对象 from [监控对象编号$]"));
//可写,设置readonly = 0
db.setDatabaseName("Driver={Microsoft Excel Driver (*.xls)};ReadOnly = 0;DriverId=790;Dbq=E:\\workspace\\QExcel\\QExcel\\data.xls;DefaultDir=c:\\;");
增
QODBC+Excel 的插入方法
下面是插入方法,在sql中插入数据的格式是
INSERT INTO 表 [(字段1[,字段2[, ...]])]
VALUES (值1[,值2[, ...])
在这里value指定变量名,再在下面填充变量内容,才可以。
当然我们常用的方法是通过组合字符串,也可以使用填充变量
QSqlQuery readPassword("SELECT * FROM password WHERE username=:username");
readPassword.bindValue(":username", ui->lineEdit_2->text());
readPassword.bindValue(":username", ui->lineEdit_2->text());
if (db.open())
{
QSqlQuery query;
bool flag1 = query.prepare(QStringLiteral("insert into [监控对象分类$] ([编号],[分类名称]) values(:_id, :_name)"));
//绑定方式1
// query.bindValue(0,QStringLiteral("5"));
// query.bindValue(1,QStringLiteral("不知道"));
//绑定方式2
query.bindValue(QStringLiteral(":_id"),QStringLiteral("6"));
query.bindValue(QStringLiteral(":_name"),QStringLiteral("不晓得"));
bool succ = query.exec();
qDebug()<<query.lastError().text();
}
结果:
批量插入数据
QSqlQuery query;
query.prepare(QStringLiteral("insert into [监控对象分类$] values(?,?)"));
QVariantList ints;
ints << "10" << "11" << "12" << "13";
query.addBindValue(ints);
QVariantList names;
names << QStringLiteral("一定¨") << QStringLiteral("确定¨") << QStringLiteral("肯定") << QVariant(QVariant::String);
query.addBindValue(names);
if (!query.execBatch())
qDebug() << query.lastError();
删
QODBCResult::exec: Unable to execute statement: "[Microsoft][ODBC Excel Driver] 该 ISAM 不支持在链接表中删除数据。"
if (db.open())
{
QSqlQuery query;
bool flag = query.prepare(QStringLiteral("DELETE FROM [监控对象分类$] WHERE 分类名称 = :_name"));
//绑定方式2
query.bindValue(QStringLiteral(":_name"),QStringLiteral("安防监控使能"));
bool succ = query.exec();
qDebug()<<query.lastError().text();
}
改
注意,使用内部变量的时候不带[],譬如":_id",不能写成"[:_id]"。
query.prepare(QStringLiteral("UPDATE [监控对象分类$] SET 编号 = :_id WHERE 分类名称 = :_name"));
表格列名可以有"[]"也可以没有。
if (db.open())
{
QSqlQuery query;
query.prepare(QStringLiteral("UPDATE [监控对象分类$] SET [编号] = :_id WHERE [分类名称] = :_name"));
query.bindValue(QStringLiteral(":_id"),QStringLiteral("10"));
query.bindValue(QStringLiteral(":_name"),QStringLiteral("安防监控使能"));
bool succ = query.exec();
qDebug()<<query.lastError().text();
}
另外
打开了Excel 可以实时看到表格项目被更改,但是如果程序先运行则不能打开表格,会提示被占用。
如果打开了Excel有时候会提示,无法读取或打开之类,所以文件读写最好不要打开文本。
相关资料:
Qt社区问题 http://qt-project.org/search/tag/excel
Qt数据库操作
2012-6-28 08:48| 发布者: benben| 查看: 3056| 评论: 0
摘要: 原文:http://blog.163.com/lijiji_1515/blog/static/126877446200982911635165/qt-win-commercial-src-4.3.1、qt-x11-commercial-src-4.3.1Microsoft Visual C++ 6.0、KDevelop 3.5.0Windows Xp、Solaris 10、Fedor ...
MS Excel 连接串 http://www.connectionstrings.com/excel#microsoft-excel-odbc-driver
关于Qt COM和ODBC操作Excel速度的比较 http://yanhubin.blog.163.com/blog/static/43257911201361112140611/
- QODBC + Excel 解决方案
- QOdbc 读写 excel
- QT:QOdbc 读写 excel数据
- QT4 QOdbc连接 Access
- Qt 连接数据库QODBC
- Qodbc driver not found
- DataGrid导出Excel解决方案
- java报表EXCEL解决方案
- DataGrid导出Excel解决方案
- C# Excel 解决方案
- C# Excel 解决方案
- DataGrid导出Excel解决方案
- JAVA操作EXCEL解决方案
- QT5.0.1-QODBC driver not loaded
- Qt5.6 windows下vs2015编译QODBC
- 8000401a错误解决方案(Excel)
- JAVA操作Excel的解决方案
- JAVA操作Excel的解决方案
- 兼容Android2.2,用反射方式使用DownloadManager
- Android 音频系统 1 -- codec
- C#导入、导出Excel
- unix socket简介
- 详解MediaPlayer与SoundPool的利弊以及各个的用途
- QODBC + Excel 解决方案
- Vmalloc
- sqlite 链接
- shell
- linux内核奇遇记之md源代码解读之五
- 学习python多线程和多进程的一点感想
- nginx 和 php-fpm 通信使用unix socket还是TCP,及其配置
- 获取其他进程加载模块的详细信息
- visual studio快捷键大全