![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача параметра по default [D5, MSSQL]
Дуся © (2002-10-18 10:19:00)ПОМОГИТЕ!..Умаялась совсем. Можно ли используя стандартные компоненты ADO организовать вызов процедуры так, чтобы командная строка выглядела как "имя_процедуры парам1, парам2, DEFAULT".?? То есть как сделать вызов со значением параметра default?? По умолчанию он передает NULL, что мне совсем не нужно.. :(
Дуся (2002-10-18 14:55:00) [1]ЧУДЕСА!!!!!...
Действительно. И вызов такой как надо!..
Чего же у меня в том коде не заработало?!. :(
Спасибо.
Я Вам тоже жем-нибудь пригожусь :)
Андрей Прокофьев (2002-10-18 14:38:00) [2]Напишите такую процедуру
CREATE PROCEDURE PTEST
@P1 INT,
@P2 INT = 2,
@P3 CHAR(3) = "YES"
AS
SELECT @P1, @P2, @P3
GO
И ее вызов в Delphi
Self.ADOStoredProc1.Parameters.Refresh;
Self.ADOStoredProc1.Parameters.ParamByName("@P1").Value := -1;
Self.ADOStoredProc1.Open;
И посмотрите, что вернется в выборке
У меня (D6) результат rowset 1, 2, "YES"
все, что UnAssigned как раз и заменяется на Default значения
sniknik (2002-10-18 14:29:00) [3]А процедура тоже твоя? перенеси ISNULL в начало и не мучайся с передачей.
Дуся (2002-10-18 14:25:00) [4]Вот именно из-за рефреша, который я делаю, у меня эта проблема и появляется.
В список параметров попадают все параметры из процедуры, которые в ней есть. Включая те, к которым я не обращаюсь и которые передавать не хочу. Вот они-то по дефолту и должны быть переданы, а похоже что в borlandовской реализации ADO этого не умеет....
Нет ли чего-то типа EmptyParam ???
Андрей Прокофьев (2002-10-18 14:20:00) [5]Сделайте перед вызовом
ADOProc.Parameters.Refresh;
Может, поможет.
Дуся (2002-10-18 14:18:00) [6]
2 Андрей Прокофьев
Спасибо конечно, но синтаксис T-SQL я и сама прекрасно знаю.
Но ТОЛКУ от такого синаксиса - НОЛЬ без палочки, если параметру передается значение NULL, а оно передается всегда когда по умолчаниюValue = Unassigned
Андрей Прокофьев (2002-10-18 14:04:00) [7]Вот так (T-SQL)
CREATE PROCEDURE BlaBlaBla
@OBJCLASS CHAR(3),
@OBJID INT,
@PacketID INT =-1
AS
Дуся (2002-10-18 13:59:00) [8]2 sniknik ©
это надо на каждый параметр в процедуре писать. Совсем "не элегантно"...
2 Adony
Чтобы это сделать, надо знать в ходе выполнения, что за значения там по умолчанию. А у меня оно ТОЛЬКО в процедуре прописано, и программа о нем знать не обязана...
Adony (2002-10-18 10:58:00) [9]В TParameters в поле Value можно прописать значения, которые будут использоваться по умолчанию
sniknik (2002-10-18 10:46:00) [10]можно наверно функцией самого MSSQL воспользоватся
поставить в 3 параметр ISNULL(check_expression , replacement_value)
:check_expression будет переменной которую ты передаеш не передаш будет нил и возьмет replacement_value куда забьеш значение по умолчанию.
может не самый элегантный способ но работать должен проверь.