Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 17:04   #1
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
По умолчанию Выполнение хранимой прцедуры?

Здравствуйте.
В базе данных InterBase 7 созданы хранимые процедуры select, insert, delete,refreshдля каждой таблицы. Как можно их использовать в приложении (Delphi7), т.е. передвать им параметры, запускать и т.д.?
Andre1723 вне форума Ответить с цитированием
Старый 01.06.2009, 17:51   #2
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

поместить на форму компонент IBStoredProc... подключить его к базе... потом выбрать имя хранимой процедуры...
и потом:
выполнение процедуры
Код:
IBStoredProc1.ExecProc
maLoy*508 вне форума Ответить с цитированием
Старый 01.06.2009, 18:51   #3
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
По умолчанию

Что-то типа этого?
Код:
procedure TfStrType.AddElement;
begin
  try
    with fDM.IBStoredProc1 do
      begin
        Name:= 'SP_STRTYPE_I'; //SP_STRTYPE_I, ХП созданная в БД
        ParamByName('STRTYPE_ID').Value:=StrToInt(edStrType_id.Text);
        ParamByName('STRTYPENAME').Value:=StrToInt(edStrTypeName.Text);
        ParamByName('STRTYPEFULLNAME').Value:=StrToInt(edStrTypeFullName.Text);
        Prepare;
        ExecProc;
      end;
     //Bla-bla
  except
     //Bla-bla
  end;
end;
Andre1723 вне форума Ответить с цитированием
Старый 01.06.2009, 19:31   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

имхо сначала препаре, потом подстановка параметров, потом экзек
soleil@mmc вне форума Ответить с цитированием
Старый 01.06.2009, 21:11   #5
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
Смущение

Я думаю, сначала подстановка параметров, а затем prepere.
Как я понял (читая ответы на форуме) prepare запрашивает на сервере возможность выполнения запроса с данными параметрами.
Возник другой вопрос: Почему не сработал триггер в БД?
Я передал STRTYPE_ID = 0 и при последующем просмотре НД этот "0" появился в ключевом поле, что в принципе не должно быть (на поле стоит триггер Before Insert).
Цитата:
В топике "not null" и триггер в IBase/FB от Surgeon обсуждался этот вопрос
В компоненте IBQuery есть возможность задать триггер, как мне выполнить процедуру с помощью IBQuery?

Последний раз редактировалось Andre1723; 01.06.2009 в 21:16. Причина: дополнение
Andre1723 вне форума Ответить с цитированием
Старый 01.06.2009, 22:45   #6
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
По умолчанию

УПС
Цитата:
Как я понял (читая ответы на форуме) prepare запрашивает на сервере возможность выполнения запроса с данными параметрами.
неправильно...

Цитата:
При вызове метода prepare, Delphi посылает SQL запрос на удаленный сервер. Сервер выполняет грамматический разбор и оптимизацию запроса. Преимущество такой подготовки запроса состоит в его предварительном разборе и оптимизации. Альтернативой здесь может служить подготовка сервером запроса при каждом его выполнении. Как только запрос подготовлен, подставляются необходимые новые параметры, и запрос выполняется.
Andre1723 вне форума Ответить с цитированием
Старый 02.06.2009, 00:45   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Andre1723 Посмотреть сообщение
на поле стоит триггер Before Insert).
триггер стоит не на поле, а на таблице
лучше всего триггер в студию
а скорее всего, у тебя там просто не прописан генератор
soleil@mmc вне форума Ответить с цитированием
Старый 02.06.2009, 02:03   #8
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
По умолчанию

Для создания БД и всех остальных прибамбасов к ней (в том числе генераторы и триггеры) использовался
IB&FB Development Studio.
Код:
 
CREATE GENERATOR GEN_STRTYPE_ID;
SET GENERATOR GEN_STRTYPE_ID TO 0
Код:
CREATE TRIGGER TR_GEN_STRTYPE_ID FOR STRTYPE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  IF (NEW.STRTYPE_ID IS NULL) THEN 
    NEW.STRTYPE_ID=GEN_ID(GEN_STRTYPE_ID,1);
end
Andre1723 вне форума Ответить с цитированием
Старый 02.06.2009, 11:18   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

все верно
вся прелесть программ и в том числе триггеров, что они работают так как в них написано

ты передаешь при вставке в поле значение 0 - оно же не нулл, поэтому ветка по условию не срабатывает

отсюда 3 выхода:
1) передавать на инсерт нулл (если получится)
2) ничего в это поле не передавать и тогда будет считаться что передали нулл
3) прописать подстановку значения в это поле при инсерте без условия, т.е. всегда

З.Ы.: открою секрет - скрипты можно писать хоть в нотпаде (рекомендую Notepad++), а накатывать с помощью тулзы IBEScript; еще могу порекомендовать IBExpert (бесплатен для рос.разработчиков)

Последний раз редактировалось soleil@mmc; 02.06.2009 в 11:29.
soleil@mmc вне форума Ответить с цитированием
Старый 02.06.2009, 14:22   #10
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
По умолчанию

Спасибо. Воспользовался способом №3, первый не получился, а на второй ругается, что поле не должно быть пустым.
Andre1723 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с хранимой процедурой MargoNik БД в Delphi 13 14.05.2009 20:53
Выполнение команд Vovilnik Свободное общение 14 06.05.2009 19:22
Выполнение функции nikleb JavaScript, Ajax 7 10.08.2008 01:49
Выполнение хранимой процедуры с output параметром Иванчо БД в Delphi 5 26.10.2007 14:59
проблему возможно решить с помощью хранимой процедуры на SQL? yulia БД в Delphi 8 24.05.2007 20:25