VB6程序中NULL注意事项
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注意事项的更多相关文章
- 微信小程序中发送模版消息注意事项
在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...
- 小程序中this.setData的使用和注意事项
前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?作为一个初学者,分享一点我的经验,希望大家批评指正. ...
- 微信小程序之ES6与事项助手
由于官方IDE更新到了0.11.112301版本,移除了对Promise的支持,造成事项助手不能正常运行,解决此问题,在项目中引入第三方兼容库Bluebird支持Promise,代码已经整合到项目代码 ...
- 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最 ...
- vc++ 在程序中运行另一个程序的方法
在vc++ 程序中运行另一个程序的方法有三个: WinExec(),ShellExcute()和CreateProcess() 三个SDK函数: WinExec,ShellExecute ,Creat ...
- TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE
TransactionScope事务处理方法介绍及.NET Core中的注意事项 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...
- Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结
前言 都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统.跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持,以避开GPL开源协议限制的HAL ...
- 去除富文本中的html标签及vue、react、微信小程序中的过滤器
在获取富文本后,又只要显示部分内容,需要去除富文本标签,然后再截取其中一部分内容:然后就是过滤器,在微信小程序中使用还是挺多次的,在vue及react中也遇到过 1.富文本去除html标签 去除htm ...
- 在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能
在我上篇随笔<在DevExpress程序中使用Winform分页控件直接录入数据并保存>中介绍了在GridView以及在其封装的分页控件上做数据的直接录入的处理,介绍情况下数据的保存和校验 ...
随机推荐
- C/C++ scanf 函数中%s 和%c 的简单差别
首先声明:在键盘中敲入字符后,字符会首先保存在键盘缓冲区中供scanf函数读取(scanf.getchar等函数是读取缓冲区,getch函数是读取的控制台信息,即为直接从键盘读取).另外特别注意键盘上 ...
- android中init.rc文件的解析问题
init.rc中文件里会通过import /init.${ro.hardware}.rc文件,这个ro.hardware应该是某个详细的属性.而这个ro.hardware赋值应该是在Init进程中赋值 ...
- 有oracle 10g,但没有安装arcgis,又想使用空间数据库的解决方案
我在一台虚拟机中部署系统进行测试,配置如下: OS:WIN2008 R2 SP1 X64 DB: oracle 12c 结果系统报错,查找原因,原来是oracle里还不支持arcgis的一些所谓的空间 ...
- linux 多个文件中查找字符串 hadoop 3 安装 调试
http://www.cnblogs.com/iLoveMyD/p/4281534.html 2015年2月9日 14:36:38 # find <directory> -type f - ...
- Lightoj 1012 - Guilty Prince
bfs遍历一遍就行了. /* *********************************************** Author :guanjun Created Time :2016/6/ ...
- Ubuntu 12.10安装vmware-tools
1:[菜单]->[虚拟机]->[重新安装vmware tools]出现 图中下边说的很清楚,解压然后执行 2:把压缩包拷贝到 /home/下,然后执行 :tar -zxvf v[按住tab ...
- Buildroot构建指南--快速上手与实用技巧【转】
本文转载自:http://blog.csdn.net/zhou_chenz/article/details/52335634 Buildroot官方全英文使用手册的链接是https://buildro ...
- 06_传智播客iOS视频教程_源文件后缀名和main函数
OC与C语言的不同. 把OC程序运行起来,CPU只会找main函数.并且只会执行main函数当中的代码.当main函数的代码执行完毕之后这个程序就自动结束掉了. main函数的参数是可以让我们在运行程 ...
- Java 支持JavaScript脚本计算
Java支持了JavaScript脚本的执行计算能力: import javax.script.Invocable; import javax.script.ScriptEngine; import ...
- Pascal之while
program Project1; {$APPTYPE CONSOLE} uses SysUtils; begin { TODO -oUser -cConsole Main : Insert code ...