![]() |
#1 |
Участник
|
всем привет,
возникла задача быстрого сравнения двух идентичных по структуре таблиц. то есть, отфильтровали одну, отфильтровали вторую и нужно определить, являются ли полученные наборы данных в них идентичными. построчно сравнивать все поля - вариант, но как-то неэстетично ![]() никогда раньше не сталкивался с подобными задачами, может у кого уже есть красивое универсальное решение? |
|
![]() |
#2 |
Участник
|
Если sql версия - сформируйте SQL запрос вида
select PK_Поле1, .. PK_ПолеN from ТаблцаА A inner join ТаблицаБ B on A.PK_Поле1=B.PK_Поле1 and ... A.PK_ПолеN=B.PK_ПолеN where A.ПолеДляСравнения1<>B.ПолеДляСравнения1 or A.ПолеДляСравнения2<>B.ПолеДляСравнения2 ... or A.ПолеДляСравненияX<>B.ПолеДляСравненияX В качестве результата вернутся различающиеся данные |
|
![]() |
#3 |
Участник
|
об sql я уже думал. ) но решение должно быть именно универсальным, потому как среди предполагаемых пользователей есть много таковых, кто пользует native БД.
|
|
![]() |
#4 |
Участник
|
Ну тогда только построчное стравнение.
Если не секрет - для чего может использоваться подобный функционал сравнения всех со всеми? |
|
![]() |
#5 |
Участник
|
Если нужен только факт различия двух записей, без указания по каким полям и кол-во полей не большое, то возможно подойдет условие типа FORMAT(Rec1) = FORMAT(Rec2).
|
|
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Участник
|
Да это ограничение естественно упускать нельзя, для большей универсальности можно закодить так
Rec1.SETRECFILTER; Rec1 := Rec2; IF Rec1.FIND THEN MESSAGE('Записи совпадают'); |
|
![]() |
#8 |
Участник
|
FORMAT - идея хороша, спасибо. надо просмотреть структуры таблиц, возможно, подойдет
SETRECFILTER - оперирует со значениями ключа, но не всех полей. или я не понимаю идею? |
|
![]() |
#9 |
Участник
|
Ну надо уточнить, если вы сравниваете записи из одной таблицы, то этот способ то что нужно, тк достаточно сравнить только ключи, если из разных, то тогда только FORMAT с его ограничениями.
|
|