Речь сегодня пойдет об экспорте данных, в текстовый файл формата 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
В ней у нас будут вот такие данные:
А нам необходимо выгрузить данные в текстовый файл вот в таком виде:
Примечание! Для удобства я использую текстовый редактор 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 на каждую итерацию цикла.
По-моему ничего сверхъестественного в данной процедуре нет, и каких-либо сложностей возникнуть не должно, но если у Вас что-то не получается, задавайте вопросы в комментариях.
Заметка! Если Вас интересует SQL и T-SQL, рекомендую посмотреть мои видеокурсы по T-SQL, с помощью которых Вы «с нуля» научитесь работать с SQL и программировать с использованием языка T-SQL в Microsoft SQL Server.