В большинстве случаев, с этим словом в мире компьютеров связывают операцию копирования измененных или отсутствующих файлов с одного носителя на другой. Реже это может быть связано с проблемой размонтирования флэшки под Windows. Кстати, консольная программа Sync из бесплатного набора Sysinternals от Microsoft может предотвратить потерю данных, которые еще не записаны на флэшку и находятся в кэше. И уж совсем редко это может быть связано с прикладными программами.
Предположим, есть СУБД в которой две таблицы должны быть синхронизированы по некоторым полям и по какой-то причине произошла разсинхронизация этих таблиц, что приводит к бесконечным сообщениям об этом и очень нервирует ваших знакомых. Решить эту проблему с помощью подручных средств к этой СУБД можно лишь с помощью процедурного программирования. Запросы SQL здесь не работают. Не ошибусь, если скажу, что таких СУБД образца прошлого века работающих под Windows и по сей день, наберется немалое количество. Замечу, что проблема эта не разовая и устранять ее приходится на протяжении нескольких последних лет.
Итак, есть две таблицы. Они имеют необходимые индексы. Особенность в том, что исходная таблица избыточна и содержит несколько записей за интересующую дату, а выбрать нужно только последнюю запись. Сделать это можно следующим образом:
var Rcp = open("recip_Dat"); var Src = open("sourc_Dat", index); var d_Acc; // Первое ключевое поле sourc_Dat var d_Dat; // Второе ключевое поле sourc_Dat var d_Id=0; // Третье ключевое поле sourc_Dat var d_Sum1, d_Sum2; var flag = true; next(Src); while ( flag ) d_Acc = Src.IdAcc; d_Dat = Src.Date; while ((d_Acc == Src.IdAcc) and (d_Dat==Src.Date)) d_Acc = Src.IdAcc; d_Dat = Src.Date; d_Id = Src.Id; d_Sum1 = Src.restIn; d_Sum2 = Src.restOut; if (not next(Src)) flag=false; end; end; if (d_Id>0) Rcp.IdAcc = d_Acc; Rcp.Dat = d_Dat; Rcp.Id = d_Id; Rcp.InSum = d_Sum1; Rcp.OutSum = d_Sum2; Rcp.Insert(); end; end;
Если вы заметили ошибки в тексте, пришлите message. I'm sorry.