Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сравнение двух таблиц в базе данных [D7, Paradox]


Lis'S ©   (2006-06-24 11:01:00) 

Господа, помогите! Горю! Есть 2 таблицы, в них пять полей (лиц. счёт, ФИО и год. рождения). Необходимо сравнить эти две таблицы на наличие в них неправильных данных. Т.е. если хотя бы один символ не будет совпадать, то нужно вывести эту запись в таблицу ошибок. Я сделал примитивный вариант, когда записи находятся, так сказать, друг напротив друга, но этот вариант не катит, так как данные могут быть в любом месте таблицы. Пробовал прописывать через while not Table1.Eof сравнивает только с первой записью.


ЮЮ   (2006-06-26 03:50:00) [1]

SELECT e.*, t.*
FROM
 EtalonTable.*
 FULL JOIN TestTable t ON
 (e.ACCOUNT = t.ACCOUNT) AND (e.FIO = t.FIO) AND ...
WHERE
 (e.ACCOUNT IS NULL) OR (t.ACCOUNT IS NULL)


SergP.   (2006-06-24 19:35:00) [2]

Как я понял нужно в одной таблице отыскать все записи, которые не присутствуют в другой (в эталоне).


Курдль   (2006-06-24 14:17:00) [3]


> Для примера Фамилия:
> Эталон:
> 00012 Иванов Иван Иванович 1914
>
> Проверяемая таблица:
> 00012 Ивонов Иван Иванович 1914
>
> Т.е. в фамилии не совпадает одна буква, что тоже считается
> ошибкой.


А если реально есть клиент с фамилией Ив онов, то ошибка ведь будет в счете!

Вам "в консерватории надо что-то подправить" (с).
Так программы с БД не делаются.
При такой постановке вопроса должны быть хотя бы 2 таблицы: клиентов и счетов. В первой не должен повториться ни один клиент (вероятность ничтожна, что найдутся 2 полных тезки с одной датой рождения). А вторая должна быть связана с первой в соотв. с Вашей бизнес-логикой (один-к-одному, один-ко-многим).
В Вашем случае автоматизация бессмысленна, пока данные не будут приведены в поорядок. Так что открывайте Excel и ручками ищите ошибки.


Lis'S   (2006-06-24 13:49:00) [4]

Для примера Лицевой счёт:

Эталон:
00012 Иванов Иван Иванович 1914

Проверяемая таблица:
00012 Иванов Иван Иванович 1914
00015 Иванов Иван Иванович 1914

Т.е. лицевой счёт в проверяемой таблице у одного и того же человека открыт два раза - это считается ошибкой.

Для примера Фамилия:
Эталон:
00012 Иванов Иван Иванович 1914

Проверяемая таблица:
00012 Ивонов Иван Иванович 1914

Т.е. в фамилии не совпадает одна буква, что тоже считается ошибкой.


Курдль   (2006-06-24 13:17:00) [5]

Ладно, я сегодня добрый - приведу пример для первого варианта, когда ПК все-таки есть:


select * from TABLE1 T1, TABLE2 T2
where T1.ACCOUNT = T2.ACCOUNT
and (T1.FIO <> T2.FIO or T1.DATE <> T2.DATE)


Курдль   (2006-06-24 13:01:00) [6]

Первичный ключ-то в таблицах есть? Например лицевой счет
Он должен совпадать в обеих таблицах? Или у программы должно быть чисто ассоциативное мышление типа "если в первой таблице есть запись Иван Иваныч Пупкин", то во второй "Иван Иваныч П апкин" - это ошибка?

Во втором случае - надо подумать, а в первом - даже думать не надо!


Savek   (2006-06-24 12:28:00) [7]

var
   qr1,qr2 : TADOQery;

....
//Загружаем проверяемую таблицу
qr1.SQL.Clear;
qr1.SQL.Add('...');
...
qr1.Open;

//в цикле проверяем наличие данных в эталоне

while not qr1.eof do begin
    whith qr2 do begin
        SQL.Clear;
        SQL.Add('select * from Эталон where Field1=:F1 ....');
        Parameters.ParamByName("F1').value:=qr1.FieldByName('Field1');
        ....
        Open;
        if IsEmpty then begin
        // если запрос пустой значит такой записи в эталоне нет, здесь запись ошибки
        end;      
    end;
qr2.Next;
end;


Lis'S   (2006-06-24 12:08:00) [8]

Эта программа для проверки достоверности данных. Существует база с правильными записями (таблица 1 ), она служит как бы эталоном. И, например, необходимо сравнить на достоверность данных таблицу 1 с таблицей 2, которую присылает на проверку некая организация. В таблице 2
данные могут быть ошибочными и эти ошибки необходимо найти и вывести. То есть эта программка проверки на несоответствии значений полей двух баз.


Курдль   (2006-06-24 11:47:00) [9]

Само по себе наличие 2-х разных таблиц с одинаковыми данными говорит о грубом нарушении принципов построения реляционных БД.


Наверх

Титульная страница Поиск, карта сайта Написать письмо