我在VS 2010中打开了旧应用程序,并根据弹出的错误语句中的建议进行了更改。但是,仍然无法正常工作的一部分如下所示。
返回的错误是
"文件已由其他用户专门打开,或者您需要获得查看权限才能获得#34;
我正在打开一个访问数据库和"选择"并将其放在Excel工作表中。每次使用应用程序时,工作表的名称都会更改。 这在2003年有效,但在2010年没有。我已经对此进行了调查,但没有一个答案有效。
Dim AccessConn8 As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\UpdateExportFile\ExportFile.mdb")
AccessConn8.Open()
Dim AccessCommand8 As New System.Data.OleDb.OleDbCommand("SELECT * INTO [Excel " & _
"5.0;DATABASE=c:\" & strfilename & ".xls;HDR=YES;].[sheet1] from ExcelExport", AccessConn8) '
Try
AccessCommand8.ExecuteNonQuery()
Catch exe As DataException
Catch exc As System.Exception
MsgBox("EXCEL not updated. Contact your System Administrator. " & strfilename)
MsgBox(" ----> " & exc.Message)
AccessConn8.Close() ' added sat 2/23/15
Exit Sub
End Try
AccessConn8.Close()
Dim obook As Microsoft.Office.Interop.Excel.Workbook
Dim oexcel As Microsoft.Office.Interop.Excel.Application
oexcel = CType(CreateObject("Microsoft.Office.Interop.Excel.Application"), Microsoft.Office.Interop.Excel.Application)
obook = oexcel.Workbooks.Open("c:\" & strFileName & ".xls")
Try
With oexcel
.Visible = False
.Range("C1").Value = "'Store #"
.Range("D1").Value = "'Vendor #"
End With
Catch ex As Exception
MsgBox("error:" & ex.ToString, MsgBoxStyle.Critical, "ERROR")
End Try
' added
Dim myrange As Excel.Range
myrange = oexcel.Range("a1:l90")
myrange.Sort(Key1:=myrange.Range("c1"), Order1:=Excel.XlSortOrder.xlAscending, Header:=Microsoft.Office.Interop.Excel.XlYesNoGuess.xlYes, Orientation:=Excel.XlSortOrientation.xlSortColumns)
obook.Save()
obook.Close()
oexcel.Quit()
你能帮助我找到正确的答案吗?
答案 0 :(得分:0)
我无法确定,但我怀疑这种行为是由连接池引起的,这种连接池在您尝试关闭它之后也会保持连接(也可能是文件)打开。
我建议对上面的代码进行两处更改,包括连接字符串以及打开关闭连接的方式
Using AccessConn8 As New OleDbConnection("...;OLE DB Services = -2;")
AccessConn8.Open
......
' Code as above....
......
End Using
OLE DB Services = -2
禁用此连接的自动使用连接池,而使用语句确保连接完成后使用它关闭和DISPOSED