Иногда возникает необходимость загрузить данные именно из текстового файла в базу MSSql 2008, используя при этом VBA Access 2003, т.е. не просто разово загружать данные, а реализовать это так чтобы пользователь смог это делать сам, используя интерфейс клиента, а именно Access 2003. Поэтому сегодня мы рассмотрим один вариант, как можно загрузить данные из текстового файла в MSSql 2008, используя VBA Access.
И начать хотелось бы с того, что мы с Вами уже рассматривали примеры загрузки данных в базу MSSql 2008 через интерфейс Access, правда, из Excel файла, если Вы не читали то советую для начала прочитать вот этот материал «Access – Импорт данных в базу MSSql 2008». Также, если кого интересует, как можно выгрузить данные из базы MSSql 2008 используя интерфейс Access, причем не просто выгрузить, а выгрузить в шаблон Word или Excel то это мы рассматривали вот здесь «Выгрузка данных из Access в шаблон Word и Excel».
И так приступим, сперва давайте разберем исходные данные и обрисуем задачу, которую нам необходимо выполнить.
Задача — Загрузить данные в базу из текстового файла
Имеется клиент adp проект Access, работает в связке с MSSql 2008. Возникала необходимость загружать данные из текстового файла, который имеет специфическую структуру, например (данные конечно выдуманные)
Примечание! Для удобства я использую редактор текстовых файлов Notepad ++, его преимущества мы рассматривали в статье — Чем хорош Notepad++
Как видите текстовый файл необычный, но из него необходимо получить данные вида
Как Вы понимаете представить их в табличном виде. Т.е. «Начало» и «Конец» это граница строки.
И для начала необходимо создать таблицу, в которую Вы будете грузить наши данные, я создал таблицу test_import, вот код:
CREATE TABLE test_import( [id] [bigint] IDENTITY(1,1) NOT NULL, [str1] [varchar](50) NULL, [str2] [varchar](50) NULL, [str3] [varchar](50) NULL, CONSTRAINT [PK_test_import] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
Далее напишем код на VBA, который будет загружать эти данные в том виде, в котором нам нужно. Для начала на форме создадим элемент управления «Кнопка», Вы же можете использовать свой интерфейс, это не принципиально, например
Далее в событие «Нажатие кнопки» вставьте следующий код (его, как обычно я подробно прокомментировал):
Код VBA для импорта данных из текстового файла
'объявляем переменные Dim str As String Dim str1 As String Dim str2 As String Dim str3 As String Dim rs As ADODB.Recordset Dim FileDialog As FileDialog Dim path As String 'Создаем диалоговое окно выбора файла Set FileDialog = Application.FileDialog(msoFileDialogOpen) 'Убираем множественный выбор FileDialog.AllowMultiSelect = False FileDialog.Filters.Clear 'Добавим фильтр FileDialog.Filters.add "Текстовые файлы", "*.txt" FileDialog.FilterIndex = 1 'проверяем, выбрал файл или нет If FileDialog.Show = False Then Set FileDialog = Nothing Exit Sub End If 'путь к файлу path = Trim(FileDialog.SelectedItems(1)) 'очищаем переменную с объектом Set FileDialog = Nothing If path <> "" Then 'Открываем файл Open path For Input As #1 'циклом считываем все данные построчно Do While Not EOF(1) Line Input #1, str If Mid(str, 1, InStr(str, "=")) = "Строка1=" Then str1 = Mid(str, InStr(str, "=") + 1) End If If Mid(str, 1, InStr(str, "=")) = "Строка2=" Then str2 = Mid(str, InStr(str, "=") + 1) End If If Mid(str, 1, InStr(str, "=")) = "Строка3=" Then str3 = Mid(str, InStr(str, "=") + 1) End If 'Если встречаем "Конец" то записываем в базу If str = "Конец" Then 'Создаем рекордсет Set rs = New ADODB.Recordset 'Открываем таблицу rs.open "test_import", CurrentProject.Connection, adOpenDynamic, adLockOptimistic 'Записываем данные With rs .AddNew .Fields("str1") = str1 .Fields("str2") = str2 .Fields("str3") = str3 .Update End With End If Loop 'Закрываем файл Close #1 'Просто сообщение MsgBox "Загружено" End If
Вот и все, теперь сохраняете форму, открываете ее и нажимаете кнопку «Импорт» (как у меня) выбираете файл и данные уже в базе. Проверяете данные путем написания простого sql запроса (Основы языка SQL – оператор select):
select * from test_import
Надеюсь, данный пример загрузки данных из текстового файл окажется полезным. Удачи в освоении программирования на VBA Access.
Заметка! Если Вас интересует SQL и T-SQL, рекомендую посмотреть мои видеокурсы по T-SQL, с помощью которых Вы «с нуля» научитесь работать с SQL и программировать с использованием языка T-SQL в Microsoft SQL Server.
Я экспортирую выписку от сбербанка как таблицу exel, присоединяю ее в Access.
Открываю для чтения — проблема с кодировкой.
Экспортрую как csv, импортирую — проблема с кодировкой.
csv пробовал сохранять как utf-8 всяко разно и без БООМ, но нифига…
Попробую твой метод., хотя уже приноровился копировать в буфер, и вставлять прямиком в таблицу.