|
|
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Всем привет, у меня есть процедура с in/out параметрами : авторCREATE OR ALTER procedure CL_CATALOG_EL_SET ( PDIRVALVID bigint, PDIRID bigint, PDIRCODE varchar(1024), PDIRTYPE integer, PDIRVAL varchar(1024), PDIRNOTE varchar(1024), PUSER int, PMOVE bigint, PMANIP bigint) returns ( MSG varchar(1024), RES bigint) as... согласно описанию http://firebirdsql.su/doku.php?id=execute_procedure я вызвал процедуру в IbExpert, она отработала нормально, на рис. видно что мои out параметры получили значения. Подскажите как должен выглядеть вызов этой процедуры в программе?? ведь out-параметры явно не указаны!!!! Мне необходимо вызвать процедуру в компоненте UniSql (UniDac), получить р-т и дальше с ним поработать. В Oracle out-параметры явно объявляются. автор{if Oracle} begin CL_CATALOG_EL_SET( :PDIRVALID, :PDIRID, :PDIRCODE, :PDIRTYPE, :PDIRVAL, :PDIRNOTE, :MSG, :RES, :PUSER, :PMOVE, :PMANIP); end; {else} {if InterBase} EXECUTE PROCEDURE CL_CATALOG_EL_SET( :PDIRVALID, :PDIRID, :PDIRCODE, :PDIRTYPE, :PDIRVAL, :PDIRNOTE, :PUSER, :PMOVE, :PMANIP) {endif} {endif} Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:01:54 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Mediv, Писать: SELECT FIELD1,FIELD2 from PROCEDURE_NAME(:IN_PARAM1,:IN_PARAM2) пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:17:10 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Medivв компоненте UniSql (UniDac) Тут и Дельфи-то никто не знает, а ты про какие-то экзотические компоненты спрашиваешь. Иди на форум производителя. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:35:10 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
DarkMasterMediv, Писать: SELECT FIELD1,FIELD2 from PROCEDURE_NAME(:IN_PARAM1,:IN_PARAM2) пробовал? автор select * from CL_CATALOG_EL_SET(:PDIRVALID, :PDIRID, :PDIRCODE, :PDIRTYPE, :PDIRVAL, :PDIRNOTE, :PUSER, :PMOVE, :PMANIP) такой вызов возвращает значения, как эти значения в параметр передать?? добавлял в конец авторinto :MSG, :RES , стреляла ошибка, как это правильно сделать?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:35:49 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
http://www.ibase.ru/devinfo/sp_call.htm Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 17:46:26 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Если ХП возвращает единственную строку данных, то можно юзать execute procedure <SP_Name(...)>, после чего получать значения обычным образом: Msg := Query.FieldByName('MSG').AsString; Если возвращается несколько строк, то select * from <SP_Name(...)> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 18:36:04 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, Наверное привычка, но всегда пишу SELECT вне зависимости от того, возвращается одно значение или несколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 19:43:50 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
DarkMasterвсегда пишу SELECT вне зависимости от того, возвращается одно значение или несколько. Вот только выполнимая процедура, без suspend внутри, через select ничего вернуть не может. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 19:45:23 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalЕсли ХП возвращает единственную строку данных, то можно юзать execute procedure <SP_Name(...)>, после чего получать значения обычным образом: Msg := Query.FieldByName('MSG').AsString; Если возвращается несколько строк, то select * from <SP_Name(...)> авторCREATE OR ALTER procedure CL_CATALOG_EL_SET ( PDIRVALVID bigint, PDIRID bigint, PDIRCODE varchar(1024), PDIRTYPE integer, PDIRVAL varchar(1024), PDIRNOTE varchar(1024), PUSER int, PMOVE bigint, PMANIP bigint) returns ( MSG varchar(1024), RES bigint) as... вызов : авторEXECUTE PROCEDURE CL_CATALOG_EL_SET( :PDIRVALID, :PDIRID, :PDIRCODE, :PDIRTYPE, :PDIRVAL, :PDIRNOTE, :PUSER, :PMOVE, :PMANIP) В объявлении процедуры указан с блок с out-параметрами : авторreturns ( MSG varchar(1024), RES bigint) as... а в вызове его нет, как компонент в программе получиться значения этих параметров??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 09:26:28 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
DarkMasterFr0sT-Brutal, Наверное привычка, но всегда пишу SELECT вне зависимости от того, возвращается одно значение или несколько. Конечно так тоже можно, но в случае select будет создан курсор, а при execute просто вернутся значения. Правда, некоторые компоненты, особенно замшелые, могут не поддерживать такой способ вызова. автора в вызове его нет, как компонент в программе получиться значения этих параметров??? Как-как, сервер-то знает, какие выходные параметры у ХП. Вот он их и возвращает. Кусок моей проги: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. При этом текст запроса имеет вид 'EXECUTE PROCEDURE PR_PROC(:par1, :par2, ...)' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 10:31:24 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalDarkMasterFr0sT-Brutal, Наверное привычка, но всегда пишу SELECT вне зависимости от того, возвращается одно значение или несколько. Конечно так тоже можно, но в случае select будет создан курсор, а при execute просто вернутся значения. Правда, некоторые компоненты, особенно замшелые, могут не поддерживать такой способ вызова. автора в вызове его нет, как компонент в программе получиться значения этих параметров??? Как-как, сервер-то знает, какие выходные параметры у ХП. Вот он их и возвращает. Кусок моей проги: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. При этом текст запроса имеет вид 'EXECUTE PROCEDURE PR_PROC(:par1, :par2, ...)' Мне нужно использовать UniSql (UniDac), там нет FieldByName. отказываться от него не хочется, иначе я попаду на параллельную разработку и поддержку 2-ух клиентов, запостил тему на сайте деворта, посмотрим что ответят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 10:38:45 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Mediv, мда, какой-то странный компонент-пак. Ну, тогда не судьба. Юзай query и select * from <proc> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 11:37:20 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalMediv, мда, какой-то странный компонент-пак. Ну, тогда не судьба. Юзай query и select * from <proc> Компоненты доступа к БД отличные, давно пользую, конечно там многих фишек нет, т.к. у каждой СУБД свои нюансы, но в основном все отлично, цепляюсь к разным БД, не нужно сад-огород из разных компонентов разводить, у деворта кстати есть компоненты заточенные под определенную БД, но по моему под FB нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 11:48:01 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Mediv, есть IBDAC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 11:57:24 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Medivиначе я попаду на параллельную разработку и поддержку 2-ух клиентов Это не так уж сложно если немного подумать головой. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 12:58:04 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Решение предложенное девартом : авторUniSQL.CreateProcCall('CL_CATALOG_EL_SET'); UniSQL.Execute; ShowMessage(UniSQL.ParamByName('msg').AsString); Работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 13:10:57 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMedivиначе я попаду на параллельную разработку и поддержку 2-ух клиентов Это не так уж сложно если немного подумать головой. Ну так поделись опытом с сообществом, всем будет полезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 13:12:08 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
MedivНу так поделись опытом с сообществом, всем будет полезно. Влад опять начнёт называть меня фантазёром. Всё просто: разбиваешь своё приложение на три логические части "интерфейс БД", "объекты бизнес-логики" и "пользовательский интерфейс". Всё общение с БД заворачиваешь в первую часть и делаешь из неё абстрактный класс. Потом для работы с любой СУБД останется только реализовать наследника этого класса и готово: можно выбирать используемую СУБД в рантайме, просто присваивая нужный объект глобальной переменной. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 13:22:51 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
MedivРешение предложенное девартом : авторUniSQL.CreateProcCall('CL_CATALOG_EL_SET'); UniSQL.Execute; ShowMessage(UniSQL.ParamByName('msg').AsString); Работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Подозревал, что они в понятие "параметры" запихнули и поля, но по справке ничего подобного не скажешь... ну, значит, разобрались) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 13:40:29 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Я по такому принципу лет 10 назад делал "мостик" между кодом на FIB+ и IBObjects - мне нужна была поддержка обеих библиотек... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 14:32:34 |
|
||
|
|

start [/forum/topic.php?fid=40&gotonew=1&tid=1564238]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
182ms |
get topic data: |
6ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 437ms |

| 0 / 0 |
