VB6中从数据库中取出栏位值进行操作,若栏位值为Null,则必须小心处理,否则极易导致程序出错退出。

通常我们从recordset中取出栏位值采用Fields方法,加上栏位名称,如

rsMoney.Fields("SecondPlate")

以上Fields方法返回的是Variant类型,Variant类型允许为Null,但我们通常将栏位值当做string或int类型来使用,如赋值、比较,就会出错!

1,Null赋值操作

如以下代码:

1)        Dim ss As String

2)        Dim aa As Variant

3)        ss = "/~2018-12-10 13:40:33,45.50,45.50"

4)        aa = Null '不会出错

5)        ss = IIf(IsNull(aa), "", aa)  '不会出错

6)        ss = aa '出错

7)        ss = aa & ""  '不会出错

ss为字符串类型,aa为Variant类型,

  •  Variant类型变量可以赋值为Null,所以第4行不会出错
  •  第5行在将Null赋值给字符串变量前,先用isNull函数判断是否为Null,用IIF函数将Null转换为空字符串再赋值给ss,所以不会出错
  •  第6行直接将Null赋值给字符串变量,所以出错
  •  第7行在将Null赋值给字符串变量前,先与空字符串连接,右侧运算结果为空字符串,所以不会出错

2,Null比较操作

Dim ss As String

Dim aa As Variant

ss = ""

aa = Null '不会出错

If ss = aa Then

Form1.Text1.Text = "1!"

Else

If ss > aa Then

Form1.Text1.Text = "2!"

Else

If ss < aa Then

Form1.Text1.Text = "3!"

Else

Form1.Text1.Text = "4!"

End If

End If

End If

以上代码运行结果为4!

因为与Null进行比较,无论是大于还是小于还是等于,其结果全部为False。

3,数据库栏位值可能为Null时,代码操作注意事项

综上,建议如下:

  • 在VB中取出记录栏位值在进行赋值前,应进行判断或转换。建议赋值前与空字符串进行连接操作,比较简明。即:

Dim ss As String

Ss = rsMoney.Fields("SecondPlate") & ""

  • 记录栏位值可能为Null时,不能等同于空字符串进行比较操作。可能为Null的栏位值,在进行比较操作前应先进行明确的判断或转换,以免程序产生bug。

VB6程序中NULL注意事项的更多相关文章

  1. 微信小程序中发送模版消息注意事项

    在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...

  2. 小程序中this.setData的使用和注意事项

    前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?作为一个初学者,分享一点我的经验,希望大家批评指正. ...

  3. 微信小程序之ES6与事项助手

    由于官方IDE更新到了0.11.112301版本,移除了对Promise的支持,造成事项助手不能正常运行,解决此问题,在项目中引入第三方兼容库Bluebird支持Promise,代码已经整合到项目代码 ...

  4. 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最 ...

  5. vc++ 在程序中运行另一个程序的方法

    在vc++ 程序中运行另一个程序的方法有三个: WinExec(),ShellExcute()和CreateProcess() 三个SDK函数: WinExec,ShellExecute ,Creat ...

  6. TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE

    TransactionScope事务处理方法介绍及.NET Core中的注意事项   作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...

  7. Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结

    前言 都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统.跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持,以避开GPL开源协议限制的HAL ...

  8. 去除富文本中的html标签及vue、react、微信小程序中的过滤器

    在获取富文本后,又只要显示部分内容,需要去除富文本标签,然后再截取其中一部分内容:然后就是过滤器,在微信小程序中使用还是挺多次的,在vue及react中也遇到过 1.富文本去除html标签 去除htm ...

  9. 在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能

    在我上篇随笔<在DevExpress程序中使用Winform分页控件直接录入数据并保存>中介绍了在GridView以及在其封装的分页控件上做数据的直接录入的处理,介绍情况下数据的保存和校验 ...

随机推荐

  1. C/C++ scanf 函数中%s 和%c 的简单差别

    首先声明:在键盘中敲入字符后,字符会首先保存在键盘缓冲区中供scanf函数读取(scanf.getchar等函数是读取缓冲区,getch函数是读取的控制台信息,即为直接从键盘读取).另外特别注意键盘上 ...

  2. android中init.rc文件的解析问题

    init.rc中文件里会通过import /init.${ro.hardware}.rc文件,这个ro.hardware应该是某个详细的属性.而这个ro.hardware赋值应该是在Init进程中赋值 ...

  3. 有oracle 10g,但没有安装arcgis,又想使用空间数据库的解决方案

    我在一台虚拟机中部署系统进行测试,配置如下: OS:WIN2008 R2 SP1 X64 DB: oracle 12c 结果系统报错,查找原因,原来是oracle里还不支持arcgis的一些所谓的空间 ...

  4. linux 多个文件中查找字符串 hadoop 3 安装 调试

    http://www.cnblogs.com/iLoveMyD/p/4281534.html 2015年2月9日 14:36:38 # find <directory> -type f - ...

  5. Lightoj 1012 - Guilty Prince

    bfs遍历一遍就行了. /* *********************************************** Author :guanjun Created Time :2016/6/ ...

  6. Ubuntu 12.10安装vmware-tools

    1:[菜单]->[虚拟机]->[重新安装vmware tools]出现 图中下边说的很清楚,解压然后执行 2:把压缩包拷贝到 /home/下,然后执行 :tar -zxvf v[按住tab ...

  7. Buildroot构建指南--快速上手与实用技巧【转】

    本文转载自:http://blog.csdn.net/zhou_chenz/article/details/52335634 Buildroot官方全英文使用手册的链接是https://buildro ...

  8. 06_传智播客iOS视频教程_源文件后缀名和main函数

    OC与C语言的不同. 把OC程序运行起来,CPU只会找main函数.并且只会执行main函数当中的代码.当main函数的代码执行完毕之后这个程序就自动结束掉了. main函数的参数是可以让我们在运行程 ...

  9. Java 支持JavaScript脚本计算

    Java支持了JavaScript脚本的执行计算能力: import javax.script.Invocable; import javax.script.ScriptEngine; import ...

  10. Pascal之while

    program Project1; {$APPTYPE CONSOLE} uses SysUtils; begin { TODO -oUser -cConsole Main : Insert code ...