Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 10
Всего онлайн: 10
Зарегистрировано юзеров: 7550
Комментариев на сайте: 670
Новый юзер: dolginaolha



Последние комментарии
c
Amard прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
Всем привет! В Школе Частных Прорабов Prorab2.ru обучают как сделать дешевый и недорогой фундамент своими руками используя Строительные Нормы и Правила (СНиП), технологии для фундаментов и Технику Безопасности (ТБ) на объекте с помощью одной из лучших онлайн школ в мире ,а также единственной онлайн школы в России и на просторах бывшего СНГ Вы реально научитесь строить Фундамент за пол цены от рыночной стоимости работ – это не шутка, не розыгрыш и не мечта. Фундамент за 50 процентов – это реальность! Недавно я нашел крутую онлайн школу. Мужики реально крутая школа, все объясняют без заумных слов. Все нужно делать заблаговременно и разумно экономно! Там изучают множество тем о фундаментах. Одна из них: [url=https://prorab2.ru/category/fundament]Фундамент из бруса.[/url] До новых встреч!
CarolineWrifs прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
[img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/product-head1.png[/img] [url=https://kapsuly-lipocarnit.ru/][img]https://karga.info/wp-content/uploads/2019/02/orig.jpg[/img][/url] Lipocarnit (ЛипоКарнит) - [url=https://kapsuly-lipocarnit.ru/]липокарнит капсулы для похудения цена екатеринбург[/url] для похудения в Екатеринбурге Цена: 990 руб. [url=https://kapsuly-lipocarnit.ru/]lipocarnit отзывы[/url] - Полная конфиденциальность Наименование и назначение товара не указаны на посылке. В соответствии с политикой конфиденциальности мы не передаем информацию третьим лицам. Аудио обзоры нашего магазина Липокарнит (LipoKarnit) - капсулы для похудения - описание Кто такие представители прекрасного пола ради похудения? Часы физических упражнений, строгие диеты, даже липосакция. Но, по мнению большинства врачей, лучше всего получить твердое натуральное средство для похудения с гарантированным эффектом. Среди тех, кто заменяет упражнения и осанку, профессионалы включают продукт для похудения Lipocarnit. По словам производителей, любая капсула бьет избыток жира на клеточном уровне, ускоряя обмен веществ и снижая уровень глюкозы в крови. LipoCarnit превращает жир в энергию и снижает уровень холестерина. Это, если верить словам клиентов, приводит к обещанной и быстрой потере веса. Почему мы набираем вес? Есть много причин, почему мы набираем вес. К ним относятся диетические излишки и фиксированный образ жизни и генетическая предрасположенность. Однако наименее реальным бедствием современной цивилизации является изменение в процессе обмена веществ. Нарушение обмена веществ возникает в результате: отсутствие компонентов, пригодных для обработки жировых клеток; сбой в процессе образования и разложения жира; отсутствие деталей, необходимых для осуществления химических реакций. Начальные признаки избыточного веса Дамы считают, что образования с избыточным весом наверняка не будет недостатка. Однако не только стрелки весов способны говорить о неточном ходе жирового обмена. Сначала вес может не измениться, однако другие симптомы нарушения обмена веществ будут наименее очевидными: апельсиновая корка; храп; постоянный аппетит; слабость; высокое кровяное давление; Боли в спине и суставах. Сказать, что все эти плохие реакции на тело означают заботиться о себе! Помогает ли нам бездействие? Если вам кажется, что лишний вес - это не та проблема, из-за которой вы должны изменить свой обычный образ жизни, вот лишь несколько несоответствий, которые могут привести к избыточному весу и неправильному обмену веществ. : высокое кровяное давление; избыток холестерина; уровень сахара в крови; проблемы с поджелудочной железой; Риск склероза и инфаркта миокарда. Не волнуйтесь, получите естественное и неопасное лечение для контроля жира - капсулы Липокарнит. Липокарнит (Li Капсулы ЛипоКарнит разрушают жировые отложения за счет действия состава природного баланса; Липоевая кислота нормализует уровень глюкозы в крови, очищает и сохраняет печень, ускоряет выделение энергии липидными клетками; Pycinate Pycollinate уменьшает чувство голода, расщепляет жир и нормализует кровяное давление; L-карнитин превращает липиды в энергию, снижает уровень холестерина. Поступление таким образом, чтобы улучшить ум, а не состав, значительно уменьшить избыточный вес. И сразу же для похудения не стоит ограничиваться едой. Продукт «переконфигурирует» организм для максимально быстрого удаления жиров и в то же время не вызывает привыкания или побочных эффектов.

Создание генераторов и триггеров в InterBase

В данной статье я опишу реализацию небольшой утилиты для InterBase, которая создает генераторы, автоматически вызываемые из триггеров. На создание такой утилиты меня подвигло то, что я не нашел никакого средства для этого, а создавать генераторы руками мне неудобно, да и слишком много времени это отнимает.

Общая информация
Вообще, считается хорошим стилем создание первичного ключа в виде уникального числа. Мало того, это наиболее удобный способ для связи таблиц. Такой первичный ключ часто называют "айдишкой" (от слова "ID", идентификатор) таблицы.

Значения такого поля могут задаваться и вручную, но тогда придется вручную же контролировать их уникальность, что практически невозможно при многопользовательском режиме использования БД. Для этого в InterBase был включен механизм "генераторов", аналогичный механизму "последовательностей" в Oracle. Единственная цель генератора - дать уникальное (в его контексте) числовое значение при вызове.

Сами по себе генераторы практически не имеют смысла, так как они никак не связаны с таблицами БД. Для запроса значения генератора применяются триггеры, автоматически вызываемые СУБД при возникновении определенных событий. В основном, триггер, использующий генератор, вызывается по событию "BeforeInsert", то есть перед непосредственной вставкой данных.

Текст создания классического генератора и триггера для него, в общем случае, выглядит следующим образом:

CREATE GENERATOR GEN_%TBL_NAME%;
CREATE TRIGGER NEW_%TBL_NAME% FOR %TBL_NAME%
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if (NEW.%ID_FIELD% is NULL) then NEW.%ID_FIELD% = gen_id(GEN_%TBL_NAME%,1);
end
Здесь %TBL_NAME% - имя таблицы, для которой создается триггер и генератор, а %ID_FIELD% - имя поля, являющегося первичным ключом.

Реализация
Итак, для реализации утилиты нам необходимо для начала найти список таблиц базы данных, а также их первичных ключей. Для этого мы сделаем запросы к словарю данных базы (словарь данных еще называется метаданными), который содержится в системных таблицах, имена которых начинаются с последовательности "rdb$".

Список таблиц можно получить следующим образом:
select rdb$relation_name from rdb$relations
where (rdb$system_flag=0) and (rdb$view_source is null)
order by rdb$relation_name asc;
Список первичных ключей получаем так:
select i.rdb$field_name from rdb$relation_constraints r, rdb$index_segments i
where r.rdb$relation_name=:TBL_NAME and r.rdb$constraint_type='PRIMARY KEY'
and r.rdb$index_name=i.rdb$index_name order by i.rdb$field_position
Теперь все необходимое для дальнейшей работы получено и мы можем создавать генераторы с триггерами.

Предположив, что вы уже создали модуль данных и окно подключения к базе данных, перейду сразу к содержательной части. Предлагаю вам создать вот такое окно:

В поле списка опций (большое белое поле) у нас будут имена таблиц, а надписи на кнопках говорят сами за себя. Как вы видите, ничего сложного. Код обработки нажатия на кнопку "Create generators..." таков:
procedure TForm2.btnCreateClick(Sender: TObject);
var i: integer;
begin
  with dm do for i := 0 to pred(lbTables.Count) do
  begin
    if lbTables.Checked[i] then
      if not HasTrigger(lbTables.Items[i]) then
      begin
        if not tm.InTransaction then tm.StartTransaction;
        try CreateTriggeredGenerator(lbTables.Items[i]);
        except
          tm.Rollback;
          showmessage('Unable to create objects for the table '+lbTables.Items[i]+'.');
        end;
        if tm.InTransaction then
        begin
          tm.Commit;
          showmessage('Objects for the table '+lbTables.Items[i]+' is successfully created.');
        end;
      end;
  end;
end;
Здесь для каждой выбранной в списке таблицы проверяется, существует ли уже триггер с генератором для этой таблицы. Если нет, то они создаются.

Проверка существования триггера выглядит вот таким образом:
function TForm2.HasTrigger(const TableName: string): boolean;
var s: string;
    i: integer;
begin
  Result := false;
  if (Gens.Count < 1) then exit;
  with dm do
  begin
    qHasTrigger.ParamByName('TBL_NAME').Value := TableName;
    qHasTrigger.Open;
    while not qHasTrigger.Eof do
    begin
      s := qHasTrigger.FieldByName('rdb$trigger_source').AsString;
      if (length(s) > 0) then
        for i := 0 to pred(Gens.Count) do
          if pos(UpperCase(Gens[i]),UpperCase(s)) > 0 then Result := true;
      qHasTrigger.Next;
    end;
    qHasTrigger.Close;
  end;
end;


Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 14 Июня 2015
Просмотров:


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.