2

设置

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

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

4 回答 4

1

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

会不会是上午/下午的出现导致了混乱?

您在美国地区?

尝试SetLocale(2057)

这会将脚本放入 en-GB(英国)语言环境。默认日期时间格式为 dd/mm/yyyy hh:mm:ss。它的 24 小时也许您的导入会更喜欢这种格式。

于 2009-01-13T17:18:34.310 回答
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 
于 2009-01-13T19:10:16.020 回答
1

从这个链接; 我可以模仿 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 对象取决于由 Visual Studio 6.0 安装的 MSSTDFMT.dll 的可用性。

MSSTDFMT.dll 似乎在 Windows XP 和 Windows 2003 服务器上可用;我检查了几台从未安装过 MS Visual Studio 并且存在 DLL 的机器。

我更改了我的 VBScript 代码以使用此函数将日期置于 Access 可以导入的格式中:

Format(Now(), "mm/dd/yyyy hh:mm:ss")
于 2009-01-13T19:27:28.560 回答
0

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

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

另一个想法:

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

抱歉,我无法提供任何确定的信息。

于 2009-01-14T00:48:24.637 回答