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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2014, 22:56   #1
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию Хранимая процедура

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

Есть таблица в проекте:

Код:
CREATE TABLE IF NOT EXISTS `catalog` (
  `IDComm` int(11) NOT NULL AUTO_INCREMENT,
  `IDTypeComm` int(11) NOT NULL,
  `NameComm` varchar(40) NOT NULL,
  `MNN` varchar(40) DEFAULT NULL,
  `IDManuf` int(11) NOT NULL,
  `IDForm` int(11) NOT NULL,
  `Dosage` varchar(100) DEFAULT NULL,
  `QtyInBox` int(11) NOT NULL,
  `MinQty` int(11) NOT NULL,
  `Note` varchar(255) DEFAULT NULL,
  `Del` int(11) NOT NULL,
  PRIMARY KEY (`IDComm`),
  KEY `IDTypeComm` (`IDTypeComm`),
  KEY `IDTypeComm_2` (`IDTypeComm`,`IDManuf`,`IDForm`),
  KEY `IDManuf` (`IDManuf`),
  KEY `IDForm` (`IDForm`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
В Делфи есть запрос через UniQuery:

Код:
     with DM.UniQuery7 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('Insert into catalog (IDTypeComm, NameComm, MNN, IDManuf, IDForm, Dosage, QtyInBox, MinQty, Note)');
          SQL.Add('values (:idt, :nm, :mnn, :idm, :idf, :dosa, :qtyb, :qtym, :nt)');
          Params.ParamByName('idt').AsInteger:=DM.UniDataSource3.DataSet.FieldValues['IDTypeComm'];
          Params.ParamByName('nm').AsString:=Edit1.Text;
          Params.ParamByName('mnn').AsString:=Edit2.Text;
          Params.ParamByName('idm').AsInteger:=DM.UniDataSource4.DataSet.FieldValues['IDManuf'];
          Params.ParamByName('idf').AsInteger:=DM.UniDataSource5.DataSet.FieldValues['IDForm'];
          Params.ParamByName('dosa').AsString:=Edit3.Text;
          Params.ParamByName('qtyb').AsString:=Edit4.Text;
          Params.ParamByName('qtym').AsString:=Edit5.Text;
          Params.ParamByName('nt').AsString:=Edit6.Text;
          ExecSQL;
        end;
Как сделать чтобы вызывалась процедура и ей передавались эти параметры и какой компонент в Делфи для этого использовать?

И такой вопрос - если у пользователя нет прав на изменение например этой таблицы, но есть права на вызов процедур, и он вызывает эту процедуру - она выполнится?

Последний раз редактировалось Muramidaza; 02.03.2014 в 23:00.
Muramidaza вне форума Ответить с цитированием
Старый 03.03.2014, 08:29   #2
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Цитата:
Сообщение от Muramidaza Посмотреть сообщение
Как сделать чтобы вызывалась процедура и ей передавались эти параметры и какой компонент в Делфи для этого использовать?

И такой вопрос - если у пользователя нет прав на изменение например этой таблицы, но есть права на вызов процедур, и он вызывает эту процедуру - она выполнится?
Код:
SET TERM ^ ;

create or alter procedure GET_OSTATKI (
    INDEX1 INTEGER,
    DATE1 DATE)
returns (
    DATE2 DATE)
as
declare variable INDEX2 INTEGER;
begin
  DATE2 = '20-MAR-2012';
   /**/
end^

SET TERM ; ^
Вызывать процедуру можно обычным селектом
Код:
 SELECT DATE2 FROM GET_OSTATKI(:INDEX1,DATE1)
Если у процедуры есть права на изменение, то да
Код:
GRANT SELECT,UPDATE,DELETE ON CATALOG TO PROCEDURE GET_OSTATKI;
superedward вне форума Ответить с цитированием
Старый 03.03.2014, 13:17   #3
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию

Как вызвать хранимую процедуру из UniQuery? (СУБД MySQL) Просто не хочу лишний UniStoredProc ставить, если можно из Query вызывать. Или все же надо, я диплом пишу - докопаются?
Muramidaza вне форума Ответить с цитированием
Старый 03.03.2014, 15:01   #4
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Цитата:
Сообщение от Muramidaza Посмотреть сообщение
Как вызвать хранимую процедуру из UniQuery? (СУБД MySQL) Просто не хочу лишний UniStoredProc ставить, если можно из Query вызывать. Или все же надо, я диплом пишу - докопаются?
Вызывать процедуру можно обычным селектом в Query - это обычная практика
Код:
Код:
 SELECT DATE2 FROM GET_OSTATKI(:INDEX1,:DATE1)
superedward вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранимая процедура mavlon_m SQL, базы данных 7 07.09.2013 15:15
Хранимая процедура Ellkat SQL, базы данных 0 22.05.2011 17:02
Хранимая процедура. Cartman18 БД в Delphi 21 08.05.2010 18:56
хранимая процедура serg369 SQL, базы данных 4 07.02.2010 14:33
Хранимая процедура. nimf БД в Delphi 2 22.04.2008 13:16