Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DoCmd.TransferText: избавиться от ..._ОшибкиИмпорта / 5 сообщений из 5, страница 1 из 1
08.09.2003, 14:09
    #32258486
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.TransferText: избавиться от ..._ОшибкиИмпорта
По работе часто (считай каждый день) приходится заниматься импортом текстовых файлов, которые изначально предназначены были для печати и потому содержат еще всякие ненужные строки на каждом листе. Так вот при импорте (он конечно должен полностью автоматическим), когда поля в спецификации сразу задаются под нужный тип (например для столбца с суммой - числовой), то при имортировании "мусорных строк" конечно возникает ошибка при преобразовании к выбранному типу, что приводит к созданию таблицы - ..._ОшибкиИмпорта.

Хотелось бы чтобы эта таблица невозникала, есть ли возможность запретить Access ее создавать?

Я вижу (некоторые применяю) следующие варианты:
1. Таблицу ..._ОшибкиИмпорта потом удалять, НО: название он вибрает для дуракцие, сразу-то и не вичислишь, например таб. наз. "f101_10" - "101_0703_ОшибкиИмпорта", конечно можно фильтровать имена таблиц и удалять с текстом "_ОшибкиИмпорта", но вдруг так удалишь вместе со своей, чужие ошибки, нужные, от другой таблицы...
2. Задавать для всех полей текстовой тип, а потом запускать запрос на преобразование данных из этих полей в нужный тип и помещения в другой столбец (сейчас им пользуюсь). Как недостатки: после импорта еще 1-2 дополн. запроса запускаем, по времени получается дольше, чем если Access сразу в нужный тип преобразовывает с ошибками (не знаю кстати почему...)

Облазил все SetOptions - ничего похожего не нашел.

P.S. для наших гуру: судя по количеству топиков на тему импорта/экспорта из/в Access, нехватает FAQ на эту тему, который объединил бы все часто возникающие вопросы по этой тематике.... А я бы мог поучавствовать в процессе как заинтересованный критик (потому как импортом туда и обратно занимаюсь наверное половину всего времени :-) )
...
Рейтинг: 0 / 0
08.09.2003, 14:15
    #32258500
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.TransferText: избавиться от ..._ОшибкиИмпорта
Насчет фака - согласен.

В качестве варианта ответа: я бы написал свою программу, которая делала бы импорт без обращения к стандартному импорту Аксесса.
...
Рейтинг: 0 / 0
08.09.2003, 14:40
    #32258546
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.TransferText: избавиться от ..._ОшибкиИмпорта
Ага, в смысле функция которая открывает файл, используя те же спецификации, и посимвольно и построчно считывает из файла, с нужным преобразованием, и пихать полученные данные в новую таблицу...
Идея интересная, надо будет попробовать накалякать, а тормозить не будет?
...
Рейтинг: 0 / 0
08.09.2003, 14:56
    #32258588
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.TransferText: избавиться от ..._ОшибкиИмпорта
Насчет тормозить - не сравнивал. Но вот текст, который когда-то писал я. Процедура MyImport вызывается по синтаксису, который аналогичен стандартному синтаксису импорта.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
Option Compare Database
Option Explicit

Type Spec
    sField As String
    nStart As Integer
    nWidth As Integer
    nType As Integer
End Type
Dim FieldList() As Spec
Dim n As Integer, sl As Integer

Private Sub FillFieldList(sSpec As String)

    Dim db As Database, rs As Recordset, i As Integer

    Set db = CurrentDb
    Set rs = db.OpenRecordset( "MSysIMEXSpecs" , dbOpenDynaset, dbReadOnly)
    rs.FindFirst  "SpecName='" & sSpec & "'" 
    n = rs!SpecID
    rs.Close
    Set rs = db.OpenRecordset( "SELECT * FROM MSysIMEXColumns WHERE SpecID="  & CStr(n) &  " ORDER BY Start" , dbOpenDynaset, dbReadOnly)
    rs.MoveLast
    n = rs.RecordCount
    ReDim FieldList( 1  To n)
    i =  1 
    rs.MoveFirst
    Do Until rs.EOF
        FieldList(i).sField = rs!FieldName
        FieldList(i).nStart = rs!Start
        FieldList(i).nWidth = rs!Width
        FieldList(i).nType = rs!DataType
        i = i +  1 
        rs.MoveNext
    Loop
    rs.Close
    sl = FieldList(n).nStart + FieldList(n).nWidth -  1 

End Sub

Sub MyImport(sSpec As String, sTable As String, sFile As String)

    Dim f As Integer, s As String, i As Integer
    Dim db As Database, rs As Recordset

    On Error GoTo err_imp
    f = FreeFile
    Open sFile For Input As #f
    Set db = CurrentDb
    Set rs = db.OpenRecordset(sTable)
    FillFieldList sSpec
    Do Until EOF(f)
        Line Input #f, s
        rs.AddNew
        For i =  1  To n
            Select Case FieldList(i).nType
                Case  10 
                    rs(FieldList(i).sField) = Mid$(s, FieldList(i).nStart, FieldList(i).nWidth)
                Case  3 
                    rs(FieldList(i).sField) = Val(Mid$(s, FieldList(i).nStart, FieldList(i).nWidth))
                Case  8 
                    'тут можно дописать'
            End Select
        Next
        rs.Update
    Loop
    rs.Close
    Close #f
    Exit Sub
err_imp:
    MsgBox Error$,  48 ,  "Import" 
    Resume Next

End Sub
...
Рейтинг: 0 / 0
08.09.2003, 15:38
    #32258710
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.TransferText: избавиться от ..._ОшибкиИмпорта
СУПЕР!!!
практически все написано.
Думаю надо засунуть туда еще возможность создания сразу новой таблицы в соотв. со спецификации, функц. преобразования данных для поля к нужному типу, ну и............. опробовать sct это дело по скорости (у меня просто из таких текстовых файлов около 200 000 записей за раз импортируется)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DoCmd.TransferText: избавиться от ..._ОшибкиИмпорта / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]