Ответ. Хотя этот вопрос впервые встречается среди многих других вопросов по Access, но можно сказать, что эта тема эта достаточно важна не только для новичков, но и для тех, кто профессионально занимается базами данных. Например, представим что у Вас есть электронный магазин и все заказы приходят к Вам в виде писем по электронной почте. Ручная обработка писем, их сортировка, чтение и ввод данных в базу данных может занять значительное время. При этом будет трудно избежать ошибок при вводе информации, если вдобавок вы не имеете профессиональных операторов. Естественно можно придумать так, что все письма будут сохраняться в определенной папке, после того, как Вы открываете базу данных, программа автоматически будет читать имена файлов, проверять наличие их (по названию, по дате и времени их создания) и далее загружать выборочно текст в таблицу базы данных (текст может быть разбит тегами на разделы). Попробуем автоматизировать этот процесс. Ниже дается описание алгоритма, что нужно сделать, после этого идет код на VBA. 1 этап. Создаем макрос AutoExec. Назначение этого макроса - это автоматический запуск некоторой программы, которая должна выполняться всегда при открытии базы. Название программы - funAutoReadAllFiles(). На вход программы необходимо передать данные по каталогу, где надо искать файлы и расширение файлов, которые необходимо считать. 2 этап. Создаем подпрограмму по загрузке файлов funAutoReadOneFile. Цель ее - проверка содержимого файла в базе данных и если файла нет, то загрузить его. На вход программы подается информация об имени файла и таблицы, куда необходимо загрузить данные. Данный код взят из файла la_files.mdb '============================================================== ' Прочитаем имена файлов и загрузим их в таблицу ' Private Sub funAutoReadAllFiles(strDir As String, strFileExt As String) Dim i As Long, rst As DAO.Recordset On Error GoTo 999 With Application.FileSearch .NewSearch .LookIn = strDir ' *.name .FileName = strFileExt ' *.txt .SearchSubFolders = False If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To .FoundFiles.Count If MsgBox("Загрузить файл: " & .FoundFiles(i), vbInformation + vbOKCancel, "Загрузить") = vbOK Then funAutoReadOneFile .FoundFiles(i), "Таблица5" Me.table5.Requery End If Next i End If End With Exit Sub 'Выходим из программы 999: MsgBox Err.Description Err.Clear 'Очищаем поток от ошибок End Sub '============================================================== ' Загружаем файл в таблицу ' Private Function funAutoReadOneFile(strFileName As String, strTable) Dim fs, f, flag Dim dbs As DAO.Database, rst As DAO.Recordset On Error GoTo 999 Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFile(strFileName) ' Проверка файла Set dbs = CurrentDb Set rst = dbs.OpenRecordset("select * from " & strTable) If rst.RecordCount Then rst.MoveLast rst.MoveFirst End If rst.FindFirst "[FileName] = '" & strFileName & "'" If rst.NoMatch = False Then dbs.Close rst.Close Exit Function End If ' Добавление информации о дате создания rst.AddNew rst!FileName = strFileName rst!DateCreated = f.DateCreated ' Добавление информации о содержимом rst!Memo = "" Set f = fs.OpenTextFile(strFileName, 1, False) Do While f.AtEndOfStream <> True rst!Memo = rst!Memo & f.ReadLine ' Читаем построчно Loop f.Close ' Сохранение содержимого rst.Update rst.Close dbs.Close Exit Function 999: MsgBox Err.Description Err.Clear rst.Close End Function Private Sub butCode1_Click() Stop End Sub |