Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблемы с доступом к процедурам соседней БД  [new]
ENP70
Member

Откуда:
Сообщений: 35
Клиент (программа на delphi) через ADO подключается к одной БД (№1) на сервере, при этом требуется вызвать хранимую процедуру на другой БД (№2) этого же сервера.
Права на процедуру даны роли пользователя, через которого логинюсь.
При вызове процедуры выдается сообщение - Parameter '@ObjDescr' not found
Если перенести процедуру в БД №1, то все нормально работает.
Если кто знает в чем дело, подскажите плиз.
24 авг 09, 14:29    [7573129]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
ENP70

При вызове процедуры выдается сообщение - Parameter '@ObjDescr' not found
Если перенести процедуру в БД №1, то все нормально работает.
Если кто знает в чем дело, подскажите плиз.

Дело не в правах, а в правильном вызове процедур. Конкретно в том, что вы вызываете процедуру с параметром, которого у нее нет
24 авг 09, 14:35    [7573185]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
ENP70
Member

Откуда:
Сообщений: 35
Еслибы была ошибка в параметре, то она нику не делась бы при переносе процедуры в БД №1, но там все работает нормально. При этом ни код клиента, ни код самой процедуры не изменялся.
24 авг 09, 14:37    [7573194]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
ENP70
Еслибы была ошибка в параметре, то она нику не делась бы при переносе процедуры в БД №1, но там все работает нормально. При этом ни код клиента, ни код самой процедуры не изменялся.

Если бы ошибка была в другом, то и в сообщение об ошибке говорилось о другой причине.
Не надо думать, что сервер маскирует истинные причины ошибками, не относящимися к проблеме
24 авг 09, 14:39    [7573213]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
проходящий.
Guest
ENP70
Еслибы была ошибка в параметре, то она нику не делась бы при переносе процедуры в БД №1, но там все работает нормально. При этом ни код клиента, ни код самой процедуры не изменялся.
И тем не менее ошибка именно в параметре, который передается, но не описан в процедуре. Ищите различия в процедурах.
24 авг 09, 14:40    [7573225]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
ENP70
Member

Откуда:
Сообщений: 35
Тогда почему ошибка, о которой сообщает сервер, исчезает если эту процедуру перенести в БД№1 и вызвать от туда?
Еще раз повторю - при таком вызове процедура отрабатывает, и возвращает то что должна возвратить.
24 авг 09, 14:42    [7573243]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
ENP70
Тогда почему ошибка, о которой сообщает сервер, исчезает если эту процедуру перенести в БД№1 и вызвать от туда?
Еще раз повторю - при таком вызове процедура отрабатывает, и возвращает то что должна возвратить.

А вы вообще видели, как ваша ADO вызывает эти процедуры ?
24 авг 09, 14:43    [7573255]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
ENP70
Member

Откуда:
Сообщений: 35
ADOStoredProcDC.ProcedureName:= 'DIS.dbo.GET_CMP_NAME_FROM_EMAIL';
ADOStoredProcDC.Parameters.Refresh;

ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').DataType:= ftString;
ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').Direction:= pdInput;
ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').Value:= EMail;

ADOStoredProcDC.Parameters.ParamByName('@Cmp_Name').DataType:= ftString;
ADOStoredProcDC.Parameters.ParamByName('@Cmp_Name').Direction:= pdInputOutput;
ADOStoredProcDC.Parameters.ParamByName('@Cmp_Name').Value:= '';

ADOStoredProcDC.ExecProc;

Exception возникает на строке:
ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').DataType:= ftString;
24 авг 09, 14:45    [7573269]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
ENP70
ADOStoredProcDC.ProcedureName:= 'DIS.dbo.GET_CMP_NAME_FROM_EMAIL';
ADOStoredProcDC.Parameters.Refresh;

ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').DataType:= ftString;
ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').Direction:= pdInput;
ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').Value:= EMail;

ADOStoredProcDC.Parameters.ParamByName('@Cmp_Name').DataType:= ftString;
ADOStoredProcDC.Parameters.ParamByName('@Cmp_Name').Direction:= pdInputOutput;
ADOStoredProcDC.Parameters.ParamByName('@Cmp_Name').Value:= '';

ADOStoredProcDC.ExecProc;

Exception возникает на строке:
ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').DataType:= ftString;

Ваш клиентский код не интересен.
Интересны те команды, которые получает сервер.
Особенно та, которая вызывает ошибку
24 авг 09, 14:47    [7573289]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Тем более, что ADOStoredProcDC.Parameters.ParamByName('@Abn_EMail').DataType:= ftString; не является командой MSSQL.
Да и @Abn_EMail как-то не вяжется с Parameter '@ObjDescr' not found
24 авг 09, 14:52    [7573325]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
ENP70
Member

Откуда:
Сообщений: 35
Sorry, у меня несколько процедур в БД№2, пример взял один, а ответ сервера на вызов другой процедуры, но суть от этого не меняется.

DIS.dbo.GET_CMP_NAME_FROM_EMAIL - ADOStoredProcDC: Parameter '@Abn_EMail' not found
24 авг 09, 14:57    [7573375]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
проходящий.
Guest
Glory,
а может у него на втором сервере коллейшн сенситивный? Вот и не будет параметр находить?
24 авг 09, 15:22    [7573586]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
проходящий.
Glory,
а может у него на втором сервере коллейшн сенситивный? Вот и не будет параметр находить?

Разве при ADOStoredProcDC.Parameters.ParamByName что-то вообще отправляется серверу ?
И в тексте сообщения не видно разницы в регистре букв с кодом ADO

Сообщение было отредактировано: 24 авг 09, 15:24
24 авг 09, 15:23    [7573599]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с доступом к процедурам соседней БД  [new]
ENP70
Member

Откуда:
Сообщений: 35
Танцы с бубном дали след. результаты:
1. Если создать в БД№2 процедуру без параметров, и дернуть ее из клиента, то отрабатывает (процедура просто делает запись в табличку)
2. При копировании процедуры с параметрами в БД№1 до выполнения команды
ADOStoredProcDC.Parameters.Refresh
число параметров (ADOStoredProcDC.Parameters.Count) = 0, после - 4
напомню что при таком расположении процедуры она выполняется нормально
3. При вызове процедуры с параметрами в БД№2 и до выполнения команды ADOStoredProcDC.Parameters.Refresh и после нее чило параметров = 0.
24 авг 09, 16:45    [7574070]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить