Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Базы данных , База данных

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 я не передаю, он у меня фиксированный). И, надо сказать, жизнь мне эти две простенькие функции сильно упрощают. На этом очередная маленькая хитрость подошла к концу.

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

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: База данных ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:25:05/0.0056679248809814/1