Как загрузить данные из текстового файла на VBA Access в базу MS SQL Server 2008

Иногда возникает необходимость загрузить данные именно из текстового файла в базу 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.

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Комментарии: 1
  1. vodkomotornik

    Я экспортирую выписку от сбербанка как таблицу exel, присоединяю ее в Access.
    Открываю для чтения — проблема с кодировкой.

    Экспортрую как csv, импортирую — проблема с кодировкой.

    csv пробовал сохранять как utf-8 всяко разно и без БООМ, но нифига…

    Попробую твой метод., хотя уже приноровился копировать в буфер, и вставлять прямиком в таблицу.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.