qt把qtableview中数据导出excel表中_原来在sqlserver2008R2中埋下了这样的坑

57b0d142135f872272998c35a48ec828.png

我是一名系统运维,最近在数据库上遇到了一个问题,现在分享出来给大家作为参考。

在日常工作中有一项任务就是导出数据(sqlserver2008),这次的要求是导出最近一周的数据,导出格式为xls,这对于DBA来说再简单不过了吧:),但是我遇到的这个问题可能你还真没有遇到过。

先上一张表结构:

6bbc0363f58b0738292f8d4e1fdb3a04.png

下面是导出数据时的报错:

- 执行之前 (错误)

消息

错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80040E21。

(SQL Server 导入和导出向导)

错误 0xc0202025: 数据流任务 1: 无法创建 OLE DB 取值函数。请查看列元数据是否有效。

(SQL Server 导入和导出向导)

错误 0xc004701a: 数据流任务 1: 组件“目标 - 查询”(19) 在执行前阶段失败,返回的错误代码为 0xC0202025。

(SQL Server 导入和导出向导)

于是我就按照错误提示百度了一把,网上答案非常多,简而言之就是说表中有特殊字符导致在导出数据时转换报错了。

就这样花了好久时间去筛选和过滤内容,毕竟偶也不是专业的DBA,所以就花了一点时间去过滤,但是结果发现并没有特殊字符。这尼玛奇怪了啊!!!

不死心,继续研究,百度、谷歌、bing搜寻资料,感觉网上的答案都一样,就是导出时转换报错了。

在当我放弃的时候,我就想要不我先导一个小一点的数据,就1天吧,果不其然,过滤时间为1天的数据都能够正常导出来,这一下子我有燃起了希望,仔细琢磨为什么1天就可以,那2天是否可以呢,结果是2天的就报错,最终幻天不负有心人,终于发现按照1天导出数据都不会超过65535行,原来是这么个道理,害我折腾了老半天啊。

没办法,由于是sqlserver2008老版本,导出的xls只有2003或2007,两种都试过,超过65535行就会报错,那么只有傻办法了,只能按一天天来导出数据,这样虽然麻烦点,但也好过不能导出数据吧。

但是我又想到了另外一个方法,就是能不能装高版本的在sql2008上装高版本的excel呢?这个还没试过,之后再尝试看看吧:)

以下是一个简单的示例代码: ```cpp #include <QApplication> #include <QTableView> #include <QStandardItemModel> #include <QFile> #include <QTextStream> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建一个QTableView控件和一个QStandardItemModel模型 QTableView tableView; QStandardItemModel model(4, 3); model.setHorizontalHeaderLabels({"Name", "Age", "Gender"}); tableView.setModel(&model); // 添加数据到模型 model.setData(model.index(0, 0), "Alice"); model.setData(model.index(0, 1), 25); model.setData(model.index(0, 2), "Female"); model.setData(model.index(1, 0), "Bob"); model.setData(model.index(1, 1), 30); model.setData(model.index(1, 2), "Male"); model.setData(model.index(2, 0), "Charlie"); model.setData(model.index(2, 1), 20); model.setData(model.index(2, 2), "Male"); model.setData(model.index(3, 0), "Dave"); model.setData(model.index(3, 1), 35); model.setData(model.index(3, 2), "Male"); // 导出数据到文本文件 QFile file("table_data.txt"); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(&file); // 输出表头 QStringList headerList; for (int i = 0; i < model.columnCount(); i++) { headerList << model.headerData(i, Qt::Horizontal).toString(); } out << headerList.join('\t') << '\n'; // 输出数据 for (int row = 0; row < model.rowCount(); row++) { QStringList rowList; for (int column = 0; column < model.columnCount(); column++) { QModelIndex index = model.index(row, column); rowList << model.data(index).toString(); } out << rowList.join('\t') << '\n'; } file.close(); } tableView.show(); return a.exec(); } ``` 这个示例程序创建了一个4行3列的表格,并将数据导出到名为"table_data.txt"的文本文件。在导出过程,首先输出表头,然后逐行输出数据。每一行的数据用制表符分隔,行末以换行符结束。 你可以根据自己的实际需求对代码进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值