当前位置:C++技术网 > 资讯 > 工作日记:导出数据库表到Excel的方法和调试一个名字冲突的分析过程

工作日记:导出数据库表到Excel的方法和调试一个名字冲突的分析过程

更新时间:2015-06-25 15:25:47浏览次数:1+次

2013年10月11日  星期五  晴

    昨天做了视图显示图标,有超大图标、大图标、中等图标、小图标等一套,就是提取系统的一套图标给经理使用。
    将数据库查询的表导出到Excel文件中,已经试验过几种方法了,一种是使用Excel组件,一种是使用别人写好的类,最后一种是通过ODBC进行Excel文件的读写。第一种方法,涉及到大量的excel组件的东西,很难得一下子弄得很清楚。不过功能可以实现了,但是因为不熟,表头不知道怎么插入。当然数据插入都是很不错的,然后就是一打开的编辑的Excel形式显示结果,还要自己再保存。然而最严重的问题就是,如果某台计算机没有安装Office 的Excel软件,那么就不能实现导出了,因为没有安装这个组件,所以无法执行。同时,朱念提到“棱镜门事件”,关于隐私监控问题。所以,为了安全,就最好不要采取这种方式。而我主要不采取这种方式就是因为需要计算机安装好Office 的Excel。然而,现在很多人使用的是WPS软件的Excel,所以,并不能很通用。所以就放弃了这种方法。然后转向第二种方法,因为此时还不知道有第三种方法。第二种方法是通过别人的项目程序提取出来的,但是后来发现,并不适合我的软件,我的软件是通用的数据库查询,各字段都无法确定。当然 ,是可以用这个方法实现,只不过比较麻烦。然后就继续查找资料,结果发现了第三种方法,就是通过ODBC对excel文件进行操作,思路简单清晰,就是向数据库操作那样来操作就是了。功能还很强大,不需要基于其他组件,不需要计算机安装Excel软件,因为ODBC默认自带了Excel文件驱动,所以就很方便了。这些方面都很符合我的需求。简洁强大和通用。经过一番的探索和实验,不断发现问题和解决问题,基本上都能够应付。有了一定的经验,很多问题在调试时就很容易发现,然后掌握了调试找错的方法和技巧,逐步缩小范围,精确定位错误,最终就能够想出各种办法解决掉问题。
    昨天下班时测试一个数据库表,结果老是报错,提示字段语法定义错误。然而我跟踪调试了很久,发现各种数据库语句和数值都是没有问题的。最后拖了半个小时才下班,也没解决,就留到今天了。今天上午就直接来调试这个问题。还是很难找到问题,寻求朱念的帮助,他也没发现什么。最终,自己的问题还得有自己来解决。然后我不再怀疑自己的代码问题。假设插入不支持一定条数的字段,所以我自己将一个表的字段慢慢添加,结果超过了出错的表,仍然可以正常执行,说明不是这个问题。然后我假设是字段数据类型的问题,然后尝试各种类型,然后还是可以正常插入,说明也不是这个问题。然后我将测试的表字段类型和长度写成出错的表一样的。测试后也正常。证明确实不是这个问题。然后我继续假设是数据本身的问题,然后就将出错的表的所有数据复制到测试表中测试,结果还是通过。然后将出错表的第一条数据改了一下,执行出错,说明也不是数据的问题。最后,那我就假设是字段名的名字的问题。然后将出错表的所有字段名加上一个数字1,这样的话,如果说有系统保留字冲突的话,加数字1后也不至于冲突了。然后改好后用软件重新查询后导出,哇,正确执行了。假设正确。但是要弄明白精确的错误位置,然后慢慢恢复字段名,最后确定到了“NOTE”这个字段名,如果是“NOTE1”的话执行正常,如果去掉1的话,失败。证明就是这个字段的名字是Excel系统保留字,此处使用了导致冲突,因而提示“字段名语法定义错误”。只是没有提示使用了Excel保留字,害我找了这么久。知道了这个原因,就好办了。因为软件到时候在确定表头时还会查询一个字段名和显示名的对应表,这样的话就可以使用中文名称进行插入了,这样的中文不可能是Excel保留字,这样也就很好的解决问题了。也可以枚举保留字然后用其他名字替换掉字段名。
    问题确定后,这些基本上就没什么问题了。下一个目标就是导入Excel表的内容。