|
0 Кб. |
|
| Програмное присоединение текстового файла
мне необходимо присоединить программнотекстовый файл
Что бы получиось одно поле
В каждой строке однастрока.
Не получается.
Пишу макрос преобразую , но .....
Если даже вручную присоединить прикреплёный файл получаются вместо некоторых данных какие-то квадратики.
Неговоря уже о присоединении програмно.
Иещё подскажите как создать спецификацию? (линьковки) | |
|
| |
|
|
|
| А вот нашёл про спецификацию
Для импорта текстового файла с помощью команды TransferText нам необходимо иметь так называемую спецификацию импорта. Ее можно создать вручную (с помощью мастера), а можно и программно, причем при создании с помощью кода есть возможность указать строку текстового файла, с которого начинать импорт. При формировании спецификации с помощью мастера такой возможности нет. Спецификация хранится в системных таблицах Access’a MSysIMEXSpecs (заголовочная часть) и MSysIMEXColumns (описание для колонок текстового файла). Кусок кода, создающего спецификацию приведен ниже:
If DCount("*", "MSysIMEXSpecs", "SpecName=""Export_" & strTableName & "_TableToText""") = 0 Then
Set rst = db.OpenRecordset("MSysIMEXSpecs")
With rst
.AddNew
.Fields("SpecName") = "Export_" & strTableName & "_TableToText"
.Fields("DateDelim") = "."
.Fields("DateFourDigitYear") = "-1"
.Fields("DateLeadingZeros") = "-1"
.Fields("DateOrder") = 0 ' 0 - ДМГ; 1 - ДГМ; 2 - МДГ; 3 - МГД; 4 - ГДМ; 5- ГМД
.Fields("DecimalPoint") = ","
.Fields("FieldSeparator") = ";"
.Fields("FileType") = 0 ' 0 - win кодировка; 1 - dos кодировка
.Fields("SpecType") = 1 ' 2 - с полями фикс. ширины; 1 - с разделителями
.Fields("StartRow") = 1 ' 1 - первая строка содержит имена полей; 0 - нет
.Fields("TextDelim") = """"
.Fields("TimeDelim") = ":"
.UPDATE
.Bookmark = .LastModified
lngID = .Fields("SpecID")
.Close
End With
Set rst = db.OpenRecordset("MSysIMEXColumns")
lngPos = 1
For Each fld In tbl.Fields
With rst
.AddNew
.Fields("SpecID") = lngID
.Fields("FieldName") = fld.Name
.Fields("DataType") = fld.Type
.Fields("IndexType") = 0 ' 0 - нет; 1 – есть (неуникальный); 2 – есть (уникальный)
.Fields("SkipColumn") = False
.Fields("Start") = lngPos
.Fields("Width") = fld.Size
lngPos = lngPos + fld.Size
.UPDATE
End With
Next
rst.Close
End If | |
|
| |
|
|
|
| ну так это просто программно забить таблицу нужными значениями. А я уже обрадовался, думал что нарыли, как без MSysIMEXSpecs и MSysIMEXColumns делать импорт/экспорт txt. Свою процедуру лень писать, а микрософты чего то не продумали в интерфейсе редаиктирования спецификаций - неудобно (зачем столбцы скрывают?) и вызывается она как то по тупому - только при попытке экспорта. | |
|
| |
|
|
|
| Получается так:
Сначала ручками линкуешь файл,(тода создаётся спецификация)
В строке подключения видно как называется спецификация.
Затем можно линьковать программно, вписывая в код название спецификации.
Sub Try()
DoCmd.DeleteObject acTable, "ИЗ_1С_Сюда"
Dim t As TableDef
Set t = CurrentDb.CreateTableDef("ИЗ_1С_Сюда")
t.Connect = "Text;DSN=" & "Goods" & " - спецификация связи4;" & "FMT=Fixed;HDR=NO;IMEX=2;CharacterSet=1251;DATABASE=" & "E:\Арм Сканер\Временные" & ";TABLE=" & "goods.txt"
'Text;DSN=Goods - спецификация связи4;FMT=Fixed;HDR=NO;IMEX=2;CharacterSet=932;DATABASE=E:\Арм Сканер\Временные;TABLE=goods#txt
t.SourceTableName = "goods.txt" '"ИмяФайла"
CurrentDb.TableDefs.Append t
End Sub
|
Всё бы ничего но на одном из компов хоть тресни какие-то квадратики в строке в таблице
00000004;2107030162703;ツ瑙浯;ツ瑙浯;1500.24;11.000;0;0;0;0;0;0;0;1;0;0;1;1; | |
|
| |