Всем привет,
Следующая проблема:
Есть таблица в 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 имеют кучу знаков после запятой (как в таблице). Задать здесь формат выгрузки отдельного поля нельзя. Далее прописываю спецификацию, сохраняю все. И вот экспортилка готова, только не работает как надо. Менять тип данных в таблице пробовал - не помагает.
Помогите, пожалуйста.
макрос access: экспортировать таблицу в .txt
Модератор: Naeel Maqsudov
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте Kokain.
при подключении к БД с помощью DAO можно использовать подобный код:надеюсь он Вам поможет.
Евгений.
при подключении к БД с помощью 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 записей, только такой трюк и срабатывает...
Set rst = CurrentDb.OpenRecordset(strSQL)
такую пару строк:
rst.MoveLast
rst.MoveFirst
мне очень помогает на БОЛЬШИХ таблицах - заставляет рекордсет загрузиться в переменную полностью (мелкие таблицы грузятся сами, а большие - только первая строка). Хотя цикл и построен на условии достижения конца рекордсета, но на таблицах с более, чем 75000 записей, только такой трюк и срабатывает...