使用VBScript读取ODBC驱动程序后关闭excel文件

时间:2013-09-06 16:26:35

标签: excel vba asp-classic vbscript odbc

我有一个使用ODBC驱动程序读取的excel文件,其中包含以下代码:

 filePath = "folder\myExcelFile.xlsx"

 odbcPath = "DRIVER={Microsoft Excel Driver (*.xls)}; IMEX=1; HDR=YES; "&_
"Excel 8.0; DBQ=" & Server.MapPath(filePath) & ";"    

'xlsx driver 2007+
if InStr( lcase(filePath),".xlsx" ) > 0  then
    odbcPath= "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; "&_
    "DBQ=" & Server.MapPath(filePath) & ";"        
end if  

'Excel processing
Dim objConn
Dim objRs  

set objConn = Server.CreateObject("ADODB.Connection")
set objRs = Server.CreateObject("ADODB.Recordset")

objConn.Open odbcPath 

strSQL = "SELECT * FROM A1:Q50000"

objRs.LockType = 1
set objRs = objConn.Execute(strSQL)    

Do Until objRs.EOF
    ''Do stuff
     myfield = objRs.Fields("fieldName")
     ''...other code...
Loop

objRs.Close
objRs.ActiveConnection = Nothing
set objRs = Nothing

objConn.Close     
set objConn = Nothing

在此之后,当我尝试使用以下内容删除文件时:

Dim objFSO_Del
Set objFSO_Del = CreateObject("Scripting.FileSystemObject")

objFSO_Del.DeleteFile Server.MapPath(filePath), True

我收到permission denied错误,这不应该发生,因为我的IUSR帐户拥有发生此操作的文件夹的所有权限(总控制权)。事实上,当我评论上面发布的代码并尝试删除文件时,操作成功

我正在考虑使用以下方法获取excel记录:

set objExcel = CreateObject("Excel.Application")
set objWorkbook = objExcel.Workbooks.Open(Server.MapPath(filePath))

因为这可以让我有精确的控制来关闭文件并退出Excel过程。

有没有办法可以使用ODBC技术有效地释放和删除excel文件?我做了大量的研究,目前还没有找到解决方案。

非常感谢您的见解。

****更新****

我再次测试了我的原始代码,它实际上适用于xls但不适用于xlsx文件。

当我按照oracle certified professional的建议使用ACE.OLEDB引擎时,我没有得到任何拒绝权限错误:

odbcPath = "Provider=Microsoft.ACE.OLEDB.12.0;" &_
"Data Source=""" & Server.MapPath(filePath) & """;" &_
"Extended Properties=Excel 8.0;"    

但是我认为应该使用原始引擎来实现这一点,以便在xlsx文件上运行。

1 个答案:

答案 0 :(得分:0)

Just Voodoo,但删除

objRs.ActiveConnection = Nothing

行 - 包括遗失的Set!如果这没有帮助,请删除所有“设置任意=无”行。