将text1~text5的内容作为一条记录插入到表中,数据库表的有三个字段是时间格式,两个是文本格式(其中一个是关键字),关键字的textbox肯定有输入内容,但是其他字段的textbox只要有一个缺省,就没法插入到表中,提示数据类型不匹配,请问该怎么解决?(数据库中除关键字外都已经设了可以为空的条件)
各位大虾帮忙!

解决方案 »

  1.   

    不管TextBox有没有值,都给插入就行:
    insert into 表 values('" & Text1.Text & "','" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "')"
      

  2.   

    strsql=" insert into table(日期字段) values("& iif(text3.text="","NULL","#" & text3.text & "#")")"
      

  3.   

    用ado
    Dim cnn As ADODB.Connection
    Dim strcnn As String
    Dim rs As ADODB.Recordset
    Dim rs_db As ADODB.Recordsetstrcnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
          Set cnn = New ADODB.Connection
          cnn.Open strcnn
          strsql_db = "select * from table"
          cnn.Execute strsql_db
          Set rs_db = New ADODB.Recordset
          rs_db.Open strsql_db, cnn, adOpenKeyset, adLockOptimistic
          do while not rs_db.eof
             rs_db.addnew
                rs.Fields("jh_dj") = text1.text & ""
                或者
                if isnull(rs.fields("jh_dj")) then
                   rs.fields("jh_dj")=""
                else
                   rs.Fields("jh_dj") = text1.text 
                end if   
             rs_db.update
             rs_db.movenext
          loop
      

  4.   

    TO faysky2() :我原来的逻辑就是这样的TO Leftie(左手,为人民币服务) :试过,对于文本格式的可以,但是对于时间格式的还是不凑效啊,怎么回事??TO  cuilei197979(风):这个好像不太适合我用,我的是好多个记录一起保存的,但是用addnew的话,一执行该语句就会把text里面的内容全部清除
      

  5.   

    根据Leftie(左手,为人民币服务)的意见,我试着修改了一下,文本的可以,但是一旦把日期格式的字段也改成这种表达,还是会报错:标准表达式中数据类型不匹配我的逻辑是这样的,text5~7都是日期格式,其余为文本
    Private Sub Command1_Click()
    strDSN = "DSN=合同跟踪"
    CONN.Open strDSN
    Dim rs1 As New Recordset
       Dim strSql As String, strTemp As String, i%, lowLimit As Long, upLimit As Long
        lowLimit = CLng(Mid(Text1.Text, 5)) 
        upLimit = CLng(Mid(Text8.Text, 5)) 
        For i = lowLimit To upLimit
            strTemp = ""
            strTemp = Left(Trim(Text1.Text), 4) '从Text1.Text中取出到"05电",根据你的具体情况来修改
            strTemp = strTemp & Format(i, "0000") '0的个数具体根据你的主键的名称来定
            strSql = "insert into 标准委派 values('" & strTemp & "','" & IIf(Text2.Text = "", "", "#" & Text2.Text & "#") & "','" & IIf(Text3.Text = "", "", "#" & Text3.Text & "#") & "','" & Text4.Text & "','" & IIf(Text5.Text = "", "", "#" & 
                                                    ----------------
    Text5.Text & "#") & "','" & Text6.Text & "','" & Text7.Text & "')"   
    -----------
             rs1.CursorLocation = adUseClient
         rs1.Open strSql, CONN, adOpenKeyset, adLockOptimistic
        Next
    End Sub
      

  6.   

    insert into 语句改为AddNew语句:......
    rs1.Open "Select Top 1 * from 标准委派",CONN,adOpenKeyset,adLockOptimistic
    For i = lowLimit To upLimit
        strTemp = ""
        strTemp = Left(Trim(Text1.Text), 4) '从Text1.Text中取出到"05电",根据你的具体情
    况来修改
        '不用insert into 语句,这里用AddNew语句:
        rs1.AddNew
        rs1(0)=strTemp
        rs1(1)=Text1.Text
        rs1(2)=Text2.Text
        rs1(3)=Text3.Text
        rs1(4)=Text4.Text
        If IsDate(Text5.Text) then rs1(5)=CDate(Text5.Text)
        If IsDate(Text6.Text)then rs1(6)=CDate(Text6.Text)
        If IsDate(Text7.Text) then rs1(7)=CDate(Text7.Text)
        rs1.UpDate
    Next
    End Sub
      

  7.   

    strsql=" insert into table(日期字段)
     values("& iif(not isdate(text3.text),"NULL","#" & text3.text & "#") &")"
      

  8.   

    TO faysky2() :谢谢你,根据你的修改现在已经可以实现日期部分为空的记录插入了,可我现在还有个困惑,就是删除和修改的语句,也是用FOR循环,但是提示我的where语句语法错误,
    请问该怎么写for循环的删除和修改、刷新??
    For i = lowLimit To upLimit
        strTemp = ""
        strTemp = Left(Trim(Text1.Text), 4)     '从Text1.Text中取出到"05电"
        strTemp = strTemp & Format(i, "0000")
      
        strSql = "DELETE FROM 营业资料签收 WHERE 生产工号='" & strTemp & "')"
       CONN.Execute (strSql)
          
    Next
      

  9.   

    SQL语句没写对,后面多了个),改一下:
    strSql = "DELETE FROM 营业资料签收 WHERE 生产工号='" & strTemp & "'"
      

  10.   

    LZ是读取记录后给textbox赋值碰到问题了吧,我以前也碰到过,一旦数据库有了变动,就会导致以前的数据读出来出错。解决方案是在你每一个赋值的字段后面加一个空的"",这样数据不会是null了,也就不会出错。
    例如:text1.text=Data1.Recordset.Fields("abc").Value & ""