Импорт VBScript Общая дата и время в MS Access Столбец даты / времени - PullRequest
2 голосов
/ 13 января 2009

Настройка

У меня есть 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 сорвался на этом.

Ответы [ 4 ]

1 голос
/ 13 января 2009

Почему бы не пропустить файл данных и записать результаты непосредственно в базу данных?

EDIT: Или используйте этот скрипт для перемещения данных из файла в БД.


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 
1 голос
/ 13 января 2009

Из этой ссылки ; Я могу имитировать функцию 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")
1 голос
/ 13 января 2009

VBScripts Функция FormatDateTime не поддерживает строки общего формата, только ограниченный набор констант, и 0 - это единственный выбор, который необходимо включить как дату, так и время.

Может ли быть беспорядок в AM / PM, что вызывает путаницу?

Вы находитесь в США?

Попробуйте SetLocale(2057)

Это помещает скрипт в локаль en-GB (UK). Формат даты и времени по умолчанию: дд / мм / гггг чч: мм: сс. Его 24 часа, возможно, ваш импорт предпочел бы этот формат.

0 голосов
/ 14 января 2009

Я не знаю, поможет ли это, но есть ли способ обработать вывод даты в VBScript, чтобы убедиться, что даты имеют начальные нули и 4-значные годы? Если вы сделаете это, то можете импортировать его в виде текстового поля и затем обработать его, потому что вы знаете, что первые 10 символов являются однозначной датой, а затем вы можете проанализировать время с помощью небольшого объема данных. Если это невозможно, но вы знаете, что между датой и временем есть ПРОБЕЛ, вы можете снова импортировать текст и проанализировать дату по времени, используя пробел в качестве разделителя, а затем обработать поле времени.

Я знаю, что вы сказали, что не хотите анализировать данные после импорта, но если вы не можете получить данные импорта в формате, который может обрабатывать Access, у вас нет выбора.

Еще одна мысль:

Пробовали ли вы использовать функцию импорта в Excel? Он может внешне напоминать импорт Access, но часто дает вам совершенно разные результаты на одних и тех же данных.

Извините, я не могу предложить ничего определенного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...