3

Visual Basic で SQL を使用して、Access2002/3 モードで実行されている Access 2007 に日付と時刻の値を挿入しようとしています。私のコードを使用して、テキスト文字列と数値をテーブルに挿入することができました。ただし、DateTime フィールドでは構文エラーが発生します。Access のフィールドは、日付/時刻フィールド タイプとして設定されます。

以下は、データベース アクセス関数のクエリを生成する最初の関数です。

Public Function NewUpload(ByVal UploadType As String) As Single

    Dim UploadNumber As Single
    Dim ColumnString As String
    Dim ValueString As String

    If DatabaseConnection("SELECT ID_UPL FROM tabUpload", "Read Recordset") = "Error" Then GoTo close
    Do Until rdrOLEDB.Read = False
        If Val(rdrOLEDB.Item(0).ToString()) > UploadNumber Then UploadNumber = Val(rdrOLEDB.Item(0).ToString())
    Loop
    rdrOLEDB.Close()
    cnnOLEDB.Close()

    UploadNumber = UploadNumber + 1

    'Update Uploads table:
    ColumnString = "ID_UPL,DateTime,IDUser,DataCalc"
    ValueString = Format(UploadNumber, "0000") & ",#" & Now.ToLongDateString & " " & Now.ToLongTimeString & "#,'" & My.User.Name & "','" & UploadType & "'"
    If DatabaseConnection("INSERT INTO tabUpload(" & ColumnString & ") VALUES(" & ValueString & ")", "Non-Query") = "Error" Then GoTo Close

    NewUpload = UploadNumber

閉じる: cnnOLEDB.Close()

End Function

データベースに接続する2番目の関数は次のとおりです

Public Function DatabaseConnection(ByVal Query As String, ByVal Task As String) As String
    'On Error GoTo Err

    cnnOLEDB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataDirectoryName & DatabaseFileName
    cmdOLEDB.Connection = cnnOLEDB
    cmdOLEDB.CommandText = Query
    cnnOLEDB.Open()

    Select Case Task
        Case "Read Recordset"
            rdrOLEDB = cmdOLEDB.ExecuteReader()
            DatabaseConnection = "Read Recordset"
        Case "Read Scalar"
            DatabaseConnection = Str(cmdOLEDB.ExecuteScalar)
        Case "Non-Query"
            DatabaseConnection = Str(cmdOLEDB.ExecuteNonQuery())
            DatabaseConnection = "Non-Query"
    End Select

    Exit Function
Err:
    MsgBox("Database connection error.")
    DatabaseConnection = "Error"

End Function

このコードを実行すると、次のクエリが取得されます。 INSERT INTO tabUpload(IDUPL, DateTime, User, DataCalc) VALUES(0003, #17 August 2012 14:23:27#, 'UK\Pej', 'Calc')"

また、フォーマットを使用して DateTime のいくつかのバリエーションを試し、現在 (年) yyyy-mm-dd などを指定しています。

どんな助けでも大歓迎です。

4

3 に答える 3

5

日時とユーザーはどちらも予約語であり、角かっこで囲む必要があります。それ以外の場合は、その日付で実行されます。

 INSERT INTO tabUpload(IDUPL, [DateTime], [User], DataCalc) 
 VALUES(0003, #17 August 2012 14:23:27#, 'UK\Pej', 'Calc')"
于 2012-08-17T14:32:52.910 に答える
2

Vb.NetNowを取得して、そこからリテラル値を作成し、そのリテラルを日付/時刻フィールドに挿入します。ただし、Access db エンジンは独自の関数を提供するため、その関数をステートメントNow()で使用できます。INSERT

INSERT INTO tabUpload (IDUPL, [DateTime], [User], DataCalc)
VALUES(3, Now(), 'UK\Pej', 'Calc')
于 2012-08-17T15:07:31.660 に答える
0

日付をODBC標準形式で挿入してみてください。

Format (Date, "yyyy-mm-ddThh:nn:ss")

format関数のドキュメントは次のとおりです。

于 2012-08-17T14:33:40.893 に答える