在旧的VB6程序中,我有一个与表单上的文本控件相关联的数据控件。一些表字段是JET数据库中的日期时间字段。
日期时间字段没有默认值,因此首次显示在表单上时,它们显示为空白。最终设置它们时,文本字符串将被验证为日期,数据控件将正确更新记录。
如果用户希望擦除日期(例如,先前数据输入的校正),则他们只是将该字段空白。保存时不会发生错误,但不会更新受影响的日期时间字段。再次查看记录时,最后输入的日期可见。
检查文本控件的DataChanged属性后,我可以看到日期值已更改为空白(= cNullString)。
因此,我假设记录的最终保存忽略了cNullString,因为它认为它对于datetime字段无效。
当我的用户输入空白时,如何将日期时间字段强制为空,以便下次查看时它会再次为空白?
答案 0 :(得分:1)
务必将TextBox.DataFormat设置为" Date"或通过IDE的特定日期格式。然后底层的StdDataFormat对象应该有它的NullValue属性=""它变得有效了。
正如文档所说:
类型属性设置为fmtGeneral时忽略。每次获取空字段时都会读取 NullValue 属性。
我不确定这可以在代码中完全设置。在设计时在IDE中设置时,您可以将属性设置为(美国英语语言环境):
BeginProperty DataFormat
Type = 1
Format = "M/d/yyyy"
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 1033
SubFormatType = 3
EndProperty
然而,SubFormatType
似乎是关键,并且在运行时似乎没有公开此属性进行更改。
注意强>
针对ADO数据控件进行测试,而不是老化的DAO版本。然而,这些绑定属性超越了ADO-DAO划分,因此这应该是适用的。
答案 1 :(得分:0)
如果编写DAO代码来清除Date字段,我发现我必须使用“Empty”。空和“”不起作用。所以对于字段dtmDelivery(类型日期),我不得不使用以下内容。 strDelivery只是一个包含日期的字符串。
Set rst = dbs.OpenRecordset("tblSomething", dbOpenDynaset)
If (strDelivery = "") Then
rst!dtmDelivery = Empty
Else
rst!dtmDelivery = strDelivery
End If
rst.Update