У меня есть 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
Файл данных разделен табуляцией с именами полей в первой строке.
Когда я импортирую свой файл данных, каждая запись выходит из строя в поле Timestamp с ошибкой Type Conversion Failure.
Есть ли способ импортировать данные как есть, или мне нужно сначала «преобразовать» поле отметки времени в 24-часовой формат даты / времени? Если последнее, есть ли способ отформатировать метку времени в моем коде VBScript, чтобы записать дату / время в 24-часовом формате? Я пытался
FormatDateTime(Now(), "mm/dd/yyyy hh:mm:ss")
но VBScript отказывался от этого.
VBScript записывает данные в плоский файл (разделенный табуляцией) и ставит метку времени для каждой записи. Поскольку у меня в файле более 450 000 записей, я хотел бы импортировать их в Access, чтобы фильтровать, запрашивать и анализировать.





Функция VBScripts FormatDateTime не поддерживает строки общего формата, только ограниченный набор констант, и 0 - это единственный вариант, который вы должны включить как дату, так и время.
Может быть, присутствие AM / PM вызывает путаницу?
Вы находитесь в США?
Попробуйте SetLocale(2057)
Это помещает сценарий в локаль en-GB (UK). Формат даты и времени по умолчанию - дд / мм / гггг чч: мм: сс. Его 24 часа, возможно, ваш импорт предпочтет этот формат.
Почему бы не пропустить файл данных и записать результаты прямо в базу данных?
Обновлено: Или используйте этот сценарий для перемещения данных из файла в БД.
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
Это мысль, но для унаследованных мной сценариев потребуется серьезная операция. Возможно, в долгосрочной перспективе ...
Из этого ссылка на сайт; Я могу имитировать функцию 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
Из статьи:
The MSSTDFMT object depends on the availability of MSSTDFMT.dll, which is installed by Visual Studio 6.0.
MSSTDFMT.dll, похоже, доступен на серверах Windows XP и Windows 2003; Я проверил несколько машин, на которых никогда не устанавливалась MS Visual Studio и на них присутствовала DLL.
Я изменил свой код VBScript, чтобы использовать эту функцию, чтобы поместить даты в формате, который Access может импортировать:
Format(Now(), "mm/dd/yyyy hh:mm:ss")
Отлично. Тем не менее, я все еще думаю, что вам следует импортировать как ISO, а не в локальном формате даты - MS печально известна тем, что ошибалась, когда есть некоторая двусмысленность.
К сожалению, похоже, что Access не распознает даты ISO при импорте, независимо от того, как определен столбец.
Я не знаю, поможет ли это, но есть ли способ обработать вывод даты в вашем VBScript, чтобы убедиться, что даты имеют ведущие нули и 4-значные годы? Если вы это сделаете, вы можете импортировать его как текстовое поле, а затем обработать, потому что вы будете знать, что первые 10 символов являются недвусмысленной датой, а затем вы можете проанализировать время, немного обработав данные. Если это невозможно, но вы знаете, что между датой и временем есть ПРОБЕЛ, тогда вы можете снова импортировать как текст и проанализировать дату по времени, используя пробел в качестве разделителя, а затем обработать поле времени.
Я знаю, что вы сказали, что не хотите анализировать данные после импорта, но если вы не можете получить данные импорта в формате, который может обработать Access, у вас нет выбора.
Другая мысль:
Вы пробовали функцию импорта Excel? Внешне он может напоминать импорт из Access, но часто дает разные результаты на одних и тех же данных.
К сожалению, я не могу предложить ничего окончательного.
Вы заполняете поле даты из VBScript или записываете дату в файл и импортируете его в БД?