Сравнить два dbf файла

Обновлено: 04.07.2024


Добрый день. есть две БД. В каждой Бд совпадают 3 поля name, surname, key. данные в других полях разные. НУжно сравнить две базы по этим 3 полям (name, surname, key). И если поля совпали то из первой первой базы перенести данные из поля Status и house во вторую базу. Подскажи плиз как это можно сделать Пусть Ваши таблицы (а не БД) имеют имена table1 и table2. Поля name, surname скорее всего символьные, а key - числовое. Так? Тогда я бы делал так:
Мануал
UPDATE - SQL Command
.
Example 4
тут будет то что надо
Example 5
ещё один вариант

Хотя, судя по тому что таблицы называешь "базами", это тебе не поможет, т.к. такие запросы работают лишь в VFP и лишь в 9-й его версии.

Borshenko
Пусть Ваши таблицы (а не БД) имеют имена table1 и table2. Поля name, surname скорее всего символьные, а key - числовое. Так? Тогда я бы делал так:
Чё-то здесь как-то всё не так, "нет того веселья, либо куришь натощак, либо пьёшь с. " Ну, неважно.
Индексировать надо как раз не table1, а table2.
To Reware
По-моему это у Вас как-то не так. Данные нужно вносить во 2-ю таблицу, вот ее и сканировать. А поиск производить в 1-й. Если найдено, то во 2-ю внести данные из 1-й. В какую нужно вносить данные, ту и сканировать.
Хотя это как раз тот вариант когда от перемены слагаемых сумма не меняется. Результат будет один и тот же.

Зачем if, когда есть scan for?

Зачем scan for, когда есть set relation + replace for?

Зачем replace for, когда при eof() replace ничего не делает?

Впрочем, вариант Игоря всё равно предпочтительнее.

Borshenko
To Reware По-моему это у Вас как-то не так. Данные нужно вносить во 2-ю таблицу, вот ее и сканировать. А поиск производить в 1-й. Если найдено, то во 2-ю внести данные из 1-й. В какую нужно вносить данные, ту и сканировать.
Хотя это как раз тот вариант когда от перемены слагаемых сумма не меняется. Результат будет один и тот же.

Странный вы сегодня Сканируем мы table1, и каждую её запись сиком ищем во второй таблице. Там что, код был сильно сложный приведён ? Могу упростить совсем для бронекатера.

Исправлено: reware, 26.04.12 11:43

Да вроде бы нормальный. Хотя. кто из нас признается, что он какой-то не такой.
reware
Сканируем мы table1, и каждую её запись сиком ищем во второй таблице. Там что, код был сильно сложный приведён ? Могу упростить совсем для бронекатера.

Получилось два пути
1. Сканируем table1, ищем соответствующую запись в table2 и при нахождении пихаем информацию из table1 в table2
2. Сканируем table2, ищем соответствующую запись в table1 и при нахождении втягиваем информацию из table1 в table2

Способ Радиона гораздо лучше этих двух (как я сам мог не сообразить через релейшн. ), но по нему задачу тоже точно так же можно решать двумя путями
1.

В обеих способах по 1-му пути данные из текущей области записываются в другую, а по 2-му данные из другой области пишутся в текущую.

Объясните мне, какая принципиальная разница и чем путь 1 предпочтительней, чем путь 2? В чем их не равносильность?
Может я действительно странный сегодня

Исправлено: Borshenko, 26.04.12 12:15

в девятке:
update t2 set f4=t1.f4, f5=t1.f5 from t1 inner join t2 on t1.f1=t2.f1 and t1.f2=t2.f2 and t1.f3=t2.f3

Обязательное условие этого решения - уникальность трех полей, они должны составлять ключ.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить. Пока ходил на обед поразмышлял.
Этот путь не подойдет
так, как в table2 в записях, которых нет в table1 поля заменятся на пустые.
А это отработает правильно

В этом случае предпочтительней путь 1, т.к. тут вместо ALL присутствует !EOF('table1')
А в 1-м способе не вижу никакой разницы. Вернее, предпочнения 1 над 2 еще не придумал.
To Влад
Да, конечно можно и так.

Читайте также: