Как читать текстовые файлы и импортировать их в таблицу доступа - PullRequest
0 голосов
/ 30 сентября 2019

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

Dim FileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
Dim FileSpec As String
Dim filepath As String
Dim txtStream As Object
Dim strImportRecord As String

filepath = "\\C:\"
 FileSpec = "*.txt*"

FileName = Dir(filepath & FileSpec)

If FileName <> "" Then
    MostRecentFile = FileName
    MostRecentDate = FileDateTime(filepath & FileName)
    Do While FileName <> ""
        If FileDateTime(filepath & FileName) > MostRecentDate Then
             MostRecentFile = FileName
             MostRecentDate = FileDateTime(filepath & FileName)
        End If

       Loop
End If

Set txtStream = CreateObject("Scripting.FileSystemObject").OpenTextFile(MostRecentFile)

Do While Not (txtStream.atendofstream)
        strImportRecord = txtStream.ReadAll
  Loop

DoCmd.TransferText acImportFixed, "myspecification", "mytable", "strImportRecord", False 

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Попробуйте это:

Sub ImportMostRecentTextFile ()

Dim FileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
Dim FileSpec As String
Dim filepath As String
Dim txtStream As Object
Dim strImportRecord As String

filepath = "C:\Users\moone2\Documents\"
 FileSpec = "*.txt*"

FileName = Dir(filepath & FileSpec)

If FileName <> "" Then
    MostRecentFile = FileName
    MostRecentDate = FileDateTime(filepath & FileName)
    Do While FileName <> ""
        If FileDateTime(filepath & FileName) > MostRecentDate Then
             MostRecentFile = FileName
             MostRecentDate = FileDateTime(filepath & FileName)
        End If
        FileName = Dir()
       Loop
End If

'I don't think you need to load the text....
'------------
'Set txtStream = CreateObject("Scripting.FileSystemObject").OpenTextFile(MostRecentFile)'
'
'Do While Not (txtStream.atendofstream)
'    strImportRecord = txtStream.ReadAll
'Loop
'
'Set txtStream = Nothing
'
'Debug.Print strImportRecord

'DoCmd.TransferText acImportFixed, "myspecification", "mytable", strImportRecord,
'---------------

'Just load from the most recent file, like this:
DoCmd.TransferText acImportFixed, "myspecification", "myTable", MostRecentFile, True

End Sub

0 голосов
/ 01 октября 2019

Ваш цикл для поиска самого последнего файла:

Do While FileName <> ""

никогда не заканчивается, потому что вы никогда не назначаете ничего нового для FileName в цикле.

Вам не хватает FileName = Dir() до Loop.

Это будет не единственной проблемой, все, что Майк написал в своих комментариях, верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...