2014-12-23 1 views
1

Я использую, где <input type="file"> блокирует файл для ADODB.recordset.input type = "file" locks file для ADODB.Recordset

Если я жестко кодирует путь к файлу, код запускается без проблемы, однако, как только я просматриваю с использованием типа входного файла и выбираю жесткий файл, он блокирует файл, и я больше не могу получить к нему доступ через набор записей.

Я пробовал практически все, о чем я могу думать без успеха. Я знаю, что это результат функции ввода-вывода, потому что, если я выберу другой файл в том же каталоге или нажмите кнопку процесса без просмотра кода, он будет работать как следует.

Ниже приведены соответствующие html и vbscript. Кто-нибудь есть идеи о том, как это исправить?

<html> 
<head> 
<title>Employee Upload</title> 
<HTA:APPLICATION 
    APPLICATIONNAME="Employee Upload" 
    ID="Employee Upload" 
    VERSION="1.0"/> 

</head> 

<body bgcolor="white"> 
<p id="heading" name="heading"><p> 
<div id="container" name="container"> 
<span onClick="document.getElementById('myFile').click();" language="javascript" class="upload"> 
<button>Browse</button> 
<input id="filename" type="text" disabled value=""> 
<input type="file" id="myFile" style="visibility:hidden;display:none;" onchange="document.getElementById('filename').value = this.value;document.getElementById('process').style.visibility = 'visible';" language="javascript"> 
</span> 

<p>Click "Process File" once you have selected the file to upload the new hire data.</p> 

<button id="process" name="process" onclick="loadFile()" style="/*visibility: hidden;*/">Process File</button> 
</div> 
<script language="vbscript"> 

Function loadFile() 
On Error Resume Next 
fileStr = document.all("filename").value 
fileStr = "C:\Users\SeanW\Desktop\imports\NewHires.txt" 
fileDir = Left(fileStr,InStrRev(fileStr,"\")) 
filenameStr = Right(fileStr,Len(fileStr)-InStrRev(fileStr,"\")) 

Set oConn = CreateObject("ADODB.Connection") 
Set oRS = CreateObject("ADODB.Recordset") 
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
      "Data Source=" & fileDir & ";" & _ 
      "Extended Properties=""text;HDR=YES;FMT=Delimited""" 

oRS.Open "SELECT * FROM [" & filenameStr & "]", oConn, 3, 3, 1 

If Err.Number <> 0 Then 
MsgBox "Error Loading File: " & vbCrLf & vbCrLf & Err.Description,vbCritical,"File Load Error" 
oConn.Close 
oRS.Close 
Set oConn = Nothing 
Set oRs = Nothing 
Err.Clear 
Exit Function 
else 

Msgbox "File Loaded Successfully" 
oConn.Close 
oRS.Close 
Set oConn = Nothing 
Set oRs = Nothing 

End If 

End Function 

</script> 
</body> 
</html> 

ответ

1

У меня была именно эта проблема сегодня. Я получил вокруг него, делая копию входного файла в папке, а затем подключение к тому, что с ADODB.Connection

dim txtfile: txtfile = document.getElementById("filename").Value 
dim fso: set fso = CreateObject("Scripting.FileSystemObject") 
dim tablename: tablename = fso.GetFileName(txtfile) 
' we'll create the folder as a subfolder to the current one 
dim currentfolder: currentfolder = fso.GetAbsolutePathName(".") 

' create new paths until we have a new one 
dim newpath: newpath = fso.BuildPath(currentfolder, fso.GetTempName()) 
do while fso.folderExists(newpath) 
    newpath = fso.BuildPath(currentfolder, fso.GetTempName()) 
loop 

' create the folder & copy the input file 
fso.createFolder newpath 
fso.copyfile txtfile, fso.buildpath(newpath, tablename) 

'connect and process 
ado.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & newpath & ";" & _ 
     "Extended Properties=""text;HDR=YES;FMT=Delimited""" 

ado.open 

'... etc 

' clear up the temp folder 
fso.deleteFolder newpath, true 
+0

смотри также http://stackoverflow.com/questions/37583532/using-file-input-element кол-HTA-файл-предотвращает-удаление выбранного-файл –