Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Чудеса с выполнением ХП / 10 сообщений из 10, страница 1 из 1
05.09.2018, 11:36
    #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
05.09.2018, 11:38
    #39698300
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудеса с выполнением ХП
Все параметры идут с префиксом p, но вот @Option без него.
...
Рейтинг: 0 / 0
05.09.2018, 11:56
    #39698320
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудеса с выполнением ХП
так и в хранимой этот параметр без префикса
...
Рейтинг: 0 / 0
05.09.2018, 12:05
    #39698329
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудеса с выполнением ХП
patrick1968,

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

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

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

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

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


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