Выгрузка данных в текстовый файл из MS SQL Server 2008 клиентом Access 2003

Речь сегодня пойдет об экспорте данных, в текстовый файл формата txt, из базы MSSql 2008 используя, при этом клиент Access 2003. У многих  реализована именно такая связка и как Вы понимаете для того, чтобы пользователь смог сам выгружать такие данные в такой формат нужно реализовать такую выгрузку в Access, чем мы сегодня и займемся.

Совсем недавно мы с Вами рассматривали возможность загрузки данных из текстового файла в базу MSSql 2008 через клиент Access 2003, а теперь пришло время посмотреть, как можно реализовать обратный процесс.

Структура текстового файла и данных в базе

И начнем мы с того, в каком виде нам нужно получить данные в текстовом файле, т.е. рассмотрим своего рода структуру этого файла и соответственно структуру таблицы, из которой мы будем выгружать данные, в качестве источника может быть не обязательно таблица, а любой запрос, под который можно будет подстроить свой код на VBA для выгрузки данных.

Создаем таблицу:

CREATE TABLE [dbo].[test_table](
        [number] [numeric](18, 0) NULL,
        [str1] [varchar](50) NULL,
        [str2] [varchar](50) NULL
) ON [PRIMARY]
GO

В ней у нас будут вот такие данные:

Скриншот 1

А нам необходимо выгрузить данные в текстовый файл вот в таком виде:

Скриншот 2

Примечание! Для удобства я использую текстовый редактор Notepad ++

Главное здесь понять логику, т.е. секция «Начало файла» и «Конец файла» сигнализируют нам о границах наших данных, а в секции «Новая строка» и «Конец строки» расположены данные одной записи нашей таблицы, соответственно, сколько строк в нашей таблице столько же этих секций у нас будет, у нас три строки и секций мы должны получить тоже три. Названия полей я оставил такими же, как и в нашей таблице. Структуру файла Вы можете придумать и совсем другую, я для примера использовал такую, просто мне как-то раз пришлось выгружать данные в таком виде, но как я уже сказал, это только для того чтобы Вы смогли понять логику выгрузки данных в текстовый файл, если конечно необходимость выгрузки данных в txt у Вас возникнет.

Код VBA для выгрузки данных в текстовый файл

Надеюсь, с основами Access Вы знакомы, и поэтому заострять внимание на том, куда вставлять код не буду, единственное скажу, что я реализовал механизм следующим образом, есть форма на ней кнопка, по нажатию на которую открывается диалоговое окно выбора пути сохранения файла, после чего нажимаем «Сохранить» и данные выгружаются.

Код кнопки, события «Нажатие кнопки» (его я как обычно подробно прокомментировал):

'Объявляем переменные
Dim SaveFile As FileDialog
'создаем объект "Диалоговое окно сохранения файла"
Set SaveFile = Application.FileDialog(msoFileDialogSaveAs)
Dim path As String
Dim rs  As ADODB.Recordset
Dim strSQL As String
Dim count As Integer
'рекордсет нашего источника данных
Set rs = New ADODB.Recordset
'Строка запроса
strSQL = "select * from  test_table"
'Открываем источник
rs.open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
'задаем свойства диалогового окна
With SaveFile
        'Имя кнопки
        .ButtonName = "Сохранить"
        'Название окна
        .title = "Выбор пути сохранения файла"
        'путь и имя файла по умолчанию
        .InitialFileName = "c:\Имя по умолчанию.txt"
End With
         'проверяем, пользователь нажал кнопку сохранить
          If SaveFile.Show = -1 Then
          'дополнительная проверка, пользователь стер расширения файла или нет
            If Mid(SaveFile.SelectedItems(1), Len(SaveFile.SelectedItems(1)) - 3) = ".txt" Then
                path = SaveFile.SelectedItems(1)
              Else
                path = SaveFile.SelectedItems(1) & ".txt"
            End If
        End If
'Открываем файл
If path <> "" Then
Open path For Output As #1
count = 0
'записываем общие характеристики, начало файла
Print #1, "Начало файла"
'циклом пробегаемся по строкам нашего источника
 While Not (rs.EOF)
    Print #1, "Новая строка"
    Print #1, "number=" & rs.Fields("number").Value
    Print #1, "str1=" & rs.Fields("str1").Value
    Print #1, "str2=" & rs.Fields("str2").Value
    Print #1, "Конец строки"
count = count + 1
rs.MoveNext
 Wend
 'записываем общие характеристики, конец файла
 Print #1, "Конец Файла"
'закрываем файл
Close
Set SaveFile = Nothing
'Выводим сообщение о количестве выгруженных строк
MsgBox "Успешно экспортировано " & count & " строки"
End if

План действий здесь очень простой, открывается диалоговое окно выбора пути сохранения файла, затем пользователь выбирает, куда сохранить файл, водит название файла, нажимает кнопку сохранить, при этом процедура анализирует какое название файла ввел пользователь, имеется в виду с расширением или без, в случае если он не ввел расширение, процедура автоматически подставит расширение .txt, данная проверка использует встроенные функции VBA Access. Потом осуществляется получение данных из источника, создается файл, с заданным именем по заданному пути, открывается, и все данные туда записываются циклом, а в конце мы просто выводим сообщение, сколько строк мы экспортировали, которые мы подсчитали путем увеличение переменной count на каждую итерацию цикла.

По-моему ничего сверхъестественного в данной процедуре нет, и каких-либо сложностей возникнуть не должно, но если у Вас что-то не получается, задавайте вопросы в комментариях.

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

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