gifts2017

Консоль запросов для работы с данными DBF

Опубликовал Maxim Goncharov (maxx) в раздел Программирование - Инструментарий

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

 Когда мне нужно было анализировать данные в двух dbf-файлах, где было около 200 000 тыс. в каждом (но кол-во записей разное в каждом файле) , то я решил, что удобнее будет это сделать с помощью запросов, которыми можно получать различную информацию: сколько записей , общие суммы (статистика), найти одинаковые  или различные записи, найти разницу по колонкам и т.п. В результате сделал эту обработку, взяв стандартную консоль запросов и доработав dbfviewer.dbf (взял на infostart).

      Порядок работы.

  1. В консоли запросов нажать кнопку "Загрузить / просмотреть DBF"
  2. В новом окне загрузить данные одной или двух DBF, закрыть окно
  3. Теперь в консоли запросов в качестве источников данных можно использовать таблицы значений, передаваемые в запрос как параметры &ТЗ1 и &ТЗ2
  4. Нажав контекстное меню над полем "Текст запроса" можно получить текст запроса для работы с загруженными таблицами значений (текст запроса создаёт из таблиц значений временные таблицы).

 В результате я довольно лихо и, что особенно порадовало, довольно быстро (анализировал около 400 000 записей) всё нашёл и понял, в чем различие между файлами dbf.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
КонсольЗапросов__Работа_c_DBF.epf
.epf 46,05Kb
20.11.14
297
.epf 46,05Kb 297 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. d_chekunov d_chekunov (d_chekunov) 27.08.10 14:00
+ за труд и потраченное время. Но всё же для анализа DBF я бы посоветовал использовать Visual FoxPro
3. Maxim Goncharov (maxx) 28.08.10 22:38
(1) О чем вы вы говорите?

1.) Во-первых, я забыл написать что в моем примере данные в файлах DBF была выгрузка из базы 1С, в которой я и производитл анализ, подтягивая так же данные из базы, т.е. это не изолированные данные Dbf а связанные с базой, в этом случае мне не поможет FoxPro.

2.) Если ставить под каждый тип файлов специализированную программу, когда у тебя и так есть инструмент, то быстро засоришь свой компьютер программами, которые используются 2 раза в год, в тому же не надо забывать о лицензионном использовании (не знаю FoxPro бесплатная или платная, я последний раз в FoxPro 10 лет назад работал)

3.) Труда это много не затратили, взял готовые 2 обработки (консоль запросов и просотрщик dbf) и их объединил, чуть чуть доработав.
4. Maxim Goncharov (maxx) 28.08.10 22:45
(2) Да, когда мне понадобилась такая фишка, у меня было дежавю, что что-то такое я уже видел, это и оказалось Enteprise Integrator, но мне кажется моя обработка немножко удобнее в плане:

1.) Не нужно прописывать строки подключения и не нужно знаять язык запросов ODBC, а у меня просто указать локальные файлы и использовать язык запросов 1С, с которыми каждый день работаю.

2.) Как я написал ниже я данные из dbf также использую совместно с другими таблицами из базы 1С (справочниками и регистрами), т.е соединяюю и объединяюю запросами данные DBF и данные базы 1С

3.) Я не помню как сделано в Enterpise Integrator, но у меня все данные один раз копируются в таблицы значений и потом многократно используются в запросах, т.е. нем многократного считывания данных из DBF, а само считывание не быстрая операция.
5. Валерий Дубовой (Valerich) 06.09.10 06:03
вопрос - как долго производится загрузка в ТЗ этих 200000 записей. Какой объем исходной dbf таблицы (в МБ)?
для меня вопрос не праздный - мне приходится работать с файлами объемом до 300 МБ и количеством записей до 500000.

Когда начинал, тоже сначала пытался грузить это все в ТЗ. Оказалось, что это очень долгий процесс, есть кучу памяти. А при этом надо еще обработку данных производить - по кодам искать контрагентов, номенклатуру ....

В итоге остановился на ADO подключении через ODВC. Запрос на получении таблицы различных кодов контрагентов (без повторений) отрабатывается очень быстро - буквально несколько секунд.
6. Maxim Goncharov (maxx) 06.09.10 09:21
(5) Меня скорость загрузки и затем работы устроила (по сравнению работы с
этими файлами в Excele), у меня было 2 файла DBF размером по 20 Мb в каждом около 200 тыс. записей. Загружались из DBF в таблицу значений минуты 3.
7. semario (semario) 27.01.11 12:01
хорошая штука ADO... у меня была проблема из 5млн записей дбф - вывести последние 2 начисления и движения между ними... в фокспро прогер мучился, делал вторые сутки искал... а у меня за 1 час 20 нашел... сам удивился. Так что АДО все равно тема)))
8. semario (semario) 27.01.11 12:01
хорошая штука ADO... у меня была проблема из 5млн записей дбф - вывести последние 2 начисления и движения между ними... в фокспро прогер мучился, делал вторые сутки искал... а у меня за 1 час 20 нашел... сам удивился. Так что АДО все равно тема)))
9. semario (semario) 27.01.11 12:01
хорошая штука ADO... у меня была проблема из 5млн записей дбф - вывести последние 2 начисления и движения между ними... в фокспро прогер мучился, делал вторые сутки искал... а у меня за 1 час 20 нашел... сам удивился. Так что АДО все равно тема)))
10. Артем Бардюг (Йожкин Кот) 27.01.11 12:54
Хорошо бы реализовать конструктор запросов напрямую к dbf файлам (или любому другому источнику данных), чтобы получать на выходе уже готовый запрос sql.
11. olga pt (pt_olga) 22.10.11 15:01
спасибо автору. Как раз аналогичная задача и стоит, объединить данные из DBF с данными из базы 1С.
Буду пробовать.
12. Дмитрий Кокотов (m2d3) 13.04.12 06:10
"В коносле"
ну сколько уже можно, когда уже народ овладеет окончаниями существительных?
13. Нурислам Ямбаев (nurislam) 15.06.13 14:06
Интересная работа.Пойду попробую.Спасибо автору.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа