powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Чудеса с выполнением ХП
10 сообщений из 10, страница 1 из 1
Чудеса с выполнением ХП
    #39698297
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Понимаю, что чудес здесь не бывает, но ответа на проблему просто не нахожу, хотя много раз такое делал, есть у меня на сервере хранимая процедура, которая в зависимости от опции выполняет определенное действие (запросы, добавление, удаление, изменение), вот ее текст
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
ALTER PROCEDURE [dbo].[AgentAction] 
@Option [int],
@pAgentID [int],
@pAgentName [nvarchar](100),
@pAgentType [int],
@pWorkTime [nvarchar](20),
@pNEP [nvarchar](10),
@pSite [nvarchar](20),
@pPhone [nvarchar](100),
@pParentAgentID [int],
@pSLANo [int],
@pPayNeed [bit],
@pDocRules [nvarchar](100),
@pNote [nvarchar](100),
@pCreateUser [int],
@pAddressName [nvarchar](20),
@pTown [nvarchar](50),
@pAddress [nvarchar](50)

AS

BEGIN

IF @Option = 0
 SELECT a.AgentID, a.AgentName, a.AgentType, at.AgentTypeName, a.WorkTime, a.NEP, a.[Site], a.Phone, a.ParentAgentID, a1.AgentName as ParentAgentName, a.SLANo, a.PayNeed, 
        a.DocRules, a.Note,
		CASE WHEN a.CreateUser = 0 THEN 'Сисадмин' ELSE c1.FIO END FIO, ad.AddressName, ad.Town, ad.[Address]
 FROM  dbo.Agents a left outer join dbo.Agents a1 on a1.AgentID = a.ParentAgentID
                    left outer join dbo.Users u1 on u1.UserID = a.CreateUser
				    left outer join dbo.Contacts c1 on c1.ContactID = u1.ContactID
 				    inner join dbo.AgentTypes at on at.AgentType = a.AgentType
					left outer join dbo.Addresses ad on ad.AgentID = a.AgentID
 WHERE (a.NEP like @pNEP)
       and (a.AgentName like @pAgentName)
	   and (a.Phone like @pPhone)
	   and ((ad.AddressName like @pAddressName) or (ad.AddressName is null))
	   and ((ad.Town like @pTown) or (ad.Town is null))
	   and ((ad.[Address] like @pAddress) or (ad.Address is null))
	   and (a.[Site] like @pSite)
 ORDER BY a.AgentName

IF @Option = 5
 SELECT a.AgentID, a.AgentName, a.AgentType, at.AgentTypeName, a.WorkTime, a.NEP, a.[Site], a.Phone, a.ParentAgentID, a1.AgentName as ParentAgentName, a.SLANo, a.PayNeed, 
        a.DocRules, a.Note,
		CASE WHEN a.CreateUser = 0 THEN 'Сисадмин' ELSE c1.FIO END FIO, '' as AddressName, '' as Town, '' as [Address]
 FROM  dbo.Agents a left outer join dbo.Agents a1 on a1.AgentID = a.ParentAgentID
                    left outer join dbo.Users u1 on u1.UserID = a.CreateUser
				    left outer join dbo.Contacts c1 on c1.ContactID = u1.ContactID
 				    inner join dbo.AgentTypes at on at.AgentType = a.AgentType
 ORDER BY a.AgentName

IF @Option = 6
 SELECT a.AgentID, a.AgentName, a.AgentType, at.AgentTypeName, a.WorkTime, a.NEP, a.[Site], a.Phone, a.ParentAgentID, a1.AgentName as ParentAgentName, a.SLANo, a.PayNeed, 
        a.DocRules, a.Note,
		CASE WHEN a.CreateUser = 0 THEN 'Сисадмин' ELSE c1.FIO END FIO, '' as AddressName, '' as Town, '' as [Address]
 FROM  dbo.Agents a left outer join dbo.Agents a1 on a1.AgentID = a.ParentAgentID
                    left outer join dbo.Users u1 on u1.UserID = a.CreateUser
				    left outer join dbo.Contacts c1 on c1.ContactID = u1.ContactID
 				    inner join dbo.AgentTypes at on at.AgentType = a.AgentType
 WHERE (a.NEP like @pNEP)
       and (a.AgentName like @pAgentName)
	   and (a.Phone like @pPhone)
	   and (a.[Site] like @pSite)
 ORDER BY a.AgentName

