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呢。

解决方案 »

  1.   

    严格来说,你构造这个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) & CDQuote
    End 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
      

  2.   

    sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格) values (" & CStr(GoudianKahao) & ","& iif(isnull(rst1!用户姓名)=true,'',"'"& rst1!用户姓名 &"'") &",iif(isnull(rst1!用户类型)=true,'',"'"& rst1!用户类型 &"'") &",iif(isnull(rst1!价格)=true,"0","" & rst1!价格 &"") &")"
      

  3.   

    "即CStr(Rst1.Fields("价格")) 写成Rst1.Fields("价格")  此字段属性是数值。 运行时会出错,为什么会出错。 
    而Rst1.Fields("用户姓名")字段不用加CSTR呢。"1.确定两个表字段一致.
    2.修改 "'," + Rst1.Fields("价格") + " ==>

    "'," & Rst1.Fields("价格") & "

    + 和 & 的区别+
    根据两边的操作数不同分几种情况
    1、两边都是字符。则执行字符串连接功能
    2、两边都是数字。则执行数学加法
    3、两边有一个是数字字符,另外一个是数值,则自动将数字字符转换为具体的数值进行加法
    4、两边有一个事非数字字符、另外一个事数字、那么就会报错,应为无法将非数字字符转换为数字。
    &
    无论两边是什么,都想将其转换为字符,然后进行字符连接。如果你要连接字符建议只用”&“
      

  4.   

    连接字符串要用 &,相同的问题回答了好多次了。
      

  5.   

    用 & 之后,用不着cstr()
      

  6.   

    lz要学会查看变量值,
    比如加 debug.printsql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" + " values (" + CStr(GoudianKahao) + ",'" + Rst1.Fields("用户姓名") + "','" + Rst1.Fields("用户类型") + "'," + Rst1.Fields("价格") + ")" debug.print sqllz会看到值不是你想要的
      

  7.   

    sql是字符串,Rst1.Fields("用户姓名")的值是字符串所以不用加cstr转换,而Rst1.Fields("价格")为数值要用+号连接串时必须先用cstr转换成串(用&连接会自动转换,不用cstr),然后连接,否则当做算加法,当然出错。
      

  8.   

    sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" & " values (" & CStr(GoudianKahao) & ",'" & Rst1.Fields("用户姓名") & "','" & Rst1.Fields("用户类型") & "'," & Rst1.Fields("价格") & ")"如果有数值标量的话,+ 号有二义性,都改为字符串连接符。字符串就用连接符,而不是加号,是好的编码习惯。
      

  9.   

    再请教一个问题:(1)如果Rst1.Fields("价格") 是空值时,即没有值时,sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" & " values (" & CStr(GoudianKahao) & ",'" & Rst1.Fields("用户姓名") & "','" & Rst1.Fields("用户类型") & "'," & Rst1.Fields("价格") & ")" 会不会出现。(2)当SQL语句引用的变量出现空值,在哪些情况下,会出现运行错误(打个比方,当然只是假设,当要写的字段为数据时,会出错。)
      

  10.   

    1)拼接的 SQL 语法错误
    2)是否可以赋空值由字段的定义决定——数据库基本知识。