Access日期型字段空值更新问题,搜索了许多帖子,但始终没有解决。   在窗体上用Adodc1将数据库abc.mdb中的表[da]中的日期型字段‘出生日期’与TextBox连接,另有“添加”command1、“修改”command2、“保存”command3按钮。Private Sub Text1_KeyPress(KeyAscii As Integer) '检测输入格式,允许日期型或空值,回车转下格
If KeyAscii = 13 Then
  If Text6.Text <> "" Then
      If IsDate(Text1) = False Then
         MsgBox "格式不对!应输入日期格式(yyyy-mm-dd)", , "警告"
         Text1.Text = ""
         Text1.SetFocus
      Else
         Text2.SetFocus
      End If
  Else
      Text2.SetFocus
  End If
End If
End SubPrivate Sub Command1_Click() '添加按钮
  Adodc1.Recordset.AddNew
  Text1.Locked = False
  Command1.Visible = False
  Command2.Visible = False
  Command3.Visible = True
End SubPrivate Sub Command2_Click() '修改按钮
  Text1.Locked = False
  Command1.Visible = False
  Command2.Visible = False
  Command3.Visible = True
End SubPrivate Sub Command3_Click() '保存按钮
  Adodc1.Recordset.Update
  Text1.Locked = True
  Command1.Visible = True
  Command2.Visible = True
  Command3.Visible = False
End Sub   按下“添加”command1时,执行Adodc1.Recordset.AddNew,然后按“保存”command2按钮,Adodc1.Recordset.Update,保存数据,此时,TextBox1中填入日期或不填值(为空),均可保存新添记录,还会出错;但如果用“修改”,将TextBox1中原来的日期清除为空,再“保存”时,系统就会提示出错,主要是因为Access数据库日期型字段不能设为空值。本人参阅了许多帖子,但仍未得到较好解决,请高手指教,如何修改?

