2015-02-11 1 views
0

У меня есть немного кода, который проходит через кучу файлов в папке и загружает данные в набор записей, сохраняя имена файлов и наборы записей в словаре (в качестве ключа/пара значений) для последующего использования. Петля отлично работает для первых 64 файлов, но затем она дает мне диалоговое окно «Unspecified Error» на 65-й попытке. Кодовые разрывы на линии recordData.Open (цикл вызывает функцию ниже, поэтому для каждого цикла не показано):Неопределенная ошибка при открытии 65-го набора записей ADODB в цикле

Public Function GetRecords(ByVal dataSrc as String) as ADODB.Recordset 

Dim dir as String 
Dim file as String 
Dim recordData as ADODB.Recordset 
Dim sql as String 
Dim conn as String 

dir = "C:\MyDirectory" 
file = dataSrc & ".csv" 

conn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
       "Data Source=" & dir & ";" & _ 
       "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""" 

If DoesFileExist(dir & file) Then 
    sql = "select * from " & file & ";" 

    Set recordData = New ADODB.Recordset 

    recordData.CursorLocation = adUseClient 
    recordData.Open sql, conn, adOpenForwardOnly, adLockReadOnly, adCmdText 
Else 
    Set recordData = Nothing 
End If 

Set GetRecords = recordData 

recordData.Close 

End Function 

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

ответ

1

Ну, после того, как я переделал его, я обнаружил, что проблема связана с соединением. Вместо того, чтобы строить строку подключения в виде строки, я создал объект соединения, а затем закрыл его после открытия набора записей. Должно быть какое-то ограничение на количество соединений, которые могут существовать в данном сеансе. Вот пересмотренная функция:

Public Function GetRecords(ByVal dataSrc as String) as ADODB.Recordset 

Dim dir as String 
Dim file as String 
Dim recordData as ADODB.Recordset 
Dim sql as String 
Dim cn as ADODB.Connection 

dir = "C:\MyDirectory" 
file = dataSrc & ".csv" 

If DoesFileExist(dir & file) Then 
    sql = "select * from " & file & ";" 

    Set recordData = New ADODB.Recordset 
    Set cn = New ADODB.Connection 

    With cn 
     .Provider = "Microsoft.Jet.OLEDB.4.0" 
     .ConnectionString = "Data Source=" & dir & ";" & "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""" 
     .CursorLocation = adUseClient 
     .Open 
    End With 

    recordData.CursorLocation = adUseClient 
    recordData.Open sql, conn, adOpenForwardOnly, adLockReadOnly, adCmdText 

    cn.Close 
Else 
    Set recordData = Nothing 
End If 

Set GetRecords = recordData 

recordData.Close 

End Function