У меня есть следующий код, чтобы импортировать файл с разделителями в Access 2003 базы данных:MS Access замерзает После Импорт текста
Public Function importTextFile(sFile As String, _
sTable As String, _
sSpecification As String)
On Error GoTo importTextFile_EH
' Validate arguments to see if the objects exist; if not, give a message
' and exit
If Not FileExists(sFile) Then
MsgBox "File " & sFile & " does not exist; import terminated.", _
vbCritical + vbOKOnly, _
"Error"
Exit Function
End If
If Not TableExists(sTable) Then
MsgBox "Table " & sTable & " does not exist; import terminated.", _
vbCritical + vbOKOnly, _
"Error"
Exit Function
End If
If Not SpecExists(sSpecification) Then
MsgBox "Import Specification " & sSpecification & _
" does not exist; import terminated.", _
vbCritical + vbOKOnly, _
"Error"
Exit Function
End If
' Display a warning to let the user cancel if this is run by mistake.
If vbYes = MsgBox("WARNING: This will delete all data currently in " & _
sTable & "; do you wish to continue?", _
vbExclamation + vbYesNo, _
"Import Text File") Then
DoCmd.Hourglass Yes
' Cleardown the data in the table.
DoCmd.Echo Yes, "Deleting data in " & sTable & " table..."
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE " & sTable & ".* FROM " & sTable & ";"
DoCmd.SetWarnings True
' Import the text file into the table.
DoCmd.TransferText acImportDelim, sSpecification, sTable, sFile
DoCmd.Echo Yes, "Import complete"
DoCmd.Hourglass No
Else
DoCmd.Echo Yes, "Import cancelled."
End If
Exit Function
importTextFile_EH:
Debug.Print Err.Number & "-" & Err.Description
End Function
я могу назвать эту функцию из макроса с помощью RunCode
с аргументом Function Name
оценивается как
importTextFile (Application.CurrentProject.Path & "\" & _
"batch_results.txt", _
"BatchEngineResults", _
"specResults")
и он отлично работает. Я также могу назвать это из окна Immediate, и он работает без проблем.
Однако, если я вызываю функцию из формы (из события Click
команды команды), то Access замерзает. Похоже, что импорт завершен (индикатор выполнения в строке состояния окна базы данных доступа показывает, что выполняется импорт и завершение импорта), но затем Access становится неактуальным, как в форме, так и в окне базы данных Access. Диспетчер задач не указывает, что Access зависает (статус задачи «Запуск»), и я могу закрыть Access через кнопку «Закрыть» в строке заголовка. Когда я снова открываю базу данных, моя таблица имеет все данные из текстового файла, поэтому импорт действительно работает.
Я также попытался вызвать макрос из формы, но получить те же результаты.
У кого-нибудь есть идеи?
UPDATE: Я пытался позвонить в MsgBox после того, как вызов функции:
importTextFile (Application.CurrentProject.Path & "\" & _
"batch_results.txt", _
"BatchEngineResults", _
"specResults")
MsgBox "After Import"
появляется окно сообщения, и отзывчив. Когда я его отклоняю, Access зависает, как и раньше. Считаете ли вы, что это означает, что у меня может быть проблема где-то еще с формой, а не с этой функцией?
Если таблица загружается, это, вероятно, где-то в другом месте. Даже в этом случае я добавлю еще пару сообщений msgbox в это событие click и проследую их по строкам, пока вы не узнаете, где он висит (или просто пометьте его метрикой - @ $$) и посмотрите, где он останавливается) – BIBD