有如下一个语句:sql = "INSERT INTO 表1(用户编号,用户姓名,工资)" + " values (" & RST.fields("编号") & "," + RST.Fields("姓名") +"," & Gongzi &" )"用户编号和工资两字段为数值,用户姓名为文本,均为非必填字段。问题如下:
1、当用户编号、工资、用户姓名分别为空白字段时,应如何构造此SQL语句才能保证此SQL语句的正常执行。
1、当用户编号、工资、用户姓名分别为空白字段时,应如何构造此SQL语句才能保证此SQL语句的正常执行。
if IsNull(v) Then
SQLString = "NULL"
else
SQLString = "'" & v & "'"
end if
end ifsql = "INSERT INTO 表1(用户编号,用户姓名,工资) values (" & _
SQLString(RST.fields("编号").Value) & "," & _
SQLString(RST.Fields("姓名").Value) & "," & _
SQLString(Gongzi) & " )"
function SQLString(byval v as variant) as string
if IsNull(v) Then
SQLString = "NULL"
else
SQLString = "'" & v & "'"
end if
end iffunction SQLValue(byval v as variant) as string
if IsNull(v) Then
SQLValue= "NULL"
else
SQLValue= CStr(v)
end if
end ifsql = "INSERT INTO 表1(用户编号,用户姓名,工资) values (" & _
SQLValue(RST.fields("编号").Value) & "," & _
SQLString(RST.Fields("姓名").Value) & "," & _
SQLValue(Gongzi) & " )"
(1)如果rst!姓名字段为空白,即此记录的姓名为空,那isnull(rst!姓名)是=true还是=false?
(2)TO Tiger_Zhao 当用户编号、用户姓名、工资三个字段为空时,按照你的方法最终生成的SQL是
sql = "INSERT INTO 表1(用户编号,用户姓名,工资) values (null,null,null)"
还是sql = "INSERT INTO 表1(用户编号,用户姓名,工资) values ('null','null','null')"
还有存入数据库之后,这三个字段的内容均为NULL,还是均为空白。
NULL
请问:用户编号和工资两个数值字段存放的结果也是NULL吗?
或
insert into 表1(用户编号,用户姓名,工资) values('','','')
或
insert into 表1(用户编号,用户姓名,工资) values('',null,'')
都不会出错
谢谢,大师。
我还想问一下,如果rst!姓名字段为空白,即此记录的姓名为空,那isnull(rst!姓名)是=true还是=false?
Dim sql As String
Dim fName
Dim n As Long
fName = Array("用户编号", "用户姓名", "工资") ReDim sqlFields(2) As String
ReDim sqlValues(2) As String
If Len(Format(rst!编号)) > 0 Then
sqlFields(n) = fName(0)
sqlValues(n) = "'" & rst!编号 & "'"
n = n + 1
End If
If Len(Format(rst!姓名)) > 0 Then
sqlFields(n) = fName(1)
sqlValues(n) = "'" & rst!姓名 & "'"
n = n + 1
End If
sqlFields(n) = fName(2)
sqlValues(n) = rst!工资
ReDim Preserve sqlFields(n)
ReDim Preserve sqlValues(n)
sql = "INSERT INTO 表1(" & Join(sqlFields, ",") & ") VALUES(" & Join(sqlValues, ",") & ")"
Debug.Print sql
现在在ACCESS2003的表中看到这条记录的这两个字段均为空白,也非空格。dim a as boolean
a = IsNull(RstYh.Fields("姓名").value) a=true
a = IsNull(RstYh.Fields("房间号")) a=false为什么前一个ISNULL结果为TRUE,后一个为FALSE?
-----------------------------
只有当rst!姓名为null时,isnull(rst!姓名)=true
rst!姓名字段为空白并不一定就rst!姓名为null,你看到的空白,或许是个0长度的字符串,这个要看你以前表中数据的处理方法...
dim v
v=null
msgbox v & isnull(v)
v=""
msgbox v & isnull(v)这二个值你都如你所说的空白,但isnull的结果不一样
一个是没工作,一个是工作了没拿到钱,都表现为没收入。
或者删除这二个字段重建....
还有或者尝试修复一下access...
如果rst!姓名是''(空串),那么isnull(rst!姓名)=false
你还是概念不清
access还有许多其它数据库,无论“文本类型”字段还是“数字类型”字段,设计时都可以设置其数据是否允许为null,当一个字段允许其数据为null,并且没有设置其默认值的情况下,那么只要不对这个字段赋值,查询就返回null;用isnull就是true; 如果对这个字段进行了赋值(赋null值除外),返回的数据用isnull就是false。
你说“你手工清除了数据”,那就要看你怎么清除的了,如果执行update tb set fld=null这样清除,返回的数据必然是null,如果你打开表,用退格键等等键盘方式清除数据,对不起,这个字段不是null,只是个0长度的字符串...
处理思路上面有几种了,如果你概念不清,依然搞不定....
返回 Boolean 值,指出表达式是否不包含任何有效数据 (Null)。语法IsNull(expression)必要的 expression 参数是一个 Variant,其中包含数值表达式或字符串表达式。说明如果 expression 为 Null,则 IsNull 返回 True;否则 IsNull 返回 False。如果 expression 由多个变量组成,则表达式的任何作为变量组成成分的 Null 都会使整个表达式返回 True。Null 值指出 Variant 不包含有效数据。Null 与 Empty 不同,后者指出变量尚未初始化。Null 与长度为零的字符串 (““) 也不同,长度为零的字符串指的是空串。重要 使用 IsNull 函数是为了确定表达式是否包含 Null 值的。在某些情况下,希望表达式取值为 True,比如希望 If Var = Null 和 If Var <> Null 取值为 True,而它们总取值为 False。这是因为任何包含 Null 的表达式本身就是 Null,所以为 False。
1、ACCESS2003的字段设计中,只有文本类型有 允许空字符串, 但这应该不是说允许为NULL吧。数值型字段没有这个选项。
2、姓名和房间号这两个字段,我全都手工删除了它们的内容,并且这个姓名原先确实是有个人名的。但ISNULL姓名就是TRUE ISNULL房间号就是FALSE,这如何解释呢。
是否"必填字段"对应是否允许null
是否"允许空字符串"对应是否允许0长度字符串
二个完全不同的概念,还有默认值的设置等等,这样不同的操作也会造成你说的不同的结果,原因上面说过了,自己仔细看,最简单的解决方法是用format函数,将字符值格式化为字符串来判断,上面有示例....
还有两个问题想请教一下:(1)除了变量=NULL这种情况外,还有什么情况可以使变量的内容为NULL
(2) 当用SQL在一个数据库中增加了一条记录后,怎样的SQL会使这条记录中的姓名字段为NULL,怎样的SQL语句会使姓名字段为""谢谢。
针对文本类型说,如果一个字段设置为允许null,没有设置默认值,在插入一行数据时没有对这个字段进行操作,这个字段的值就是null,如果你设置了默认值,那么这个字段就是默认值,比如默认值是''(当然默认值设置为''需要字段属性允许空字符串)
如果你在插入数据时对这个字段进行了操作,并且插入非null值,要想使这个字段还原为null值,只有用update语句更新其值为null,如果你想使其值为空字符串,必须字段属性允许空字符串,同样用update语句更新
以上都是指在程序中调用mdb文件,如果你打开ACCESS环境,用键盘等等手工方法处理数据,可能会有不确定因素,具体这个我没注意过....我的观点是表是用来存贮数据的,不是让用户操作的,最好不要用手工方法去修改数据,这样或许有可能会给程序逻辑带来一些困惑...
或
insert into 表1(用户编号,用户姓名,工资) values('','','')
或
insert into 表1(用户编号,用户姓名,工资) values('',null,'')