Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Загрузка данных из ДБФ файла в массив. - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Загрузка данных из ДБФ файла в массив.
MisterYu Дата: Пятница, 23.02.2018, 15:23 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Доброго времени Всем.

Есть такая задача:
Имеется файлы DBF с 6 полями с кодировкой Win.
Нужно считать информацию с этого ДБФ файла по строчно и загнать в массив.

[vba]
Код

Sub DBF()
    Dim Arr()
    Dim p As String, f As String, wb As Workbook
    Dim sFileName, sTempFileName As String
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выбрать папку": .Show
        If .SelectedItems.Count = 0 Then
            Exit Sub
        Else
            p = .SelectedItems(1) & "\"
        End If
    End With
    f = Dir(p & "*.dbf")
  
    Do While f <> ""
        sFileName = f
        sTempFileName = "123456.dbf"
        Name p + sFileName As p + sTempFileName
       
        Dim cn As New ADODB.Connection, rs As New ADODB.Recordset

        With cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & p & ";Extended Properties=dBase IV"
            .Open
            Set rs = .Execute("SELECT * FROM " & sTempFileName)
            Arr ()= rs.Fields.Item(1).Value
            .Close
        End With
        
        Name p + sTempFileName As p + sFileName
        f = Dir
    Loop
End Sub
[/vba]
К сообщению приложен файл: newdbf.dbf (0.3 Kb)
 
Ответить
СообщениеДоброго времени Всем.

Есть такая задача:
Имеется файлы DBF с 6 полями с кодировкой Win.
Нужно считать информацию с этого ДБФ файла по строчно и загнать в массив.

[vba]
Код

Sub DBF()
    Dim Arr()
    Dim p As String, f As String, wb As Workbook
    Dim sFileName, sTempFileName As String
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выбрать папку": .Show
        If .SelectedItems.Count = 0 Then
            Exit Sub
        Else
            p = .SelectedItems(1) & "\"
        End If
    End With
    f = Dir(p & "*.dbf")
  
    Do While f <> ""
        sFileName = f
        sTempFileName = "123456.dbf"
        Name p + sFileName As p + sTempFileName
       
        Dim cn As New ADODB.Connection, rs As New ADODB.Recordset

        With cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & p & ";Extended Properties=dBase IV"
            .Open
            Set rs = .Execute("SELECT * FROM " & sTempFileName)
            Arr ()= rs.Fields.Item(1).Value
            .Close
        End With
        
        Name p + sTempFileName As p + sFileName
        f = Dir
    Loop
End Sub
[/vba]

Автор - MisterYu
Дата добавления - 23.02.2018 в 15:23
doober Дата: Пятница, 23.02.2018, 17:55 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 993
Репутация: 345 ±
Замечаний: 0% ±

Excel 2010
В чем проблема получить данные в массив[vba]
Код
Arr() = rs.GetRows
[/vba]


 
Ответить
СообщениеВ чем проблема получить данные в массив[vba]
Код
Arr() = rs.GetRows
[/vba]

Автор - doober
Дата добавления - 23.02.2018 в 17:55
krosav4ig Дата: Пятница, 23.02.2018, 18:42 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Видимо, подразумевается, что файлов несколько, и их нужно впихнуть в один массив

[vba]
Код

Sub DBF()
    Const sTempFileName = "123456.dbf"
    Dim p$, f$, t$, c$, sFileName$, arr As Variant
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выбрать папку": .Show
        If .SelectedItems.Count = 0 Then
            Exit Sub
        Else
            p = .SelectedItems(1) & "\"
        End If
    End With
    f = Dir(p & "*.dbf")
    t = "tmp.dbf"
    sFileName = p + f
    FileCopy sFileName, p + t
    c = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & p & ";Extended Properties=dBASE IV"
    With CreateObject("ADODB.Recordset")
        .Open "delete * from tmp", c
        Do While f <> ""
            If f <> t Then
                Name sFileName As p + sTempFileName
                .Open "insert into tmp select * from 123456", c
                Name p + sTempFileName As sFileName
             End If
            f = Dir$()
        Loop
        .Open "select * from tmp", c
        arr = .getrows
        .Close
        .Open "drop table tmp", c
    End With
End Sub
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Пятница, 23.02.2018, 18:45
 
Ответить
СообщениеВидимо, подразумевается, что файлов несколько, и их нужно впихнуть в один массив

[vba]
Код

Sub DBF()
    Const sTempFileName = "123456.dbf"
    Dim p$, f$, t$, c$, sFileName$, arr As Variant
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выбрать папку": .Show
        If .SelectedItems.Count = 0 Then
            Exit Sub
        Else
            p = .SelectedItems(1) & "\"
        End If
    End With
    f = Dir(p & "*.dbf")
    t = "tmp.dbf"
    sFileName = p + f
    FileCopy sFileName, p + t
    c = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & p & ";Extended Properties=dBASE IV"
    With CreateObject("ADODB.Recordset")
        .Open "delete * from tmp", c
        Do While f <> ""
            If f <> t Then
                Name sFileName As p + sTempFileName
                .Open "insert into tmp select * from 123456", c
                Name p + sTempFileName As sFileName
             End If
            f = Dir$()
        Loop
        .Open "select * from tmp", c
        arr = .getrows
        .Close
        .Open "drop table tmp", c
    End With
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 23.02.2018 в 18:42
MisterYu Дата: Понедельник, 26.02.2018, 09:26 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
doober, krosav4ig, Спасибо вам за подсказку.

Уточню суть задачи.
Есть несколько файлов DBF, каждый файл нужно загрузить в массив.
Потом в массиве сделать сверку данных з другим DBF файлом.
После чего данные из массива записать в таблицу или же сразу в DBF определенном шаблоне.
Для дальнейшей загрузки файлов бухгалтерской программы.
 
Ответить
Сообщениеdoober, krosav4ig, Спасибо вам за подсказку.

Уточню суть задачи.
Есть несколько файлов DBF, каждый файл нужно загрузить в массив.
Потом в массиве сделать сверку данных з другим DBF файлом.
После чего данные из массива записать в таблицу или же сразу в DBF определенном шаблоне.
Для дальнейшей загрузки файлов бухгалтерской программы.

Автор - MisterYu
Дата добавления - 26.02.2018 в 09:26
MisterYu Дата: Понедельник, 26.02.2018, 11:27 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Как решить проблему с кодировкой Win в дбф файле?
А то получаются иероглифы информации в массиве.


Сообщение отредактировал MisterYu - Понедельник, 26.02.2018, 11:40
 
Ответить
СообщениеКак решить проблему с кодировкой Win в дбф файле?
А то получаются иероглифы информации в массиве.

Автор - MisterYu
Дата добавления - 26.02.2018 в 11:27
MisterYu Дата: Понедельник, 26.02.2018, 11:40 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Нашел такой макрос перекодированию Вин в Дос.
http://www.sql.ru/forum/631075/otkrytie-dbf-fayla
 
Ответить
СообщениеНашел такой макрос перекодированию Вин в Дос.
http://www.sql.ru/forum/631075/otkrytie-dbf-fayla

Автор - MisterYu
Дата добавления - 26.02.2018 в 11:40
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!