Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 17:30   #1
AlexFBG
 
Регистрация: 29.09.2011
Сообщений: 8
По умолчанию Сравнение 2 файлов dbf

Вопрос новичка. Имеется 2 файла dbf. Первый имеет раздельные поля фамилия, имя, отчество, дата рождения, текст большими буквами. Второй - фамилия имя отчество и дата рождения в одном поле, текст - Первая -заглавная, остальные маленькие. Требуется сравнить и создать отчеты кого нет в 1 и кого нет во втором.
AlexFBG вне форума Ответить с цитированием
Старый 29.09.2011, 18:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) порядок записей в файлах имеет значение?

2) ФИО + дата рождения могут не дать 100% уникальности (впрочем, вероятность этого низкая, но всё же...)

3) почему именно Delphi выбрано в качестве инструмента обработки? И ещё, важно, через что собираетесь работать с DBF файлами? Есть возможность использовать бесплатный Microsoft OLE DB Provider for Visual FoxPro ? (его нужно будет поставить на том компьютере, где будет производится обработка данных...)

4) отчёт нужно получить в каком виде? в каком формате?

5) На какую помощь Вы рассчитываете? Что конкретно не получается?
Дело в том, при некоторых удачных ответах на первые мои вопросы, возможно, я набросаю Вам такую программку (люблю простые и незамысловатые утилитки по обработке данных)...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.09.2011, 01:24   #3
AlexFBG
 
Регистрация: 29.09.2011
Сообщений: 8
По умолчанию

1. Записи в файлах отсортированы по алфавиту, в выходных файлах порядок неважен.
2. Дата рождения при поиске не учитывается, как думаю использовать переменную фамилия+имя+отчество, если 100% вхождение в поле 2 файла, то переменную заносим в файл, обнуляем, переходим к следующей записи. Что-то вроде таким образом.
3. Delphi выбран, т.к. для меня проще написать на нем, чем на С++. Использование OLE DB возможно.
4. Отчет можно в текстовом формате или в виде DBF, не критично, важен результат.
5. Запутался да и не силен в обработке БД.
AlexFBG вне форума Ответить с цитированием
Старый 30.09.2011, 08:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Delphi выбран, т.к. для меня проще написать на нем, чем на С++. Использование OLE DB возможно.
Задача разовая? Если да то проще достать FoxPro и в нем сделать запрос на сравнение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2011, 08:51   #5
AlexFBG
 
Регистрация: 29.09.2011
Сообщений: 8
По умолчанию

Задача постоянная -сверять списки получателей пенсии. Есть программа написанная на фоксе, но работает настолько криво, что ужас. Приходится конвертировать из csv в dbf, в dbf в поле приплюсовывать "г." (непонятные условия программы) и потом сравнивать. Уходит масса времени и есть желание написать программу и не волноваться за полученный результат что кого-то пропустил.
AlexFBG вне форума Ответить с цитированием
Старый 30.09.2011, 09:02   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
2. Дата рождения при поиске не учитывается, как думаю использовать переменную фамилия+имя+отчество, если 100% вхождение в поле 2 файла, то переменную заносим в файл, обнуляем, переходим к следующей записи.
Вы что, никогда не сталивались с полными тёзками? У совершенно разных людей могут совпасть не только имя+отчество (это вообще очень часто) но и фамилия!
Если уже есть правильно заполненное поле с датой рождения, то почему бы не задействовать дату рождения?

Цитата:
Сообщение от Stilet
Задача разовая? Если да то проще достать FoxPro и в нем сделать запрос на сравнение.
Кстати - да! Если это нужно один раз сделать - то зачем городить огород с программой, когда парой запросов проблему можно прямо в командном окошке FoxPro решить.
Да и EXEшничек на FoxPro можно сварганить! Могу посодействовать!

увидел Ваш пост. Понял, что задача не разовая...
Но Вы зря на FoxPro грешите - то, что у программиста, написавшего программу были кривоватые ручки,
не бросает тень на сам FoxPro



p.s. И выложите в архиве пару DBF файлов (структура ОБЯЗАТЕЛЬНО должна быть такая же, как в исходных файлах. Заполнение - должно ОБЯЗАТЕЛЬНО соответствовать исходным файлам. Содержимое - на Ваш вкус (Иванов Иван Иванович, Сидоров Сидор Сидорович и т.д.)

Последний раз редактировалось Serge_Bliznykov; 30.09.2011 в 09:04.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.09.2011, 09:34   #7
AlexFBG
 
Регистрация: 29.09.2011
Сообщений: 8
По умолчанию

dbf.ZIP
А на Foxpro не грешу, лет 10 назад очень даже активно использовал.
Во вложении 2 файла dbf с частью реальных записей, всего в каждой dbf порядка 5000 записей.
AlexFBG вне форума Ответить с цитированием
Старый 30.09.2011, 15:47   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на Delphi пример я ещё не накидал (хотя, там можно попытаться использовать те же самые запросы, что и в FoxPro.

на FoxPro:
Код:
set dele on
set excl off
set cent on
set date german

CLOSE DATA
use naz_all in 0
use wm in 0

select * from naz_all ;
  where padr(lower(alltrim(fm)+' '+alltrim(im)+' '+alltrim(ot)+' ')+dtoc(dtr),90) ;
      not in (select padr(lower(personouid),90) from wm) ;
  into table nazdiff

select * from wm ;
  where  padr(lower(personouid),90) ;
      not in (select padr(lower(alltrim(fm)+' '+alltrim(im)+' '+alltrim(ot)+' ')+dtoc(dtr),90) from naz_all) ;
  into table wmdiff
в файле nazdiff записи, которые есть в NAZ_ALL и нет в WM
в файл WMDIFF записи, которые есть в WM и которых нет в NAZ_ALL

в архиве компактный EXE файл (для его работы требуется наличие по PATH нужных runtime библиотек foxpro)
Вложения
Тип файла: rar GETDIFF_SOURCE.rar (1.6 Кб, 24 просмотров)
Тип файла: rar GETDIFF_EXE.rar (8.2 Кб, 28 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.09.2011, 16:14   #9
AlexFBG
 
Регистрация: 29.09.2011
Сообщений: 8
По умолчанию

Огромное спасибо! А как можно реализовать запрос в Delphi, чтобы не таскать библиотеки Fox, хотелось бы компактное приложение. BDE изначально предустановлено. PLS.
AlexFBG вне форума Ответить с цитированием
Старый 30.09.2011, 21:43   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
BDE изначально предустановлено.
А по-моему никак... Провайдеры фокспро из стандартного набора ИМХО такие запросы не возьмут... Могу конечно ошибаться, но сам Микрософт в своем ADO не особое внимание уделяет Фоксу. Если интересно мое мнение я предпочитаю всетки прикреплять к программе ядро фокспро, а саму программу писать основываясь на http://pblog.ru/?p=364
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт в БД Access dbf файлов через Delphi AndreyCY БД в Delphi 3 18.07.2011 19:33
dbf и tqueru, собрать несколько dbf файлов в одном, импорт вобщем betirsolt БД в Delphi 16 10.07.2011 13:52
Отправка файлов в .dbf формате Nikolay88 БД в Delphi 2 03.03.2011 04:26
Сравнение таблицы в Oracle с DBF Shanya БД в Delphi 1 12.05.2008 14:23