powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TSQLStoredProc не видит параметры процедуры
25 сообщений из 40, страница 1 из 2
TSQLStoredProc не видит параметры процедуры
    #39805046
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, работники клавиатуры! Есть программа для работы с БД. Для доступа к БД используется dbExpress, чтобы обеспечить работу с любой БД SQL. Сегодня при запуске непонятная ситуация:
Код: pascal
1.
2.
3.
4.
5.
  Result  := -1;
  FProc.StoredProcName      := 'GET_USER_ID';
  FProc.ParamByName('u_name').AsString  := AName;
  FProc.ExecProc;
  Result  := FProc.ParamByName('u_id').AsInteger;

Запускаю программу и при попытке установить параметры хранимой процедуры получаю ошибку "Parameter "u_name" not found."(как-то так, емнип). Данный код работал в течение 2-3 месяцев без ошибок. У меня Delphi 10.2, если это важно. Компонент создается динамически.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805073
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

Не знаю, что у тебя зв процедура, кто ёё создавал и какая у тебя версия сервера.
У меня такой процедуры нет
у меня есть вот такоеValue NameMicrosoft SQL Server 2017 (RTM-CU14) (KB4484710) - 14.0.3076.1 (X64) Mar 12 2019 19:29:19 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro for Workstations 10.0 <X64> (Build 17763: ) @@VERSION14 MICROSOFTVERSION259 SUSER_IDgator''s eater .SUSER_NAME1 USER_IDdbo CURRENT_.USER
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805077
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gator,

Спасибо, друг. У меня firebird 3.0. Процедуру создал я. Какие ещё данные тебе предоставить?
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805106
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

FProc - что за компонент-то?

Вообще, обычно, если что-то работало, а потом вдруг сломалось, то надо проверять, что изменилось перед тем как "вдруг сломалось".

Если компонент создается в рантайме, видимо, почему-то не грузятся метаданные о параметрах процедуры. Либо их загрузка выключена, либо что-то поломалось.

На всякий случай:
http://docwiki.embarcadero.com/RADStudio/Rio/en/Working_with_Stored_Procedure_Parameters
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805115
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

Такое бывает.
Попробуйте:
1) очистить параметры
2) обратиться к ним не по имени, а по индексу
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805150
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

FProc - TSQLStoredProc
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805166
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас откатился на более раннюю версию проекта, чтобы убрать изменения, сделанные за неделю, все равно не работает.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805167
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvmy_nik_name_is,
http://docwiki.embarcadero.com/RADStudio/Rio/en/Working_with_Stored_Procedure_Parameters
Это я уже читал, но все равно спасибо.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805179
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_isСейчас откатился на более раннюю версию проекта, чтобы убрать изменения, сделанные за неделю, все равно не работает.
А в базе есть такие параметры у процедуры? М.б. что-то изменилось в самой базе?
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805186
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

В АДО аналогичная проблема решалась приблизительно так, как я написал для SQLStoredProc1
Код: pascal
1.
2.
3.
4.
5.
6.
7.
SQLStoredProc1.]ParamCheck:=True;
  ...
SQLStoredProc1.StoredProcName      := 'GET_USER_ID';

SQLStoredProc1.Refresh;
//SQLStoredProc1.PrepareStatement;  --принудительная подготовка, В АДО достаточно Refresh
SQLStoredProc1.Params[0].Value:=AName;


...
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805195
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prepare?
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805199
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
энди,

True

пробовал сбрасывать, а потом ставить флаг, не помогает.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805211
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

ну давай я,что ли, попрошу у тебя текст процедуры.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805287
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenkomy_nik_name_is,

В АДО аналогичная проблема решалась приблизительно так, как я написал для SQLStoredProc1
Код: pascal
1.
2.
3.
4.
5.
6.
7.
SQLStoredProc1.]ParamCheck:=True;
  ...
SQLStoredProc1.StoredProcName      := 'GET_USER_ID';

SQLStoredProc1.Refresh;
//SQLStoredProc1.PrepareStatement;  --принудительная подготовка, В АДО достаточно Refresh
SQLStoredProc1.Params[0].Value:=AName;


...

Попробовал. Cannot perform this operation on a closed dataset
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805291
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё,
Лови
create or alter procedure GET_USER_ID (
U_NAME varchar(100))
returns (
U_ID integer)
as
begin
select u_id from user_names where nick = :u_name into :u_id;
if (u_id is null) then
u_id = -1;
suspend;
end
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805296
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

Сделай через Query.

P.S. Я всегда использовал связку:
Код: pascal
1.
2.
3.
4.
   Q.SQL.Text:='SELECT ';
   Q.Prepare;
   Q.ParamByName('YYY').AsXXX:=.....
   Q.Execute;
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805297
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,

Ой, сори. Unable to determine field names for %s
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805299
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

И в процедуре у себя пропиши или SELECT FIRST 1 .... или UNIQUE наложи - там потенциальная дырка может быть, если пользователей с одним именем несколько окажется.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805303
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

вообще-то suspend предполагает использование процедуры как слелективной, т.е. select * from proc, в этом случае нужно использовать компонент для селекта, а не TSQLStoredProc

http://www.ibase.ru/sp_call/
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805359
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Имя пользователя всегда уникально. Двух одинаковых быть не может.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805368
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В справке написано, что если процедура возвращает данные, надо использовать метод Active или Open
На практике оказалось, что ExecProc тоже прекрасно возвращает данные.
К тому же в примере по ссылке выше
Используется ExecProc для процедуры, возвращающей данные
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
var
  P1, P2: TParam;
begin
  ...
  with StoredProc1 do begin
    StoredProcName := 'GET_EMP_PROJ';
    Params.Clear;
    P1 := TParam.Create(Params, ptInput);
    P2 := TParam.Create(Params, ptOutput);
    try
      Params[0].Name := 'EMP_NO';
      Params[1].Name := 'PROJ_ID';
      ParamByname('EMP_NO').AsSmallInt := 52;
      ExecProc;
      Edit1.Text := ParamByname('PROJ_ID').AsString;
    finally
      P1.Free;
      P2.Free;
    end;
  end;
  ...
end;


Исходя из этого сделал вывод, что данные можно получать любым удобным способом. Хоть select, хоть exec. Но с exec меньше возни.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805456
my_nik_name_is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Часть проблемы решена.
Скомбинировал доступ к параметрам хранимой процедуры

Код: pascal
1.
2.
3.
4.
5.
  FProc.StoredProcName  := 'GET_USER_ID';
  FProc.Prepared        := True;
  FProc.Params[0].Value := AName;
  FProc.ExecProc;
  Result  := FProc.ParamByName('u_id').AsInteger;



Входные параметры задаю через индекс, а выходные получаю по имени параметра. Пока переписал самое важное, постепенно буду переводить на новые рельсы весь код. Спасибо всем за помощь!
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805478
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_is,

Проверь для интереса, что вернет Execute для процедуры, которая возвращает более одной строки данных.
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805482
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMastermy_nik_name_is,

Проверь для интереса, что вернет Execute для процедуры, которая возвращает более одной строки данных.
А что ты ожидаешь получить?
авторTSQLStoredProc = class(TCustomSQLDataSet)
...
Рейтинг: 0 / 0
TSQLStoredProc не видит параметры процедуры
    #39805573
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
my_nik_name_isХоть select, хоть exec. Но с exec меньше возни.
suspend в процедуре не имеет смысла, если процедура не предполагает возврат больше одной "строки", и соответствено, ее не планируют вызывать через select (для получения более одной строки).
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TSQLStoredProc не видит параметры процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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