Недавно добавленные исходники

•  TDictionary Custom Sort  3 227

•  Fast Watermark Sources  2 992

•  3D Designer  4 751

•  Sik Screen Capture  3 259

•  Patch Maker  3 467

•  Айболит (remote control)  3 528

•  ListBox Drag & Drop  2 904

•  Доска для игры Реверси  80 791

•  Графические эффекты  3 843

•  Рисование по маске  3 172

•  Перетаскивание изображений  2 544

•  Canvas Drawing  2 672

•  Рисование Луны  2 500

•  Поворот изображения  2 094

•  Рисование стержней  2 120

•  Paint on Shape  1 525

•  Генератор кроссвордов  2 183

•  Головоломка Paletto  1 730

•  Теорема Монжа об окружностях  2 158

•  Пазл Numbrix  1 649

•  Заборы и коммивояжеры  2 017

•  Игра HIP  1 262

•  Игра Go (Го)  1 201

•  Симулятор лифта  1 423

•  Программа укладки плитки  1 178

•  Генератор лабиринта  1 512

•  Проверка числового ввода  1 297

•  HEX View  1 466

•  Физический маятник  1 322

•  Задача коммивояжера  1 357

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

StoredProc становится удобнее



Автор: Павел

Примерно через неделю после того, как программист впервые сталкивается с компонентом TStoredProc, предназначенным для вызова хранимых процедур БД, приходит понимание, что для работы с процедурами, которые не возвращают наборов данных (курсоров) лучше работать через один и тот же компонент, просто перенастраивая его. Итогом становится нагромождение однотипных строк кода, которые делают одно и то же. Сэкономлю вам еще одну неделю и предложу метод, который позволяет, как минимум, сократить количество строк, которые надо писать для вызова хранимых процедур.

Решение

Из чего же состоит процесс работы с компонентом TStoredProc? Часто это расподготовка (UnPrepare), присвоение имени хранимой процедуры, подготовка к запуску (Prepare), установка параметров, запуск и, наконец, получение результата.

Автоматизировать данные действия я предлагаю с помощью одной процедуры и одной функции, которыми и сам нередко пользуюсь. Рекомендую их прописать в DataModule, в котором же находятся прочие ваши невизуальные компоненты для работы с БД (что, кстати говоря, является неплохим стилем).

Процедура инициализации

procedure Tdm.InitSProc(var aProc: TStoredProc; const ProcName: string);
begin
  aProc.UnPrepare;
  aProc.StoredProcName := ProcName;
  aProc.Prepare;
end;

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

Функция запуска

function Tdm.ExecSProc(var aProc: TStoredProc): integer;
begin
  Result := -1;
  aProc.Prepare;
  aProc.ExecProc;
  try
    if aProc.Params.FindParam('Result') <> nil then
      Result := aProc.ParamByName('Result').AsInteger;
  except
    Result := -1;
  end;
end;

Эта функция запускает ранее заданную хранимую процедуру и, в случае ошибки или, если хранимая процедура возвращает не числовой результат (не возвращает его вовсе), возвращает -1. Во всех остальных случаях функция возвращает значение параметра "Result", то есть, ответ хранимой процедуры.

Пример

with dm do
begin
  InitSProc('PKPG_CONSREPS.CHECK_ENABLED_VERSION');
  pExec.ParamByName('xTypeID').Value := eType.KeyValue;
  i := ExecSProc;
  if i > 0 then
  begin
    ModalResult := mrCancel;
    ErrorMessage(SomeMsg, mtWarning, 'Проблема');
    exit;
  end;
end;

Вот так я использую это в жизни (параметр aProc я не передаю, он у меня фиксированный). И, надо сказать, жизнь мне эти две простенькие функции сильно упрощают. На этом очередная маленькая хитрость подошла к концу.

Всем успехов.








Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте