日期:2014-05-19  浏览次数:20445 次

更新数据库,发生的“标准表达式类型不匹配”。让人实在难以解决。
strSQL   =   "UPDATE   Client_tbl_item   SET   "
                      ......
      strSQL   &=   "REF_no_equip= ' "   &   REF_no_Equip.Text   &   " ',   "

      strSQL   &=   "order_date= ' "   &   converttoDate(order_date.Text)   &   " ',   "
    strSQL   &=   "confirm_date= ' "   &   converttoDate(confirm_date.Text)   &   " ',      
      ......

Public   Function   converttoDate(ByVal   itemobject   As   Object)   As   Object     '判断某字段为空,避免显示出错
        Dim   needdate   As   Date
          If   itemobject   =   " "   Then
                  Return   System.DBNull.Value
                Else
                      needdate   =   CDate(itemobject)
                      Return   needdate
          End   If
        End   Function

为什么当我order_date文本框里什么也不输入的时候,点击更新。
会出现“标准表达式中数据类型不匹配”
怎么处理。

------解决方案--------------------
return DBNull.value时肯定会出错.
------解决方案--------------------
你看看生成的sql就知道发生什么事了.
------解决方案--------------------
日期不能为 ' ' 可以为 null
------解决方案--------------------
处理输入字符串的时候

if itemobject= " " then
return itemobject = "null "
else
return itemobject = " ' " & itemobject & " ' "
end if

生成sql的时候

strSQL = "UPDATE Client_tbl_item SET "
......
strSQL &= "REF_no_equip= " & converttoDate(REF_no_Equip.Text) & ", "


//最主要的问题是sql只是一个字符串。你程序生成的sql当null的时候就变成: "columnname = ' " & dbnull.value & " ' " , 正确的是 " columnname = null "。这是你出现错误的地方。
另外你没有必要把时间用cdate转换。还是那句话,sql是个字符串。你转了之后在生成sql的时候,又给你转回去了,所以这是没有必要的操作。
------解决方案--------------------
根据错误找出问题.
------解决方案--------------------
你把strSQL 生成的sql语句放到数据库里执行,不是通过程序执行,如果没有错,看你的程序,如果有错,你在数据库里调很容易发现哪里的错误
------解决方案--------------------
顶一下,学习
------解决方案--------------------
试看看:
If itemobject is null orElse itemobject.tostring = " " Then
Return " "
Else
needdate = CDate(itemobject)
Return needdate
End If

------解决方案--------------------
这个问题挺奇怪的嘛
学习中。。。