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 などを指定しています。
どんな助けでも大歓迎です。