Access日期型字段空值更新问题

时间:2021-06-01 14:50:36
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 Sub

Private Sub Command1_Click() '添加按钮
  Adodc1.Recordset.AddNew
  Text1.Locked = False
  Command1.Visible = False
  Command2.Visible = False
  Command3.Visible = True
End Sub

Private Sub Command2_Click() '修改按钮
  Text1.Locked = False
  Command1.Visible = False
  Command2.Visible = False
  Command3.Visible = True
End Sub

Private 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数据库日期型字段不能设为空值。本人参阅了许多帖子,但仍未得到较好解决,请高手指教,如何修改?



27 个解决方案

#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 Sub

Private Sub Command1_Click() '添加按钮
  Adodc1.Recordset.AddNew
  Text1.Locked = False
  Command1.Visible = False
  Command2.Visible = False
  Command3.Visible = True
End Sub

Private Sub Command2_Click() '修改按钮
  Text1.Locked = False
  Command1.Visible = False
  Command2.Visible = False
  Command3.Visible = True
End Sub

Private 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


请高手指点。

#3


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

#4


up

#5


我也是用DTPicker控件

#6


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

#7


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

#8


用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

#9


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

#10


将该字段在常规选项中“必填字段”设为“否”即可

#11


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

#12


& ""

#13


始终未能解决,请哪位高手具体指导一下,顶楼的代码如何来改?

#14


保存之前先对字段做一次判断,就行了

#15


具体怎么做?请指教!!!

#16


纠正你一个认识上的错误。Null 是不可回写的。
在数据库中,字段值为 Null 是表示没有写过值。一旦写过,就不可恢复了(即使是字符型,也只能写成空串,而不是 Null),除非数据库允许这样做。你可以有下列选择:

1 如果一定要把一条记录的某字段搞回 Null,就把数据复制出来,删除原记录,重新添加一条记录,将数据(除要设置Null的以外)写进去。没有写的就是 Null。

2 日期值是数值型的。0 代表 1889-12-30。不妨将需要写 Null 的日期记录写 0。显示的时候判断一下,是 Int(日期值)=0 就不显示。当然,你的记录中不能有出生与 1889-12-30 的人。

#17


同意of123()

#18


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

#19


建议将错就错把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

#20


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

#21


不推荐使用字符型字段保存日期,会给以后条件查询带来后患。

#22


果然,不用设置默认值。
不错,小有收获。
同意楼上。

#23


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

#24


Required 属性
      
返回一个值,用以指示字段是否需要一个非 Null 的值。

Required 属性的返回值是:

值     描述 
True   不允许 Null 值。 
False  允许 Null 值。 

Required 属性可以与 AllowZeroLength 属性一起使用,来确定Value 属性设置的有效性。如果 Required 被置为 False,该列除了能包含 Null 值,也能包含满足由 AllowZeroLength 属性的设置所指定条件的值。

#25


js_jdc(海风):

我试过了,写入日期数据后,再 

rs!sdate = Null 
rs.Update

没有问题。而且数据库中日期字段也被清空。

cn.execute "Update table1 Set sdate = Null" 也同样有效。

#26


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

#27


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

#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 Sub

Private Sub Command1_Click() '添加按钮
  Adodc1.Recordset.AddNew
  Text1.Locked = False
  Command1.Visible = False
  Command2.Visible = False
  Command3.Visible = True
End Sub

Private Sub Command2_Click() '修改按钮
  Text1.Locked = False
  Command1.Visible = False
  Command2.Visible = False
  Command3.Visible = True
End Sub

Private 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


请高手指点。

#3


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

#4


up

#5


我也是用DTPicker控件

#6


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

#7


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

#8


用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

#9


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

#10


将该字段在常规选项中“必填字段”设为“否”即可

#11


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

#12


& ""

#13


始终未能解决,请哪位高手具体指导一下,顶楼的代码如何来改?

#14


保存之前先对字段做一次判断,就行了

#15


具体怎么做?请指教!!!

#16


纠正你一个认识上的错误。Null 是不可回写的。
在数据库中,字段值为 Null 是表示没有写过值。一旦写过,就不可恢复了(即使是字符型,也只能写成空串,而不是 Null),除非数据库允许这样做。你可以有下列选择:

1 如果一定要把一条记录的某字段搞回 Null,就把数据复制出来,删除原记录,重新添加一条记录,将数据(除要设置Null的以外)写进去。没有写的就是 Null。

2 日期值是数值型的。0 代表 1889-12-30。不妨将需要写 Null 的日期记录写 0。显示的时候判断一下,是 Int(日期值)=0 就不显示。当然,你的记录中不能有出生与 1889-12-30 的人。

#17


同意of123()

#18


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

#19


建议将错就错把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

#20


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

#21


不推荐使用字符型字段保存日期,会给以后条件查询带来后患。

#22


果然,不用设置默认值。
不错,小有收获。
同意楼上。

#23


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

#24


Required 属性
      
返回一个值,用以指示字段是否需要一个非 Null 的值。

Required 属性的返回值是:

值     描述 
True   不允许 Null 值。 
False  允许 Null 值。 

Required 属性可以与 AllowZeroLength 属性一起使用,来确定Value 属性设置的有效性。如果 Required 被置为 False,该列除了能包含 Null 值,也能包含满足由 AllowZeroLength 属性的设置所指定条件的值。

#25


js_jdc(海风):

我试过了,写入日期数据后,再 

rs!sdate = Null 
rs.Update

没有问题。而且数据库中日期字段也被清空。

cn.execute "Update table1 Set sdate = Null" 也同样有效。

#26


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

#27


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