![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменение хранимой процедуры [D5, IB6.x]
Сергей Ч © (2003-07-07 12:01:00)Добрый день! Хочу изменить хранимую процедуру из своего приложения. Использую IBQuery. При ExecSQL ругается на строчку "SELECT XX FROM XXX INTO :TMP" видимо считая :TMP параметром. Помогите, как это можно сделать?
Сергей Ч (2003-07-07 14:39:00) [1]Спасибо всем! после апдэйта IBX заработало с TIBSQL
Zacho (2003-07-07 14:21:00) [2]
> Johnmen © (07.07.03 14:10)
> То есть, делается попытка выполнить с помощью IBQuery такую
> команду ALTER PROCEDURE .... ?
> Не пройдет. Т.к. Available in DSQL, and isql.
То есть работать все-таки должно. По крайней мере на BDE с TQuery работало у меня отлично, а вот на IBX не пробовал, уже несколько лет все изменения метаданных делаю только скриптами. Но по идее должно и в IBX работать, так что наиболее вероятно - баг в IBX.
Johnmen (2003-07-07 14:10:00) [3]>Сергей Ч
То есть, делается попытка выполнить с помощью IBQuery такую команду ALTER PROCEDURE .... ?
Не пройдет. Т.к. Available in DSQL, and isql.
И второй момент - в IBX имеют место глюки, в частности с областью XSQLDA. Про это можно почитать на ibase.ru (если не запамятовал...:))
Сергей Ч (2003-07-07 13:33:00) [4]C TIBSQL тоже самое
Zacho (2003-07-07 13:30:00) [5]
> Сергей Ч (07.07.03 13:23)
Черт знает, должно работать. Возможно, баг в твоей версии IBX, попробуй поставить последнюю (или наоборот, одну из предидущих). Еще попробуй вместо TIBQuery использовать TIBSQL, хотя по идее должно быть то же самое.
Сергей Ч (2003-07-07 13:23:00) [6]Zacho © (07.07.03 12:07)
TIBQuery.ParamCheck:=false; - решит эту проблему
Попробовал - выдаёт ошибку XSQLDA index out of range
Edward (2003-07-07 12:27:00) [7]Понятно, это текст хранимой процедуры, не сразу сообразил, что он спрашивает, спасибо Zacho © (07.07.03 12:17), за подробное объяснение сути вопроса! :-))
Zacho (2003-07-07 12:17:00) [8]
> Edward (07.07.03 12:10)
В данном случае :TMP - это не параметр запроса, а переменная в хранимой процедуре. ParamCheck:=false нужно именно для выполнения запросов DDL (а не DML с параметрами !), в которых могут встречаться конструкции, синтаксически аналогичные параметрам, но на самом деле таковыми не являющимися.
Edward (2003-07-07 12:13:00) [9]
IBQuery2.SQL.Clear;
IBQuery2.SQL.Add("INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)");
IBQuery2.SQL.Add("VALUES (:Name, :Capital, :Population)");
IBQuery2.Params[0].AsString := "Lichtenstein";
IBQuery2.Params[1].AsString := "Vaduz";
IBQuery2.Params[2].AsInteger := 420000;
IBQuery2.ExecSQL;
Edward (2003-07-07 12:10:00) [10]Что значит: Хочу изменить хранимую процедуру из своего приложения? :TMP - это параметр, до ExecSQL ему нужно присвоить значение. Все переменные с двоеточием будут являться параметрами. А если изменить процедуру надо: ALTER PROCEDURE.
Alexandr (2003-07-07 12:07:00) [11]paraMCheck:=false
Zacho (2003-07-07 12:07:00) [12]TIBQuery.ParamCheck:=false; - решит эту проблему