睡不着,谈谈前几天调试VB遇到的空记录写入问题解决及感想

前几天领导让写个VBA程序,处理一下毕业论文文档错误统计。主要是以前论文的错误统计次数是人工修订后,数出来的,现在要用程序自动读出来,导出成excel文件,顺便检查学号等是否已经正确填写。要求有程序界面,想来想去,还是操刀一下N年没用了的VB好了,原因很简单,1是开发简单,2是小程序,不用像net和java一样还要装个框架才能运行,3是VB支持原生态VBA操作代码,调试时最方便。

在调试开发过程,不断google,找到已经忘掉记忆的过程就不细说了,就说过程中碰到的一个问题及其解决吧。在用VB的ADO写数据库时,碰到如下错误


相关的出错代码如下:

If Adodc1.Recordset.RecordCount = 0 Then
Adodc2.Recordset.AddNew
Adodc2.Recordset("fp").Value = strpath & "\" & myfile.Name
Adodc2.Recordset("cw").Value = "学号不存在"
Adodc2.Recordset.Update
GoTo label
End If

一个错误叙述看不出啥问题,第二个错误提示红色那句话有错了,写入了空值,刚开始一直没明白为啥,明明有数据写入的啊,而且前一天调试的时候也没有碰到问题的。。。

后来通过不断的google,这种错误比较难找到,因为查找关键字不明确。最后终于在一个角落里搜到了一个跟我一样碰到问题的兄弟,他最后自己查出来了,错误简单明了,是因为数据库字段不够长!

回头一想就明白了,我这里的strpath是一获取文件路径,是递归程序,程序可能深入无限子文件夹,路径有可能很长。前一天调试时由于子文件不深,所以数据库字段够长,这次太深了,就不够长了,系统于是直接将该字段做为空字段写入数据库。而关键字是不能为空的,自然出错。

问题是思考起来,我认为是VB和ADO作者的问题,因为对于要求写入长度超出数据库长度,最好能提示直接的错误,或者考虑将超长部分截掉,写入数据库提示错误,这样通过观察最后数据库中的值,我们也能很容易发现这个不够长的问题。而如VB这般提示不能插入空记录,不熟的同志确实不好办啊。。。

这让我想起了上次暑假另一个同事调试sql语句时遇到的问题,将一个表中的学号数据导入另一张表时,发现游标每次写入的学号值竟然完全相同,后来通过好长时间的调试,才发现是因为目标表的学号字段不够长,所以导致源表读数据时取得都是学号前几位,完全一样。。。。

所以同样的微软出的东西,不同软件在遇到字段超长时的处理手法都不一样,说明开发者内部需要规范一下。。。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...