Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Линкование txt-таблицы к Access  [new]
noisette
Member

Откуда: Москва
Сообщений: 359
Уважаемые!

Линкую тектовый файл - таблицу:

Set td = db.CreateTableDef("DATA_SOURCE")
td.Connect = "TEXT;database=" & strPath & ";"
td.SourceTableName = strFileName
db.TableDefs.Append td


и... нет, таблица линкуется, но... получается ОДНО поле, имя которого состоит из всех (не знаю, у меня их ~200) имен полей, а значения только из первого поля.

В текстовом файле разделитель - таб.

Что делать?

И можно ли объявить сразу все поля линкуемой txt - таблички текстовыми?

Киньте ссылку, плиз, или кусок кода.
2 фев 07, 09:38    [3729325]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
noisette
Member

Откуда: Москва
Сообщений: 359
Update:

Semicolon (точка с запятой) как разделитель полей в текстовом файле приводит к тому же результату. Видимо, нужно дополнительно прописывать некие пропертиз, но в хелпе и даже в яндексе ничего нет. Или я задаю неправильные вопросы.

А вот вручную таблица линкуется "на ура". Но мне нужно программно, ибо обрабатывать потребуется много файлов последовательно.
2 фев 07, 10:50    [3729843]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
RVI
Member

Откуда: Москва
Сообщений: 5373
noisette
А вот вручную таблица линкуется "на ура". Но мне нужно программно, ибо обрабатывать потребуется много файлов последовательно.

А может наоборот сделать? Ежели структура файлов одинакова, то может
сделать вручную линк, а потом меняя ямя файлов подсунуть их все по очереди
под этот линк.
2 фев 07, 10:59    [3729906]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
klen_
Member

Откуда:
Сообщений: 2404
НАПРИМЕР
Option Compare Database

Global Const dlina_zapisi As Integer = 23    ' с учётом vbCrLf
Type mTXT
    CEXIZ As String * 2
    ZAKAZ As String * 5
    IZDEL As String * 14
    CrLf As String * 2  '   vbCrLf
End Type
   

Public Sub Get_TXT(frm As Form)
    On Error GoTo Err_1
    
    Dim mTXTr As String:    mTXTr = "C:\trpr.txt"
    
    Dim fl As FileSystemObject  ' (объект) MicroSoft Scripting Runtime
    Set fl = New FileSystemObject
    
    If Not fl.FileExists(mTXTr) Then
        MsgBox "ФАЙЛ" & vbCrLf & mTXTr & vbCrLf & "НЕ НАЙДЕН", vbCritical, "ОШИБКА"
        Set fl = Nothing
        Exit Sub
    End If
    
    If Not Open1("Таблица1") Then
        MsgBox "Не могу создать таблицу Таблица1", vbCritical, "ОШИБКА"
        Set fl = Nothing
        Exit Sub
    End If
        
    ' определю кол-во записей
    Dim RecNo As Long
    Dim vsego As Long
    Dim f0 As File
    Set f0 = fl.GetFile(mTXTr)
    vsego = f0.Size / dlina_zapisi
    Set f0 = Nothing
    
    Dim zapis As mTXT
    
    Dim r_FreeFile As Integer
    r_FreeFile = FreeFile
    Open mTXTr For Binary As #r_FreeFile
    RecNo = 0
    Do Until EOF(r_FreeFile)
        Get #r_FreeFile, , zapis
        RecNo = RecNo + 1
            rs.AddNew
            rs!CEX = zapis.CEXIZ
            rs!ZAKAZ = zapis.ZAKAZ
            rs!IZDEL = zapis.IZDEL
            rs.Update
        End If
    Loop
    Close #r_FreeFile
    Set fl = Nothing
    
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
    
    Exit Sub
    
Err_1:
    MsgBox Err.Description
    Close
    Set fl = Nothing
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
End Sub


Public Function Open1(ByVal basa As String) As Boolean
    On Error GoTo m1
    
    Dim sSQL As String:  sSQL = "SELECT * From  " & basa
    
    If TableExist(basa) Then
        DoCmd.DeleteObject acTable, basa
    End If
    
    Set db = CurrentDb()
    Set tb = db.CreateTableDef(basa)
    Set FD = tb.CreateField("CEX", dbText, 2):          tb.Fields.Append FD
    Set FD = tb.CreateField("ZAKAZ", dbText, 5):        tb.Fields.Append FD
    Set FD = tb.CreateField("IZDEL", dbText, 14):       tb.Fields.Append FD
    db.TableDefs.Append tb
    Set tb = Nothing
    Set FD = Nothing
    
    Set rs = db.OpenRecordset(sSQL, dbOpenDynaset)
    
    Open1 = True
    Exit Function
