Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Как передать в Хранимую процедуру параметр=null   Найти похожие ветки 

 
pic509 ©   (2006-08-29 16:37) [0]

Люди, помогите! Необходимо передавать параметры в ХП, в том числе параметр может быть null.


 
Ega23 ©   (2006-08-29 16:38) [1]


Print  "S_TGUIEventHintProps - процедура для работы с настройками инструкций оператору АРМ на события"
go
if exists (select * from sysobjects where id = object_id(N"[S_TGUIEventHintProps]") and OBJECTPROPERTY(id, N"IsProcedure") = 1)
drop procedure [S_TGUIEventHintProps]
GO
CREATE PROCEDURE S_TGUIEventHintProps

@ActNam varchar(32)="NONE",
@ObjID int=-1,
@ObjOwner int =NULL,
@ObjNam varchar(64)="",
@ObjLab varchar(64)="",
@ObjOrd int =-1,
@ObjMsk tinyint =255,
@ObjNot varchar(255)="",
@ObjStat int =0,
@GUICTop int =-1,
@GUICLeft int =-1,
@GUICWidth int =-1,
@GUICHeight int =-1,
@GUICAnchors int =-1,
@GUICAlign int =-1,
@DSCod int =NULL,
.......


 
pic509 ©   (2006-08-29 16:45) [2]

Да, но как из Делфи передать параметр = null, если он, к примеру, Integer?
Если делать так:
DataForm.StoredProc1.ParamByName("@param1").AsInteger=Null
не работает - говорит, что несоотвествие типов, если вообще этот параметр пропустить - говорит, что не хватает параметров. Как быть?


 
Ega23 ©   (2006-08-29 16:46) [3]


> DataForm.StoredProc1.ParamByName("@param1").AsInteger=Null


DataForm.StoredProc1.ParamByName("@param1").Value:=null;


 
Ega23 ©   (2006-08-29 16:47) [4]

Короче, смотри работу с типом Variant.


 
pic509 ©   (2006-08-29 16:55) [5]

не работает:

DataForm.StoredProc1.ParamByName("@param1").Value:=null;


 
Desdechado ©   (2006-08-29 16:57) [6]

Params[0].Clear;

ЗЫ а @ точно нужен в имени параметра???


 
pic509 ©   (2006-08-29 17:27) [7]

@param1 - так описан входной параметр у ХП.


 
Ega23 ©   (2006-08-29 17:27) [8]

А почему не
DataForm.StoredProc1.ParamByName("param1").Value:=null; ?


 
pic509 ©   (2006-08-29 18:03) [9]

Делфи воспринимает нормально, но при выполнении ExecProc выскакивает сообщение о нехватке входных параметров, т.е. параметр не передается.


 
ANB ©   (2006-08-29 18:06) [10]


> pic509 ©   (29.08.06 18:03) [9]

А запости ка весь код и заодно код хранимки


 
saxon   (2006-08-29 19:24) [11]

Сделай по дефаулту параметр (в ХП) = null, и вообще ничего не передавай (если Delphi не поругает), или Value:=null


 
Reindeer Moss Eater ©   (2006-08-29 19:39) [12]

ParamByName("paramname").Clear;


 
evvcom ©   (2006-08-30 10:20) [13]

> [8] Ega23 ©   (29.08.06 17:27)

Потому что это MSSQL. У него имена параметров на @ начинаются.


 
Ega23 ©   (2006-08-30 10:23) [14]


> Потому что это MSSQL. У него имена параметров на @ начинаются.
>
>


Представь себе, мне это прекрасно известно. А в TStoredProc надо именно полное имя параметра указывать? С "собакой"? Или всё-таки без?
Просто я этой дрянью (TStoredProc) последний раз лет 6 назад пользовался.


 
evvcom ©   (2006-08-30 10:37) [15]

> [14] Ega23 ©   (30.08.06 10:23)

Именно с собакой


 
Ega23 ©   (2006-08-30 10:41) [16]


> Именно с собакой


Ну может быть, может быть... Всё равно не пользуюсь...


 
Val ©   (2006-08-30 11:54) [17]

Кстати, а если не передавать параметра вообще в случае с null, разве не пойдет от компонетнта null в параметр, по умолчанию?


 
Ega23 ©   (2006-08-30 12:03) [18]

см. [1], там жирным выделено.


 
Desdechado ©   (2006-08-30 12:03) [19]

>  разве не пойдет от компонетнта null в параметр, по умолчанию?
VarIsEmpty, VarIsNull, VarIsClear
почитай про варианты


 
Val ©   (2006-08-30 12:09) [20]

>18,19
не о том.
на сервере процедура с тремя параметрами.
создаем tstoredproc, передаем два первых. execute.


 
Ega23 ©   (2006-08-30 12:15) [21]


> на сервере процедура с тремя параметрами.
> создаем tstoredproc, передаем два первых. execute.


Ещё раз: что мешает задать параметр по-умолчанию непосредственно в ХП?


 
Val ©   (2006-08-30 12:17) [22]

>[21] Ega23 ©   (30.08.06 12:15)
кто сказал что он должен быть null по умолчанию в хп?


 
saxon   (2006-08-30 12:31) [23]


> Val ©   (30.08.06 12:09) [20]

Умолчание дает возможность сделать ->

> Val ©   (30.08.06 12:17) [22]

а null - это как вариант, и только.


 
Ega23 ©   (2006-08-30 12:32) [24]


> кто сказал что он должен быть null по умолчанию в хп?
>


Тогда я вообще ничего не понимаю.
Приведи заголовок ХП и код по формированию TStoredProc на клиенте.


 
saxon   (2006-08-30 12:33) [25]

Что то <цитата> сглючила.
Конечно их (цитаты) надо поменять местами.


 
Val ©   (2006-08-30 12:48) [26]

Коллеги, что-то мы не поймем друг друга.
Все мы понимаем, что в хп параметр со значением по умолчанию и без него - вещи разные принципиально.
Я НЕ знаю нужен ли автору ветки параметр в хп со значением по умолчанию. Если нужен, то конечно, логично воспользоваться советом Ega23 ©.
Если же ему просто нужно передать в параметр хп с клиента значение null с помощью TStoredProc, я предлагаю, как вариант, еще не перечисленный среди прочих в данной ветке, попробовать просто не инициализировать его на клиете вообще. Я пользуюсь таким методом в нашем рабочем проекте давно и часто, НО наш аналог TStoredProc несколько видоизменен, что произойдет при опускании инициализации параметра на клиенте в случае с оригинальным TStoredProc я _не помню_ - то ли при Execute он выругается на отсутствие параметра, то ли передаст null в ХП. Это я и предлагаю автору проверить.


 
pic509 ©   (2006-08-30 17:28) [27]

СПАСИБО! Все заработало! Видимо Делфи глючила!
Заработало как писал Ega23: проинициализировал в заголовке ХП нужный параметр = null, а при вызове из Делфи этот параметр просто пропускал.


 
Ega23 ©   (2006-08-30 17:30) [28]


> Видимо Делфи глючила!


Сомневаюсь...   :о)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.076 c
2-1160468808
Андрей Иванов
2006-10-10 12:26
2006.10.29
Отчеты в Делфи7


1-1158569305
trubin
2006-09-18 12:48
2006.10.29
listView - проблемка


2-1160579369
D'GRaid
2006-10-11 19:09
2006.10.29
Глобальное переназначение клавишь


15-1160038958
worldmen
2006-10-05 13:02
2006.10.29
Подобрать Switch.


3-1156354971
Garyck
2006-08-23 21:42
2006.10.29
Ошибка ADO





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский