代码之家  ›  专栏  ›  技术社区  ›  Patrick Cuff

将vbscript常规日期时间导入MS Access日期/时间列

  •  2
  • Patrick Cuff  · 技术社区  · 16 年前

    安装程序

    我有一个驱动Web服务压力测试的vbscript。该脚本创建一个测量数据文件,每个记录时间都有一个常规日期/时间戳:

    FormatDateTime(Now(), 0)
    

    这创建的日期如下

    mm/dd/yyyy hh:mm:ss [AM|PM]
    

    我需要将此数据文件导入MS Access 2003数据库。Access数据库中的表有一列名为 TimeStamp 数据类型为 Date/Time 格式 General Date .

    我的导入规范有一个名为 Timestamp 日期类型为 日期/时间 . 在 Dates, Times, and Numbers 框架选择以下选项:

    Date Order: MDY
    Date Delimiter: /
    Time Delimiter: :
    Four Digit Years: Checked
    

    数据文件以制表符分隔,第一行中有字段名。

    问题

    当我导入数据文件时,每条记录在timestamp字段上都会失败, Type Conversion Failure 错误。

    问题

    有没有一种导入数据的方法,或者我必须先将时间戳字段“按摩”为24小时日期/时间格式?如果是后者,是否可以在我的vbscript代码中格式化时间戳,以24小时格式写入日期/时间?我试过

    FormatDateTime(Now(), "mm/dd/yyyy hh:mm:ss")
    

    但vbscript对此大发雷霆。

    4 回复  |  直到 11 年前
        1
  •  1
  •   AnthonyWJones    16 年前

    vbscripts format time函数不支持常规格式字符串,只支持一组受约束的常量,而0是必须同时包含日期和时间的唯一选项。

    是AM/PM的过时导致了混乱吗?

    你在美国吗?

    尝试 SetLocale(2057)

    这将脚本置于en-GB(UK)区域设置中。默认日期时间格式为dd/mm/yyyy hh:mm:ss。它的24小时,也许您的进口会喜欢这种格式。

        2
  •  1
  •   Tester101    16 年前

    为什么不跳过数据文件直接将结果写入数据库?

    编辑: 或者使用此脚本将数据从文件移动到数据库。

    
    Set DataFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("FileName",1)
    
    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=database.mdb"
    
    Set objRecordset = CreateObject("ADODB.Recordset")
    objRecordset.CursorLocation = 3
    objRecordset.Open "SELECT * FROM TableName" , objConnection, 3, 3
    
    Do Until DataFile.AtEndOfStream
        arrTemp = Split(DataFile.ReadLine, vbTab)
        If IsArray(arrTemp) Then
            objRecordset.AddNew
            objRecordset("FieldName1") = arrTemp(0)
            objRecordset("FieldName2") = arrTemp(1)
            objRecordset("FieldName3") = arrTemp(2)
            objRecordset.Update
        Else
            'Only one item of data is on this line
        End If 
    Loop 
    
    DataFile.Close
    objConnection.Close
    Set DataFile = Nothing
    Set objRecordset = Nothing
    Set objConnection = Nothing 
    
        3
  •  1
  •   Patrick Cuff    16 年前

    由此 link 我能模仿VB Format() 函数将日期格式设置为24小时日期/时间:

    Function Format(vExpression, sFormat) 
    
        set fmt = CreateObject("MSSTDFMT.StdDataFormat") 
        fmt.Format = sFormat 
    
        set rs = CreateObject("ADODB.Recordset") 
        rs.Fields.Append "fldExpression", 12 ' adVariant 
    
        rs.Open 
        rs.AddNew 
    
        set rs("fldExpression").DataFormat = fmt 
        rs("fldExpression").Value = vExpression 
    
        Format = rs("fldExpression").Value 
    
        rs.close: Set rs = Nothing: Set fmt = Nothing 
    
    End Function
    

    从文章中:

    msstdfmt对象取决于 msstdfmt.dll的可用性,即 由Visual Studio 6.0安装。

    msstdfmt.dll似乎在Windows XP和Windows 2003服务器上可用;我检查了一些从未安装过MS Visual Studio的计算机,并且该dll存在。

    我更改了vbscript代码以使用此函数将日期设置为访问可以导入的格式:

    Format(Now(), "mm/dd/yyyy hh:mm:ss")
    
        4
  •  0
  •   sth Alien    11 年前

    我不知道这样做是否有帮助,但是您是否可以在vbscript中处理日期输出以确保日期的前导零和4位年份?如果您这样做,那么您可以将它作为文本字段导入,然后处理它,因为您知道前10个字符是明确的日期,然后您可以通过一些数据按摩来解析时间。如果这不可能,但是您知道日期和时间之间有一个空格,那么您可以再次以文本形式导入,并使用空格作为分隔符分析时间中的日期,然后处理时间字段。

    我知道你说过你不想在导入后解析数据,但是如果你不能将导入数据转换成Access可以处理的格式,那么你就没有选择了。

    另一个想法:

    您尝试过Excel的导入功能吗?从表面上看,它可能与访问导入类似,但它通常会使您在完全相同的数据上得到完全不同的结果。

    抱歉,我不能提供任何明确的信息。