Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Компонент Batch Move




 

Компонент BatchMove предназначен для групповых операций переноса данных из одного набора в другой. Основные свойства компонента: Source – источник данных и Destination – приемник данных типа TTable.Свойство Mode определяет режим переноса данных. представлены в таблице 2.

 

Таблица 2

Значения свойства Mode компонента BatchMove

batAppend Записи из источника данных добавляются в приемник, не изменяя существующих там записей. Таблица — приемник должна существовать до начала переноса данных.

 

 

Продолжение табл. 2

batUpdate Записи в таблице — приемнике с ключевыми полями, соот­ветствующими полям в таблице — источнике, изменяются на записи из источника. Новые записи в приемник не до­бавляются. Таблица — приемник должна существовать до начала переноса данных и должна иметь индекс.
batAppendUpdate Записи в таблице — приемнике с ключевыми полями, соот­ветствующими полям в таблице — источнике, изменяются на записи из источника. Записи из таблицы источника, ко­торые не имеют соответствия в приемнике, добавляются туда. Таблица — приемник должна существовать до начала переноса данных и должна иметь индекс.
batDelete Записи в таблице — приемнике, которым находится соответствие в источнике, удаляются из приемника. Таблица — приемник должна существовать до начала переноса данных и должна иметь индекс
batCopy Таблица — приемник создается и заполняется записями источника. Если таблица — приемник уже существовала, то ее содержимое заменяется на содержимое источника

 

Основной метод компонента — Execute выполняет операцию переноса дан­ных. Свойство MovedCount указывает число записей, успешно перенесенных в таблицу-приемник.

При переносе записей из одной таблицы в другую могут возникать проблемы, связанные с несоответствием типов полей в таблице-источнике и таблице-прием­нике. В этих случаях свойство AbortOnProblem указывает, должна ли немедленно прекращаться операция, вызвавшая несоответствие типов полей в таблице-источ­нике и таблице-приемнике. При задании AbortOnProblem = false желательно од­новременно задать свойство ProblemTableName. Это свойство указывает имя таб­лицы Paradox, в которую будут помещаться записи, в которых обнаружено несоот­ветствие типов полей и которые поэтому не помещены в приемник. Свойство ProblemCount определяет число записей, в которых возникли подобные пробле­мы. При задании AbortOnProblem = false записи с полями несоответствующих ти­пов нередко все-таки могут помещаться в таблицу-приемник. Дело в том, что ком­понент BatchMove пытается в этом случае преобразовать тип поля таблицы-источ­ника в тип поля таблицы-приемника. Если такое преобразование возможно, то никаких проблем при переносе записей не возникает.

В некоторых случаях перенос отдельных записей может оказаться невозможен из-за того, что они нарушают целостность данных в таблице-приемнике, например дублируют значения ключевого поля, которые должны быть уникальным, в этих случаях свойство AbortOnKeyViol указывает, должна ли немедленно прекращаться операция, вызвавшая нарушение целостности данных в таблице-приемнике. При задании AbortOnKeyViol = false желательно одновременно задать свойство KeyViolTableName. Это свойство указывает имя таблицы Paradox, в которую будут помещаться записи, которые не перенесены в приемник из-за нарушения целостности данных. Свойство KeyViolCount определяет число таких записей.

Поскольку при переносе данных могут возникать указанные выше и иные неприятности, в компоненте TBatchMove предусмотрен механизм, позволяющий произвести «откат» и сохранить прежние данные таблицы-приемника. Этому служит свойство ChangedTableName, в котором вы можете указать имя таблицы Paradox, создаваемой для сохранения копий всех изменяемых записей таблицы-приемника. Свойство ChangedCount содержит число записей, измененных или добавленных в таблице-приемнике (при Mode = batUpdate или batAppendUpdate), или удаленных из нее (при Mode = batDelete). Копии этих записей хранятся в таблице ChangedTableName.

