макрос access: экспортировать таблицу в .txt

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Kokain
Сообщения: 23
Зарегистрирован: 09 авг 2006, 11:03
Откуда: Moscow
Контактная информация:

Всем привет,
Следующая проблема:
Есть таблица в access Rates(Date (Date); Term (integer); Rate ()).
В эту таблицу ежедневно добавляются новые данные. Необходимо ее каждый день выгружать в .txt файл (tab delimited). Я создал "экспортилку" в txt файл через design View, т.к. не работал до этого с access макросами. Но она выгружает значения из поля Rate только с двумя знаками после запятой, а надо 8 знаков. Помогоите написать макрос или настроить экспорт.

Вот экспортилка:
Action = transfer text
Transfer Type=Export Fixed Width
Specification Name=my_rates Export Specification

Я вызываю Export Text Wizard, и вижу что значения в поле Rate имеют кучу знаков после запятой (как в таблице). Задать здесь формат выгрузки отдельного поля нельзя. Далее прописываю спецификацию, сохраняю все. И вот экспортилка готова, только не работает как надо. Менять тип данных в таблице пробовал - не помагает.
Помогите, пожалуйста.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Kokain.
при подключении к БД с помощью DAO можно использовать подобный код:

Код: Выделить всё

'Автор: Дедушев Михаил (AKA Deminik)
Public Function OutFile(strSQL$, Optional strFileName$ = "", Optional strDelimeter$ = ";", _
Optional NeedHead As Boolean = True) As Boolean
' strSQL - строка SQL или имя  таблицы/запроса для записи в файл (обяз)
' strFileName - полное имя файла (не обяз)
' strDelimeter - разделитель полей (не обяз)
' NeedHead - с именами полей или без (не обяз)
'Error-handler inserted on 25.09.2004 at 09:20 by Dedushev M.N.
On Error GoTo OutFile_Error
Dim rst As DAO.Recordset, hFile As Long
Dim i As Integer, n As Integer, strText As String
If Len(strFileName) = 0 Then
    strFileName = "c:\outfile.txt"
    'strFileName = CurrentProject.Path & "\outfile.txt"
End If
Set rst = CurrentDb.OpenRecordset(strSQL)
strText = ""
' Формирование строки заголовка таблицы
With rst
    For i = 0 To .Fields.Count - 1
        strText = strText & Chr(34) & .Fields(i).Name & Chr(34) & strDelimeter
    Next i
    hFile = FreeFile
    ' Запись в файл
    Open strFileName For Output Access Write As hFile
    If NeedHead Then Print #hFile, Left(strText, Len(strText) - 1)
    ' Формирование строк таблицы
    Do Until rst.EOF
        strText = ""
        For i = 0 To .Fields.Count - 1
            strText = strText & Chr(34) & .Fields(i).Value & Chr(34) & strDelimeter
        Next i
        Print #hFile, Left(strText, Len(strText) - 1)
        .MoveNext
    Loop
    Close hFile
    .Close
End With
' Проверка наличия записанного файла
If Dir(strFileName) <> "" Then OutFile = True
OutFile_Exit:
Exit Function
OutFile_Error:
MsgBox "Непредвиденная разработчиком ошибка - " & Err.Number & vbCrLf & vbCrLf & Error$, vbExclamation
Resume OutFile_Exit
End Function
надеюсь он Вам поможет.
Евгений.
Дионис
Сообщения: 153
Зарегистрирован: 11 июл 2005, 13:42
Откуда: Крым, Алушта
Контактная информация:

ещё полезно будет добавить после

Set rst = CurrentDb.OpenRecordset(strSQL)

такую пару строк:
rst.MoveLast
rst.MoveFirst

мне очень помогает на БОЛЬШИХ таблицах - заставляет рекордсет загрузиться в переменную полностью (мелкие таблицы грузятся сами, а большие - только первая строка). Хотя цикл и построен на условии достижения конца рекордсета, но на таблицах с более, чем 75000 записей, только такой трюк и срабатывает...
Ответить