我用下面的代碼:將文件添加附件列在Access數據庫
Public Sub Add_File(Update_Table As Integer)
Dim Fpath = My.Settings.Database_Connection_String
Dim fd As OpenFileDialog = New OpenFileDialog()
Dim strFileName As String
fd.Title = "Open File Dialog"
fd.InitialDirectory = "C:\"
fd.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
fd.FilterIndex = 2
fd.RestoreDirectory = True
fd.Multiselect = True
If fd.ShowDialog() = DialogResult.OK Then
Dim FileRow
Try
FileRow = Form1.Projects_DGV.SelectedCells.Item(0).RowIndex
Catch ex As Exception
FileRow = 0
End Try
Dim FileX = Form1.Projects_DGV.Item(0, FileRow).Value
For Each file As String In fd.FileNames
strFileName = file
' this code requires that your project have the following COM Reference:
' Microsoft Office 14.0 Access Database Engine Object Library
Dim dbe As New Microsoft.Office.Interop.Access.Dao.DBEngine
Dim db As Microsoft.Office.Interop.Access.Dao.Database = dbe.OpenDatabase(My.Settings.Database_Location)
Dim rstRecord As Microsoft.Office.Interop.Access.Dao.Recordset = db.OpenRecordset(_
"SELECT * FROM [Projects] WHERE [Project ID]=" & FileX, _
Microsoft.Office.Interop.Access.Dao.RecordsetTypeEnum.dbOpenDynaset)
rstRecord.Edit()
Dim rstAttachments As Microsoft.Office.Interop.Access.Dao.Recordset2
If Update_Table = 1 Then
rstAttachments = rstRecord.Fields("Invoice").Value
ElseIf Update_Table = 2 Then
rstAttachments = rstRecord.Fields("Software Handover").Value
ElseIf Update_Table = 3 Then
rstAttachments = rstRecord.Fields("Other Documents").Value
ElseIf Update_Table = 4 Then
rstAttachments = rstRecord.Fields("Project Documents").Value
End If
rstAttachments.AddNew()
Dim AttachmentData As Microsoft.Office.Interop.Access.Dao.Field2 = rstAttachments.Fields("FileData")
AttachmentData.LoadFromFile(strFileName)
rstAttachments.Update()
rstAttachments.Close()
rstRecord.Update()
rstRecord.Close()
db.Close()
Next
setupdatagrids()
End If
End Sub
該代碼應該讓我添加文件作爲附件到一個數據庫,它的工作原理在另外兩個項目中很好,但由於某種原因現在不能工作。該代碼失敗在這條線:
Dim rstRecord As Microsoft.Office.Interop.Access.Dao.Recordset = db.OpenRecordset(_
"SELECT * FROM [Projects] WHERE [Project ID]=" & FileX, _
Microsoft.Office.Interop.Access.Dao.RecordsetTypeEnum.dbOpenDynaset)
與錯誤:
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in Alveare - Complete Management Tool.exe
Additional information: Too few parameters. Expected 1.
任何人有任何想法,爲什麼這會是這樣,因爲我傳遞參數?
感謝
是否有可能'FileX'的值包含空格,並且正在搞砸SQL的執行? – jmcilhinney
無論如何應該在SQL中引用'FileX'的值?除非它是一個整數,否則它應該。我也注意到你必須有'Option Strict Off',這從來都不好。它允許各種各樣的問題偷偷摸摸地通過可能更早被捕獲的其他問題。 – jmcilhinney
啊,在所有其他項目中,數據庫的主鍵始終是一個ID整數,但是在這個數據庫中,例如它是一個字符串「F002-X」。爲了解決這個問題,我需要改變什麼? – SilverShotBee