2

設定

Web サービスのストレス テストを実行するための VBScript があります。このスクリプトは、測定値のデータ ファイルを作成し、各レコードに一般的な日付/時刻のタイムスタンプを付けます。

FormatDateTime(Now(), 0)

これは次のような日付を作成します

mm/dd/yyyy hh:mm:ss [AM|PM]

このデータ ファイルを MS-Access 2003 データベースにインポートする必要があります。TimeStampAccess データベースのテーブルには、 のデータ型Date/Timeと形式の と呼ばれる列がありますGeneral Date

私のインポート仕様にはTimestamp、Date Type の名前が付いたフィールドがあり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です。

混乱を引き起こしているのはAM/PMの存在でしょうか?

あなたは米国のロケールにいますか?

試すSetLocale(2057)

これにより、スクリプトがen-GB(UK)ロケールに配置されます。デフォルトの日時形式はdd/mm / yyyy hh:mm:ssです。その24時間、おそらくあなたのインポートはそのフォーマットを好むでしょう。

于 2009-01-13T17:18:34.310 に答える
1

データファイルをスキップして、結果をデータベースに直接書き込んでみませんか?

編集:または、このスクリプトを使用して、ファイルからDBにデータを移動します。


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 で日付出力を処理して、日付の先頭に 0 と 4 桁の年があることを確認する方法はありますか? これを行うと、最初の 10 文字が明確な日付であることがわかっているため、それをテキスト フィールドとしてインポートしてから処理できます。その後、少しのデータ マッサージで時刻を解析できます。それが不可能であるが、日付と時刻の間にスペースがあることがわかっている場合は、テキストとして再度インポートし、スペースを区切り文字として使用して時刻から日付を解析し、時刻フィールドを処理できます。

インポート後にデータを解析する必要はないとおっしゃいましたが、インポート データを Access が処理できる形式に変換できない場合は、選択の余地がありません。

別の考え:

Excel のインポート機能を試しましたか? 表面的には Access のインポートに似ているかもしれませんが、まったく同じデータに対して完全に異なる結果が得られることがよくあります。

申し訳ありませんが、決定的なものを提供することはできません。

于 2009-01-14T00:48:24.637 に答える