Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача параметров в TADOAtoredProc - HELP!! [D5, D6, MSSQL]


Дуся ©   (2002-05-27 16:59:00) 

Не будут ли любезны уважаемые мастера, общавшиеся с ADO, поделиться, всегда ли оно (он?) при вызове процедуры передает параметры в нее последовательно? то есть вызов идет вида

exec <имя процедуры>;1 "параметр1", "параметр2", 4312., 0


а не по имени, как было в почившем BDE:
exec <имя процедуры>;1 @parm1="параметр1", @parm2="параметр2", @parm3=4312, @parm4=0


Дуся   (2002-05-28 11:40:00) [1]

Спасибо.. Видимо придется смириться или как-то динамически извращаться с получением набора параметров... Потому что переписывание COM-объекта в моем случае - стрельба по воробьям из пушки.


Zemal   (2002-05-28 09:49:00) [2]

Дуся... дорогая... переписывай или не переписывай компонент... это не играет роли... у тебя наверное винда 2000 стоит... с сервпаками :)... так что переписывать придётся COM-объект... вот :(... так нас кинул мелкософт, всемирная история сберкассы и т.д.... история продолжается :(...


Zemal   (2002-05-28 09:45:00) [3]

P.S. Или есть вариант: пишите свой набор COM-компонентов и работайте через них... в основном все хорошие программы именно так пишутся... только вот правильно написать COM-объект это будет посложнее, чем написать приложение для работы с БД. :)


Дуся   (2002-05-28 09:43:00) [4]

2DPetrovich © : Вы видимо мало имели дело с MS SQL.. null - это null, а дефолт берется в случае вообщенеуказания параметра.
2jonik pegas ©: И что, неужели нет выхода?? Может, переписать компонент??.. Как он формирует командную строку?


Zemal   (2002-05-28 09:42:00) [5]

Угу... я с вами тоже согласен... эти разработчики из Microsoft... полный отстой... кто писал эту библиотеку OLE DB, которую инкапсулируют ADO-компоненты?! Кстати, в ранних версиях OLE DB (ADO) таких проблем не было... я точно помню... а щас появились... и у меня тоже... отстооооой! Программеры из Мелкософта! Ау! Мать вашу! Вы что так переделываете концепции своих COM-объектов?! А как же мы?!
А... всё-равно не услышат... дорогие прикладные программисты... мой вам совет: пишите и тестируйте свои программы для одной версии "винды"... и работают они пускай под оной... только в таком случае проблем не будет :(... вот... ;(


jonik pegas   (2002-05-28 08:51:00) [6]

DPetrovich ©, Дуся © права права такое поведение ADO-зависимость передачи параметров от их порядка следования в хранимой процедуре не есть совсем хорошо.


DPetrovich   (2002-05-27 19:39:00) [7]

Дуся, "не знать" программа не может... Если Вы добавляете параметр, то должны добавить его в свойстве TADOStoredProc.Parametrs ...
А на счёт дефолт, на сколько я понимаю оно берётся как раз в случае если значение пришло null...


DPetrovich   (2002-05-27 19:32:00) [8]

Дуся, чё-то я не пойму проблему...
Причём тут последовательность параметров?
Ежели вы хотите что бы а процедуре использовалось дефолт-значение, то не присваивайте ентому параметру значение в Делфи... почему не получается не указывать-то?


Дуся   (2002-05-27 19:19:00) [9]

Да потому что моя программа все равно должна знать о существовании этого параметра, чтобы "не указать" в нем значение!!.. А на этапе создания она может этого и не знать. Плюс, если не присваивать значение, то все равно передается NULL, а это согласитесь не то же самое что брать дефолт...

Может, я неясно выражаюсь?


DPetrovich   (2002-05-27 19:11:00) [10]

Дуся, чё-то я не пойму проблему...
Причём тут последовательность параметров?
Ежели вы хотите что бы а процедуре использовалось дефолт-значение, то не присваивайте ентому параметру значение в Делфи... почему не получается не указывать-то?


Дуся   (2002-05-27 19:02:00) [11]

Вовсе не секрет. Например: на SQL есть процедура:

CREATE PROCEDURE dbo.sp_do_something
@parm1 float = 0.5,
@parm2 char(1)
AS
SELECT "Oppla!"
GO

Как видно, второй параметр имеет дефолт-значение, т.е. я его могу вообще не передавать и не знать о его существовании. Однако, в описанном мной случае, я вынуждена его тоже указывать, иначе ничего не получится. Таким образом, исправление процедуры влечет за собой неизбежное исправление Delpi-кода, что сами понимаете - просто аццтой.
:)


DPetrovich   (2002-05-27 18:54:00) [12]

В смысле, для Вас, по крайней мере...


DPetrovich   (2002-05-27 18:52:00) [13]

Дуся, а какое, если не секрет, имеет значение порядок?


Дуся   (2002-05-27 18:33:00) [14]

Это само собой, это я так и делаю:

ADOStoredProc.Parameters.ParamByName("name").Value := value


Однако при исполнении процедуры ( ADOStoredProc.Open) она шлет запрос на SQL именно указанного выше вида, т.е. порядок параметров увы! имеет значение. Что не есть хорошо. Совсем то есть не хорошо, для меня по крайней мере.


DmitryK   (2002-05-27 18:27:00) [15]

вообще-то в Дельфи можно передовать параметры по именам в АДОпроцедуры

ADOStoredProc.Parameters.ParamValue[Name]:=VariantData

если неошибаюсь так (или посмотри по хелпу)


Дуся   (2002-05-27 17:46:00) [16]

Ну неужели никто не пробовал передавать параметры независимо от последовательности указания их в процедуре?..


Наверх

Титульная страница Поиск, карта сайта Написать письмо