m1:
    Set db = Nothing
    Set rs = Nothing
    Set tb = Nothing
    Set FD = Nothing
    MsgBox Err.Description
End Function

Function TableExist(tablename As String) As Boolean
    tablename = LCase(tablename)
    TableExist = False
    For i = 0 To Application.CurrentData.AllTables.Count - 1
        If LCase(Application.CurrentData.AllTables.Item(i).FullName) = tablename Then
            TableExist = True
            Exit For
        End If
    Next i
End Function
Создай модуль
2 фев 07, 11:05    [3729950]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
klen_
Member

Откуда:
Сообщений: 2404
Ой забыл
Global db As DAO.Database
Global rs As DAO.Recordset
Global tb As DAO.TableDef
Global FD As DAO.Field
Это то же должно быть в модуле
2 фев 07, 11:08    [3729978]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
bubucha
Member

Откуда:
Сообщений: 5642
Как вариант, попользовать Docmd.TransferText с указание созданной спецификации.
2 фев 07, 11:14    [3730042]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
klen_
Member

Откуда:
Сообщений: 2404
bubucha Сделай пожалуйста примерчик. Как спецификацию указывать?
2 фев 07, 11:28    [3730193]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
noisette
Member

Откуда: Москва
Сообщений: 359
bubucha, в хелпе только экспорт и очень куцый пример. Образец можно?


RVI, спасибо, идея неплоха.


klen_ , я так понимаю, что из текстового файла пишется в рекордсет, а потом только ... э-э-э... не вижу записи из рекордсета в таблицу. Или здесь "дбопендинасет" подразумевает, что запись в рекордсет автоматически приводит к записи в таблицу?

Нюанс только один: у меня чуть больше 200 полей и при попытке использовать адо и sql машина ругается синтакс эррорами. Экспериментально у меня 44 поля еще "пролазят" в таблицу, а 45 - уже нет. Или число полей ограничено, или общая длина sql - statement-а.
2 фев 07, 11:29    [3730198]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
klen_
Member

Откуда:
Сообщений: 2404
noesette
    Do Until EOF(r_FreeFile)
        Get #r_FreeFile, , zapis
        RecNo = RecNo + 1
            rs.AddNew
            rs!CEX = zapis.CEXIZ
            rs!ZAKAZ = zapis.ZAKAZ
            rs!IZDEL = zapis.IZDEL
            rs.Update
        End If
    Loop
Этот цикл и есть запись в таблицу
2 фев 07, 11:50    [3730409]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
bubucha
Member

Откуда:
Сообщений: 5642
Примерчик получается так:
1. Делаете линковку ручником (дабы создать спецификацию)
2. Делаете макрос (спасибо Били, за заботу ) с использованием команды ПреобразоватьТекст и указываете всЕ параметры, которые ей (команде) надо
3. п2 доводите до рабочего состояния.
4. Преобразуете макрос в код (спасибо Били, за заботу 2)
5. п4 рихтуете до нужного состояния (выбор файла, каталога, циклы и проч....)
...радоваетесь жизни и пятнице.
2 фев 07, 12:06    [3730596]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
klen_
Member

Откуда:
Сообщений: 2404
bubucha
Примерчик получается так:

Большое сапасибо. Гораздо удобнее, чем огроменный код писать.
2 фев 07, 12:12    [3730651]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
noisette
Member

Откуда: Москва
Сообщений: 359
bubucha, простите тугодума :) А как преобразовать макрос в код?
2 фев 07, 13:09    [3731171]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
noisette
Member

Откуда: Москва
Сообщений: 359
эврика!

К сообщению приложен файл. Размер - 0Kb
2 фев 07, 13:22    [3731288]     Ответить | Цитировать Сообщить модератору
 Re: Линкование txt-таблицы к Access  [new]
noisette
Member

Откуда: Москва
Сообщений: 359
Уважаемые!

А где хранятся спецификации и как их редактировать либо просто посмотреть на них? Ведь они, поди, просто текстовые файлы?!
2 фев 07, 13:36    [3731389]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить