使用VB6将DAO日期时间字段重置为空

时间:2014-09-25 17:41:59

标签: date vb6 dao

在旧的VB6程序中,我有一个与表单上的文本控件相关联的数据控件。一些表字段是JET数据库中的日期时间字段。

日期时间字段没有默认值,因此首次显示在表单上时,它们显示为空白。最终设置它们时,文本字符串将被验证为日期,数据控件将正确更新记录。

如果用户希望擦除日期(例如,先前数据输入的校正),则他们只是将该字段空白。保存时不会发生错误,但不会更新受影响的日期时间字段。再次查看记录时,最后输入的日期可见。

检查文本控件的DataChanged属性后,我可以看到日期值已更改为空白(= cNullString)。

因此,我假设记录的最终保存忽略了cNullString,因为它认为它对于datetime字段无效。

当我的用户输入空白时,如何将日期时间字段强制为空,以便下次查看时它会再次为空白?

2 个答案:

答案 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