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数据库日期型字段不能设为空值。本人参阅了许多帖子,但仍未得到较好解决,请高手指教,如何修改?
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数据库日期型字段不能设为空值。本人参阅了许多帖子,但仍未得到较好解决,请高手指教,如何修改?
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数据库日期型字段不能设为空值。本人参阅了许多帖子,但仍未得到较好的解决方案,请高手指教,如何修改?
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
------------------------------------------------------------
你理解错了我是让你在Access2000或Access2002下直接修改数据库文件,
在设计视图模式下,将该字段在常规选项中“必填字段”设为“否”。。
在数据库中,字段值为 Null 是表示没有写过值。一旦写过,就不可恢复了(即使是字符型,也只能写成空串,而不是 Null),除非数据库允许这样做。你可以有下列选择:1 如果一定要把一条记录的某字段搞回 Null,就把数据复制出来,删除原记录,重新添加一条记录,将数据(除要设置Null的以外)写进去。没有写的就是 Null。2 日期值是数值型的。0 代表 1889-12-30。不妨将需要写 Null 的日期记录写 0。显示的时候判断一下,是 Int(日期值)=0 就不显示。当然,你的记录中不能有出生与 1889-12-30 的人。
先将日期型字段的默认值设置为 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
代码如下:
'判断日期格式是否正确
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
在 Access 2000 下创建的数据库,只要日期类型字段不设置为“必填字段”(Required = False),日期是可以回写为 Null 的。与默认值无关。
实验了一下:
在 Access 2000 下创建的数据库,只要日期类型字段不设置为“必填字段”(Required = False),日期是可以回写为 Null 的。与默认值无关。
----------------------------------------------------------
这是不错。添加新记录时,空值(textbox不填任何字符)是可以的,但在修改记录时,将textbox中原来的日期删除为空值,如入党时间原来是1986-12-26,现在将其删除为空,在更新记录时(Adodc1.Recordset.Update)就会出现错误。
返回一个值,用以指示字段是否需要一个非 Null 的值。Required 属性的返回值是:值 描述
True 不允许 Null 值。
False 允许 Null 值。 Required 属性可以与 AllowZeroLength 属性一起使用,来确定Value 属性设置的有效性。如果 Required 被置为 False,该列除了能包含 Null 值,也能包含满足由 AllowZeroLength 属性的设置所指定条件的值。
rs.Update没有问题。而且数据库中日期字段也被清空。cn.execute "Update table1 Set sdate = Null" 也同样有效。
--------------------------------
这是不错。添加新记录时,空值(textbox不填任何字符)是可以的,但在修改记录时,将textbox中原来的日期删除为空值,如入党时间原来是1986-12-26,现在将其删除为空,在更新记录时(Adodc1.Recordset.Update)就会出现错误。
--------------------------------
If Not IsDate(Text1.Text) Then
Rs("日期")=CDate(Text1.Text)
Else
Rs("日期")=Null
End If