Свойство Mappings типа TStrings позволяет задать таблицу соответствия источника и приемника. По умолчанию поля таблиц переносятся в поля приемника с теми же именами и в той же последовательности, как в источнике. Если это вас устраивает, то свойство Mappings задавать не надо. Но если вы зададите свойство Mappings, то можете изменить определенный по умолчанию способ переноса данных. Во-первых, вы можете задать в этом свойстве только часть полей, значения которых надо переносить. Имена полей записываются по одному в строчке. Значения полей, не указанные в Mappings, переноситься не будут. Более того, вы можете указать, в какое поле приемника надо переносить значение поля источника. Например, если вы задаете в Mappings строку:

 

Pokupatel,

 

то значение поля Pokupatel из источника будет переноситься в поле Dep приемника. Но если вы зададите строку:

 

Pokupatel= NewPokupatel,

 

то значение поля Pokupatel из источника будет переноситься в поле NewPokupatel приемник! Как видим, компонент BatchMove является очень удобным средством копирования, объединения, упорядочивания таблиц. Постройте тестовый пример, на котором вы сможете наглядно посмотреть различные режимы работы BatchMove. Пусть в этом примере можно будет создать копию таблицы Example, a затем оперировать с этой копией как с приемником. Копия будет иметь имя Example2.

Перенесите на форму по два экземпляра компонентов Table, DataSource и DBGrid. Одну цепочку этих компонентов (Table1, DataSource1 и DBGrid1) свяжите с источником — таблицей Example. Эта цепочка соответствует таблице-источнику Example, а в компоненте DBGrid1 можно будет просматривать ее и изменять содержа в ней информацию. Вторую цепочку (Table2, DataSource2 и DBGrid2) свяжите друг с другом, но не связывайте компонент Таblе2 ни с какой базой данных. Этот компонент будет приемником, в который будут переноситься данные из первой таблицы.

Добавьте на форму компонент BatchMove. В его свойстве Source задайте Table1, а в свойстве Destination — Таblе2. Свойство Mode можно установить любым, например, batCopy. Все равно режим переноса данных у нас будет задаваться программно. Добавьте на форму метку Labe1 для отображения числа скопированных записей. И добавьте ряд кнопок Button, соответствующих различным режимам переноса данных. Например, кнопку с надписью «Копировать» для режима batCopy, кнопку с надписью «Добавить» для режима batAppend и т.д. Добавьте также кнопку с надписью «Удалить таблицу», которая позволит удалять созданную таблицу Example2.

Введите в раздел private описания класса процедуру Exec, которая будет выполнять перенос данных из источника в приемник в заданном режиме. Реализация этой процедуры может иметь вид:

 

Procedure TForm1.Exec;

begin

Table2.Active:=false;

Table2.DatabaseName:=Table1.DatabaseName;

Table2.TableName:='Example2.db';

If (BatchMove1.Mode=batCopy) or (Table2.Exists) then

begin

BatchMove1.Execute;

Table2.Active:=true;

Label1.Caption:='Обработано'+

IntToStr(BatchMove1.MovedCount)+' записей';

end

else ShowMessage('Для выполнения этой операции'+

#13+ 'таблица должна существовать');

end;

В этой процедуре таблица-приемник закрывается. Затем задается база данных и таблица-приемник. Если режим переноса данных не batCopy и таблица не существует (поверяется свойство Exists), то пользователю дается сообщение об ошибке, поскольку для всех режимов, кроме batCopy, таблица должна существовать. Если жевсе нормально, то осуществляется перенос данных и таблица-приемник открывается, после чего в компоненте DBGrid2 можно видеть ее содержание. В метке Label1 отображается число обработанных записей в таблице-источнике.

Обработчики щелчков на кнопках, задающих режим, сводятся к заданию режима переноса данных и вызову процедуры Exec. Например, обработчик щелчка кнопки Копировать имеет вид:.

BatchMove1.Mode:=batCopy;

Exec;

остальные обработчики строятся аналогично. Только изменяется значение, присваиваемое свойству BatchMovel.Mode.

Обработчик щелчка на кнопке «Удалить таблицу» имеет вид:

 

If Table2.Exists then

begin

Table2.Active:=false;

Table2.DeleteTable;

end;

 

Если таблица-приемник существует, то она удаляется методом DeleteTable.

 





Поделиться с друзьями:


Дата добавления: 2015-03-29; Просмотров: 1278; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.