MyTetra Share
Делитесь знаниями!
Как загрузить данные из текстового файла на VBA Access в базу MS SQL Server 2008
Время создания: 16.03.2019 23:43
Текстовые метки: Импорт из текста, access, SQL Server
Раздел: !Закладки - VBA - Access - Импорт из текста
Запись: xintrea/mytetra_db_adgaver_new/master/base/1484021201oxrthbcb1l/text.html на raw.githubusercontent.com


Иногда возникает необходимость загрузить данные именно из текстового файла в базу 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. Возникала необходимость загружать данные из текстового файла, который имеет специфическую структуру, например (данные конечно выдуманные)


Как видите текстовый файл необычный, но из него необходимо получить данные вида

Как Вы понимаете представить их в табличном виде. Т.е. «Начало» и «Конец» это граница строки.

И для начала необходимо создать таблицу, в которую Вы будете грузить наши данные, я создал таблицу 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


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования