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

时间:2009-01-13 17:02:18

标签: ms-access vbscript import

设置

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

FormatDateTime(Now(), 0)

这会创建

之类的日期
mm/dd/yyyy hh:mm:ss [AM|PM]

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

我的导入规范有一个名为Timestamp的字段,日期类型为Date/Time。在Dates, Times, and Numbers框架中,选择了以下选项:

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

数据文件的制表符用第一行中的字段名称分隔。

问题

导入数据文件时,每个记录在时间戳字段上失败,并显示Type Conversion Failure错误。

问题

有没有办法按原样导入数据,还是必须先将时间戳字段“按下”为24小时日期/时间格式?如果是后者,有没有办法格式化我的VBScript代码中的时间戳,以24小时格式写日期/时间?我试过了

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

但是VBScript对此进行了抨击。

4 个答案:

答案 0 :(得分:1)

VBScripts FormatDateTime函数不支持一般格式字符串只有一组受约束的常量,0是唯一必须包括日期和时间的选择。

可能是导致混淆的AM / PM的存在吗?

您在美国当地?

尝试SetLocale(2057)

这会将脚本置于en-GB(UK)语言环境中。默认日期时间格式为dd / mm / yyyy hh:mm:ss。它的24小时或许你的导入更喜欢这种格式。

答案 1 :(得分:1)

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

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


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 

答案 2 :(得分:1)

从这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代码以使用此函数将日期格式化为Access可以导入:

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

答案 3 :(得分:0)

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

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

另一个想法:

您是否尝试过Excel的导入功能?它可能表面上类似于Access导入,但它通常会在完全相同的数据上完成不同的结果。

抱歉,我无法提供任何确定的内容。

相关问题