送分100分:简单的SQL语句中用CSTR的问题。
sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" + " values (" + CStr(GoudianKahao) + ",'" + Rst1.Fields("用户姓名") + "','" + Rst1.Fields("用户类型") + "'," + CStr(Rst1.Fields("价格")) + ")"
RST1中的字段与BIAO1中字段属性完全一致,包括字段属性,字段大小,
现在遇到的问题是如果SQL语句写成sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" + " values (" + CStr(GoudianKahao) + ",'" + Rst1.Fields("用户姓名") + "','" + Rst1.Fields("用户类型") + "'," + Rst1.Fields("价格") + ")"
即CStr(Rst1.Fields("价格")) 写成Rst1.Fields("价格") 此字段属性是数值。
运行时会出错,为什么会出错。
而Rst1.Fields("用户姓名")字段不用加CSTR呢。
[解决办法]
严格来说,你构造这个SQL字符串时忽略了两个问题,一是Field字段值可能为Null,这就不能直接用内置函数转为字符串,二是你没有对字段值可能含有双引号分界符的情况做处理,这样很容易导致SQL出错,如在ASP等环境中,还会造成潜在的安全问题!!!
事实上,在近日的问题中就有这两点的解决方案,
'==========================================================' 函数: AddDQuotes'' 功能: 为一个字符串转换为CSV或SQL的一部分做引号处理,""""即是双引号"'' 返回: String' 作者 : 杨过.网狐.cn'' 入口: strSrc 源字符串'Public Function AddDQuotes(ByVal strSrc As String) As String Const CDQuote = """" AddDQuotes = CDQuote & Replace(strSrc, CDQuote, CDQuote & CDQuote) & CDQuoteEnd Function'---------------------------------------------------' 过程名 : AsString' 时间 : 2010-2-28 13:46' 作者 : 杨过.网狐.cn' 功能 : 将可能为Null的变量转换为字符串型' 说明 :' 来源: http://topic.csdn.net/u/20100227/21/bd3a0139-8570-45f1-bc8c-09bbd08c6981.html'送分100分:text1.text = rst1.fields(-姓名-) 时出现无效使用NULL的提示'---------------------------------------------------'Function AsString(ByVal v1 As Variant) As String On Error GoTo AsString_Error AsString = v1 On Error GoTo 0 Exit FunctionAsString_Error: AsString = "" End Function
[解决办法]
sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格) values (" & CStr(GoudianKahao) & ","& iif(isnull(rst1!用户姓名)=true,'',"'"& rst1!用户姓名 &"'") &",iif(isnull(rst1!用户类型)=true,'',"'"& rst1!用户类型 &"'") &",iif(isnull(rst1!价格)=true,"0","" & rst1!价格 &"") &")"
[解决办法]
"即CStr(Rst1.Fields("价格")) 写成Rst1.Fields("价格") 此字段属性是数值。 运行时会出错,为什么会出错。
而Rst1.Fields("用户姓名")字段不用加CSTR呢。"
1.确定两个表字段一致.
2.修改 "'," + Rst1.Fields("价格") + " ==>
"'," & Rst1.Fields("价格") & "
+ 和 & 的区别
+
根据两边的操作数不同分几种情况
1、两边都是字符。则执行字符串连接功能
2、两边都是数字。则执行数学加法
3、两边有一个是数字字符,另外一个是数值,则自动将数字字符转换为具体的数值进行加法
4、两边有一个事非数字字符、另外一个事数字、那么就会报错,应为无法将非数字字符转换为数字。
&
无论两边是什么,都想将其转换为字符,然后进行字符连接。如果你要连接字符建议只用”&“
[解决办法]
lz要学会查看变量值,
比如加 debug.print
sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" + " values (" + CStr(GoudianKahao) + ",'" + Rst1.Fields("用户姓名") + "','" + Rst1.Fields("用户类型") + "'," + Rst1.Fields("价格") + ")" debug.print sql
[解决办法]