在调试开发过程,不断google,找到已经忘掉记忆的过程就不细说了,就说过程中碰到的一个问题及其解决吧。在用VB的ADO写数据库时,碰到如下错误:
@H_404_8@
相关的出错代码如下:
If Adodc1.Recordset.RecordCount = 0 Then@H_404_8@ Adodc2.Recordset.AddNew@H_404_8@ Adodc2.Recordset("fp").Value = strpath & "\" & myfile.Name@H_404_8@ Adodc2.Recordset("cw").Value = "学号不存在"@H_404_8@ Adodc2.Recordset.Update@H_404_8@ GoTo label@H_404_8@ End If
第一个错误叙述看不出啥问题,第二个错误提示红色那句话有错了,写入了空值,刚开始一直没明白为啥,明明有数据写入的啊,而且前一天调试的时候也没有碰到问题的。。。
后来通过不断的google,这种错误比较难找到,因为查找关键字不明确。最后终于在一个角落里搜到了一个跟我一样碰到问题的兄弟,他最后自己查出来了,错误简单明了,是因为数据库字段不够长!
回头一想就明白了,我这里的strpath是一获取的文件路径,是递归程序,程序可能深入无限子文件夹,路径有可能很长。前一天调试时由于子文件不深,所以数据库字段够长,这次太深了,就不够长了,系统于是直接将该字段做为空字段写入数据库。而关键字是不能为空的,自然出错。
问题是思考起来,我认为是VB和ADO作者的问题,因为对于要求写入长度超出数据库长度,最好能提示直接的错误,或者考虑将超长部分截掉,写入数据库并提示错误,这样通过观察最后数据库中的值,我们也能很容易发现这个不够长的问题。而如VB这般提示不能插入空记录,不熟的同志确实不好办啊。。。
这让我想起了上次暑假另一个同事调试sql语句时遇到的问题,将一个表中的学号数据导入另一张表时,发现游标每次写入的学号值竟然完全相同,后来通过好长时间的调试,才发现是因为目标表的学号字段不够长,所以导致源表读数据时取得都是学号前几位,完全一样。。。。
所以同样的微软出的东西,不同软件在遇到字段超长时的处理手法都不一样,说明开发者内部需要规范一下。。。
原文链接:/vb/260789.html