解决方案 »

  1.   

    Access日期型字段空值更新问题,搜索了许多帖子,但始终没有解决。(上有错字,重发)   在窗体上用Adodc1将数据库abc.mdb中的表[da]中的日期型字段‘出生日期’与TextBox连接,另有“添加”command1、“修改”command2、“保存”command3按钮。Private Sub Text1_KeyPress(KeyAscii As Integer) '检测输入格式,允许日期型或空值,回车转下格
    If KeyAscii = 13 Then
      If Text1.Text <> "" Then
          If IsDate(Text1) = False Then
             MsgBox "格式不对!应输入日期格式(yyyy-mm-dd)", , "警告"
             Text1.Text = ""
             Text1.SetFocus
          Else
             Text2.SetFocus
          End If
      Else
          Text2.SetFocus
      End If
    End If
    End SubPrivate Sub Command1_Click() '添加按钮
      Adodc1.Recordset.AddNew
      Text1.Locked = False
      Command1.Visible = False
      Command2.Visible = False
      Command3.Visible = True
    End SubPrivate Sub Command2_Click() '修改按钮
      Text1.Locked = False
      Command1.Visible = False
      Command2.Visible = False
      Command3.Visible = True
    End SubPrivate Sub Command3_Click() '保存按钮
      Adodc1.Recordset.Update
      Text1.Locked = True
      Command1.Visible = True
      Command2.Visible = True
      Command3.Visible = False
    End Sub   按下“添加”command1时,Adodc1.Recordset.AddNew,然后按“保存”command2按钮,Adodc1.Recordset.Update,保存数据,此时,TextBox1中填入日期或不填值(为空),均可保存新添记录,不会出错;但如果用“修改”,将TextBox1中原有的日期清除为空,再“保存”时,系统就会提示出错,主要是因为Access数据库日期型字段不能设为空值。本人参阅了许多帖子,但仍未得到较好的解决方案,请高手指教,如何修改?
      

  2.   

    建议用DTPicker控件代替文本框,几乎不用编程
      

  3.   

    直接修改Access数据库文件,将该日期型字段设置为允许空值
      

  4.   

    关键就是: Access数据库日期型字段不能设置为允许空值呀!!!
      

  5.   

    用DTPicker控件与textbox合用,在text2中显示DTPicker内的日期,为何无反映?Private Sub Text2_KeyPress(KeyAscii As Integer)
    On Error GoTo err1:
      If KeyAscii = 13 Then
          If IsDate(Text2) = True Then
              DTPicker1.Value = Text2
          Else
              If Text2 = "" Then
                  DTPicker1.Value = Null
              Else
                  MsgBox "输入格式错误!", 16
              End If
          End If
      End If
      Exit Sub
    err1:
      MsgBox "日期输入错误!", 16
    End Sub
    Private Sub DTPicker1_Change()
      If DTPicker1.Value = Null Then
           Text2.Text = ""
           GoTo 5
      End If
        Text2.Text = DTPicker1.Value
    5 End Sub
      

  6.   

    关键就是: Access数据库日期型字段不能设置为允许空值呀!!!
    ------------------------------------------------------------
    你理解错了我是让你在Access2000或Access2002下直接修改数据库文件,
    在设计视图模式下,将该字段在常规选项中“必填字段”设为“否”。。
      

  7.   

    日期型字段可以通过设置为Null来填为空数据.
      

  8.   

    纠正你一个认识上的错误。Null 是不可回写的。
    在数据库中,字段值为 Null 是表示没有写过值。一旦写过,就不可恢复了(即使是字符型,也只能写成空串,而不是 Null),除非数据库允许这样做。你可以有下列选择:1 如果一定要把一条记录的某字段搞回 Null,就把数据复制出来,删除原记录,重新添加一条记录,将数据(除要设置Null的以外)写进去。没有写的就是 Null。2 日期值是数值型的。0 代表 1889-12-30。不妨将需要写 Null 的日期记录写 0。显示的时候判断一下,是 Int(日期值)=0 就不显示。当然,你的记录中不能有出生与 1889-12-30 的人。
      

  9.   

    TO 楼主、of123(),找到一个解决方法:
        先将日期型字段的默认值设置为 Null ,程序中用IF语句判断一下,就OK了(我程序中的相关代码“BirthAge”是日期类型字段):
        With rs
            ......
            .Fields("Name") = Trim(Text1(4).Text)
            .Fields("Gender") = Trim(Text1(5).Text)
            If Testtxt(Text1(6)) Then
                .Fields("BirthAge") = Format(Text1(6).Text, "yy-mm-dd")
            Else
                .Fields("BirthAge") = Null
            End If
            ......    End With
        rs.Update
        rs.Requery
        rs.Close
        Set rs = Nothing
      

  10.   

    建议将错就错把ACCESS数据库文件日期型直接改为文本型,判断输入数据是否为日期型直接用代码实现,这是一种最懒的方法,有时候我懒的时候也会用!
    代码如下:
        '判断日期格式是否正确
        If Text1.Text <> "" And Not IsDate(Trim(Text1.Text)) Then
            MsgBox "报价日期格式不正确或不完整", vbOKOnly + vbExclamation, "警告"
            Text1.SetFocus
            Exit Sub
        End If
        Form1.Adodc1.Recordset.AddNew
    Text1.Text = Format(Trim(Text1.Text), "yyyy-m-d") & ""
    Form1.Adodc1.Recordset.update
      

  11.   

    实验了一下:
    在 Access 2000 下创建的数据库,只要日期类型字段不设置为“必填字段”(Required = False),日期是可以回写为 Null 的。与默认值无关。
      

  12.   

    ---------------------------------------------------------
    实验了一下:
    在 Access 2000 下创建的数据库,只要日期类型字段不设置为“必填字段”(Required = False),日期是可以回写为 Null 的。与默认值无关。
    ----------------------------------------------------------
        这是不错。添加新记录时,空值(textbox不填任何字符)是可以的,但在修改记录时,将textbox中原来的日期删除为空值,如入党时间原来是1986-12-26,现在将其删除为空,在更新记录时(Adodc1.Recordset.Update)就会出现错误。
      

  13.   

    Required 属性
          
    返回一个值,用以指示字段是否需要一个非 Null 的值。Required 属性的返回值是:值     描述 
    True   不允许 Null 值。 
    False  允许 Null 值。 Required 属性可以与 AllowZeroLength 属性一起使用,来确定Value 属性设置的有效性。如果 Required 被置为 False,该列除了能包含 Null 值,也能包含满足由 AllowZeroLength 属性的设置所指定条件的值。
      

  14.   

    js_jdc(海风):我试过了,写入日期数据后,再 rs!sdate = Null 
    rs.Update没有问题。而且数据库中日期字段也被清空。cn.execute "Update table1 Set sdate = Null" 也同样有效。
      

  15.   

    我说什么来着?又讨论回来了吧?哈哈
    --------------------------------
        这是不错。添加新记录时,空值(textbox不填任何字符)是可以的,但在修改记录时,将textbox中原来的日期删除为空值,如入党时间原来是1986-12-26,现在将其删除为空,在更新记录时(Adodc1.Recordset.Update)就会出现错误。
    --------------------------------
    If Not IsDate(Text1.Text) Then
        Rs("日期")=CDate(Text1.Text)
    Else
        Rs("日期")=Null
    End If
      

  16.   

    今天比较困,不给你试过了,如果Null不行的话,试试用VbNull