Импортировать общую дату и время VBScript в столбец даты и времени MS Access

Настраивать

У меня есть 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 или записываете дату в файл и импортируете его в БД?

Tester101 13.01.2009 21:47

VBScript записывает данные в плоский файл (разделенный табуляцией) и ставит метку времени для каждой записи. Поскольку у меня в файле более 450 000 записей, я хотел бы импортировать их в Access, чтобы фильтровать, запрашивать и анализировать.

Patrick Cuff 13.01.2009 22:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
11 016
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Функция 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 

Это мысль, но для унаследованных мной сценариев потребуется серьезная операция. Возможно, в долгосрочной перспективе ...

Patrick Cuff 13.01.2009 22:30
Ответ принят как подходящий

Из этого ссылка на сайт; Я могу имитировать функцию 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 печально известна тем, что ошибалась, когда есть некоторая двусмысленность.

BIBD 14.01.2009 03:32

К сожалению, похоже, что Access не распознает даты ISO при импорте, независимо от того, как определен столбец.

Patrick Cuff 14.01.2009 04:21

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

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

Другая мысль:

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

К сожалению, я не могу предложить ничего окончательного.

Другие вопросы по теме