我有一个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对此进行了抨击。
答案 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导入,但它通常会在完全相同的数据上完成不同的结果。
抱歉,我无法提供任何确定的内容。