КАТЕГОРИИ: Архитектура-(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
Продолжение табл. 2
Основной метод компонента — 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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |