我是一个二战迷,有幸踏入信息行业,深知落后就要挨打的道理,正赶上信息化战争的高潮,很想为国家出点力气。也许报国无门,暂且把这里做为一个不算阵地的阵地吧。
qt3.3.3和sqlite3开发
因为工作需要,我在一个装了两个版本QT和sqlite3的计算机上开发程序。程序编辑好后,调用qmake,正确,再调用make的时候报错:不能在bin目录下找到uib。调用whereis qmake找到q安装目录,果然不存在该程序。修改Makefile,增加QTDIR=/usr/local/qt。
再编译错误很多。因为我使用的是qt例子中的方法,后来总是提示sqlite引擎不存在。后查看qt提供的帮助知道例子是按照插件的方式,也就是说要使用例子中的连接数据库的方法,必须首先安装sqlite3的插件,这才发现qt3.3.3和sqlite3不兼容,不能安装sqlite3的插件。在sqlite的主站上发现已经没有sqlite3之前版本的下载,随作罢。
但也不是就宣告不能使用sqlite3,仍然可以用头文件,库的土方法。在网上搜索到很多讲sqlite3使用的范例,都是抄自于sqlite3的范例,使用回调函数,后应用过程中,一来qt里边都是类成员函数,加上回调函数行不通,二来范例中始终没有讲到如何在回调函数中取多条记录。后查看sqlite3.h,在头文件中还提供有很多原生接口。
int sqlite3_close(sqlite3 *);
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
int sqlite3_prepare(
sqlite3 *db, /* Database handle */
const char *zSql, /* SQL statement, UTF-8 encoded */
int nBytes, /* Length of zSql in bytes. */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
);
int sqlite3_step(sqlite3_stmt*);
int sqlite3_finalize(sqlite3_stmt *pStmt);
就是利用这些函数实现了读取多行记录的结果。
用vc开发excel程序
近日要做一个小程序,从一个excel文件里读取单词,并统计出现频率。在网上搜索了很多资料,发现有三种方法,分别是用COM,ODBC和直接读取文件的方式。直接读取文件,需要了解文件格式,不太方便。后来在http://www.vckbase.com/document/viewdoc/?id=693找了一个用ODBC方式封装好的类,用起来很舒服。一般读excel表格,是没什么问题,可就是统计好的数据要写回到excel表格里却经常出错。后来一琢磨,可能是不规则词的问题,不如词中会出现单引号等等。于是就起用第三种方法,使用COM。这个方法网上有例子,但不知道怎么的,都是互相引用,一模一样。都说要在app.initinstance方法里加上AfxInitOle(),可每次一加编译器就提示找不到该函数。后来把该函数改为CoInitialize(NULL);就没问题了。其他部分还是参看http://blog.csdn.net/biblereader/archive/2006/06/26/834663.aspx
分区恢复
周日计算机因为感染病毒,导致不能启动,下了一个ghost镜像重新安装系统,却把我原来的MBR也给刷了,最后我的硬盘上就只有一个分区了。开始很着急,就用了DiskGen工具,以前叫DiskMan,这个工具真好,竟然可以搜索所有的柱面去寻找DBR,从而获取以前的分区信息。呵呵,一下子找了很多,不过如果找到一个就保留为主分区的话,那可不是好办法。一来每个硬盘只能有四个主分区,二来有些搜索出来的分区信息并非你刚刚丢失的。这就需要失主能大致记得刚刚丢失的分区信息,比如几个分区,是扩展分区中的逻辑分区还是主分区,大小大约多少等。
从光盘引导,然后在dos里运行diskgen,选择工具菜单中的重建分区表,接着选择人工交互。因为分区信息已经被更新,而不是被损坏,使用自动交互没有意义了。首先搜索出来第一个分区就是目前的分区,也就是那整个硬盘一个分区的信息,显然这不是我以前的分区信息,跳过,扫描到第922柱面的时候又发现一个分区,大约1个G,也不是我刚刚丢失的,再跳过,马上又检查到一个扩展分区,这个似乎是我所要的,选保留。保留之后,整个扩展分区中的信息一下字都蹦出来了,果然几个逻辑分区正是我以前的分区信息。这个时候因为这个扩展分区已经囊括了其他硬盘空间,搜索也自动结束了。这样我就再由扩展分区以前的空间创建一个分区,作为主分区并激活,最后保存整个分区表信息。重新启动,Windows不能启动,毕竟重新建立分区,原有的信息丢失了。没办法重新安装windows,就成功的找到了以前的分区。