Як передати в збережену процедуру параметр = null
Люди, допоможіть! Необхідно передавати параметри в ХП, в тому числі параметр може бути null.
Print # XA0; "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,
.
Так, але як з Делфі передати параметр = null, якщо він, наприклад, Integer?
Якщо робити так:
DataForm.StoredProc1.ParamByName ( "@ param1"). AsInteger = Null
не працює - каже, що несоотвествие типів, якщо взагалі цей параметр пропустити - каже, що не вистачає параметрів. Як бути?
Коротше, дивись роботу з типом Variant.
ЗИ а @ точно потрібен в імені параметра.
@ Param1 - так описаний вхідний параметр у ХП.
А чому не
DataForm.StoredProc1.ParamByName ( "param1"). Value: = null; ?
Делфі сприймає нормально, але при виконанні ExecProc вискакує повідомлення про брак вхідних параметрів, тобто параметр не передається.
Зроби по дефаулту параметр (в ХП) = null, і взагалі нічого не передавай (якщо Delphi не полаявся), або Value: = null
> Тому що це MSSQL. У нього імена параметрів на @ починаються.
>
>
Уяви собі, мені це прекрасно відомо. А в TStoredProc треба саме повне ім'я параметра вказувати? З собакою"? Або все-таки без?
Просто я цією поганню (TStoredProc) останній раз років 6 тому користувався.
Ну може бути, може бути. Все одно не користуюся.
До речі, а якщо не передавати параметра взагалі у випадку з null, хіба не піде від компонетнта null в параметр, за замовчуванням?
см. [1], там жирним виділено.
> # XA0, ще бо не піде від компонетнта null в параметр, за замовчуванням?
VarIsEmpty, VarIsNull, VarIsClear
почитай про варіанти
> 18,19
не про те.
на сервері процедура з трьома параметрами.
створюємо tstoredproc, передаємо два перших. execute.
> На сервері процедура з трьома параметрами.
> Створюємо tstoredproc, передаємо два перших. execute.
Ще раз: що заважає поставити параметр за замовчуванням безпосередньо в ХП?
> Хто сказав що він повинен бути null за замовчуванням в хп?
>
Тоді я взагалі нічого не розумію.
Приведи заголовок ХП і код по формуванню TStoredProc на клієнті.
що то <цитата> сглючіл.
Звичайно їх (цитати) треба поміняти місцями.
ДЯКУЄМО! Все запрацювало! Мабуть Делфі глючила!
Запрацювало як писав Ega23: проініціалізувати в заголовку ХП потрібний параметр = null, а при виклику з Делфі цей параметр просто пропускав.
> Мабуть Делфі глючила!