IF @Option = 7
 SELECT a.AgentID, a.AgentName, a.AgentType, at.AgentTypeName, a.WorkTime, a.NEP, a.[Site], a.Phone, a.ParentAgentID, a1.AgentName as ParentAgentName, a.SLANo, a.PayNeed, 
        a.DocRules, a.Note,
		CASE WHEN a.CreateUser = 0 THEN 'Сисадмин' ELSE c1.FIO END FIO, '' as AddressName, '' as Town, '' as [Address]
 FROM  dbo.Agents a left outer join dbo.Agents a1 on a1.AgentID = a.ParentAgentID
                    left outer join dbo.Users u1 on u1.UserID = a.CreateUser
				    left outer join dbo.Contacts c1 on c1.ContactID = u1.ContactID
 				    inner join dbo.AgentTypes at on at.AgentType = a.AgentType
 WHERE (a.AgentID <> @pAgentID)
       and (a.NEP like @pNEP)
       and (a.AgentName like @pAgentName)
	   and (a.Phone like @pPhone)
	   and (a.[Site] like @pSite)
 ORDER BY a.AgentName

BEGIN TRANSACTION


IF @Option = 1
 INSERT INTO dbo.Agents
 VALUES (@pAgentName, @pAgentType, @pWorkTime, @pNEP, @pSite, @pPhone, @pParentAgentID, @pSLANo, @pPayNeed, @pDocRules, @pNote, @pCreateUser)
 SELECT SCOPE_IDENTITY() as IDENT

IF @Option = 2
 DELETE FROM dbo.Agents

IF @Option = 3
 DELETE FROM dbo.Agents WHERE AgentID = @pAgentID
  
IF @Option = 4
 UPDATE dbo.Agents
 SET AgentName = @pAgentName,
     AgentType = @pAgentType,
     WorkTime = @pWorkTime,
     NEP = @pNEP,
     [Site] = @pSite,
     Phone = @pPhone,
     ParentAgentID = @pParentAgentID,
     SLANo = @pSLANo,
     PayNeed = @pPayNeed,
     DocRules = @pDocRules,
     Note = @pNote
 WHERE AgentID = @pAgentID

COMMIT TRANSACTION

END



все опции работают из клиента, кроме изменения (Опция 4)

вот текст на изменение
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            UniMainModule.spAgents.Prepared := true;
            UniMainModule.spAgents.Parameters.ParamByName('@Option').Value := 4;
            UniMainModule.spAgents.Parameters.ParamByName('@pAgentID').Value := fAddAgent.AgentCode;
            UniMainModule.spAgents.Parameters.ParamByName('@pAgentName').Value := fAddAgent.AgentName;
            UniMainModule.spAgents.Parameters.ParamByName('@pAgentType').Value := fAddAgent.AgentType;
            UniMainModule.spAgents.Parameters.ParamByName('@pWorkTime').Value := fAddAgent.WorkTime;
            UniMainModule.spAgents.Parameters.ParamByName('@pNEP').Value := fAddAgent.NEP;
            UniMainModule.spAgents.Parameters.ParamByName('@pSite').Value := fAddAgent.Site;
            UniMainModule.spAgents.Parameters.ParamByName('@pPhone').Value := fAddAgent.Phone;
            UniMainModule.spAgents.Parameters.ParamByName('@pParentAgentID').Value := fAddAgent.ParentAgent;
            UniMainModule.spAgents.Parameters.ParamByName('@pSLANo').Value := fAddAgent.SLANo;
            UniMainModule.spAgents.Parameters.ParamByName('@pPayNeed').Value := fAddAgent.PayNeed;
            UniMainModule.spAgents.Parameters.ParamByName('@pDocRules').Value := fAddAgent.DocRules;
            UniMainModule.spAgents.Parameters.ParamByName('@pNote').Value := fAddAgent.Note;
            UniMainModule.spAgents.ExecProc;



из Management Studio процедура с опцией 4 работает безукоризненно (изменение записи производятся), но из клиента - никак, ошибок нет, но и изменять ничего не хочет, короче я себе уже всю голову "сломал". Даже не знаю в чем может быть причина
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39698300
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все параметры идут с префиксом p, но вот @Option без него.
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39698320
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так и в хранимой этот параметр без префикса
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39698329
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

в самом начале ХП "запили" set nocount on
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39698330
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

в отладчике проверить, что именно передается в fAddAgent.AgentCode при редактировании записи. Возможно, что левый айдишник, отсюда и изменения не проходят.
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39698355
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть @Option=2 - DELETE FROM dbo.Agents то почему нет @Option = 666 - DROP TABLE dbo.Agents ?
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39698357
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

1) Какие компоненты? SDAC? ADO?
2) пройдитесь циклом по коллекции UniMainModule.spAgents.Parameters с выводом .Names этих параметров. Здесь тоже возможны сюрпризы
3) И посмотрите профайлером, что там на сервер передается в действительности
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39698358
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UniMainModule.spAgents.Parameters.ParamByName('@pAgentID').Value := fAddAgent.AgentCode;

в отладчике показывает у параметра именно тот ID который должен меняться
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39698396
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решил проблему - причина интересная значение параметра @pSLANo int -1, а поле SLANo tinyint, странно при update ошибку не выдавало ,а просто не работало
...
Рейтинг: 0 / 0
Чудеса с выполнением ХП
    #39699626
Залупкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
patrick1968,

А не киздишь ли ты, малёк?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Чудеса с выполнением ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]