Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

Возвращаемой в запросе величине присвоить значение переменной   Найти похожие ветки 

 
yura_2   (2004-03-18 14:55) [0]

Есть проблема. Как присвоить переменной Delphi значение, которое возвращает SQL-T сервера БД?
Имеется запрос:

ADOQuery.SQL.Text:="DECLARE @rez int EXECUTE spDelNaklad, @rez OUTPUT @rez";
ADOQuery.Open;

Переменной @rez присваивается определенное значение в соответсвии с хран. процедурой spDelNaklad. Как передать это значение переменной в Delphi?
Как добиться, чтобы из приложения было видно вообщение SQL-T (print @inf) в аналогичном запросе:

DECLARE @rez int EXECUTE spDelNaklad :id, @rez OUTPUT IF @rez>0 PRINT @inf"
(конечно, @inf имеет определенное значение). Если отработать такой запрос через утилиту SQL Query Analyzer то это сообщение получаем без проблем.


 
stas ©   (2004-03-18 15:24) [1]

Как передать это значение переменной в Delphi?
В AdoQuery SET :PAR =@rez
Параметр нужно настроить как OutPut.


> Как добиться, чтобы из приложения было видно вообщение SQL-T
> (print @inf) в аналогичном запросе:

Событие - AdoConnection.OnInfoMessage + Серверный курсор.


 
yura_2   (2004-03-18 15:52) [2]

To stas:
В AdoQuery так и прописано: @rez OUTPUT (из хр.процедуры возвращается значение - OUTPUT). т.е., если написать:
DECLARE @rez int EXECUTE spDelNaklad @rez OUTPUT IF @rez>0 PRINT @rez
то в SQL Query Analyzer как раз увидим значение этой переменной @rez. Так вот и вопрос, как присвоить переменной Delphi (в приложении) значение возвращаемой в запросе величины @rez. Чтобы потом можно было, к примеру, через ShowMessage(...) сообщить это пользователю.
Насчет: AdoConnection.OnInfoMessage + Сервверный курсор - если можно поподробнее, так мне не понятно.


 
yura_2   (2004-03-18 15:53) [3]

To stas:
В AdoQuery так и прописано: @rez OUTPUT (из хр.процедуры возвращается значение - OUTPUT). т.е., если написать:
DECLARE @rez int EXECUTE spDelNaklad @rez OUTPUT IF @rez>0 PRINT @rez
то в SQL Query Analyzer как раз увидим значение этой переменной @rez. Так вот и вопрос, как присвоить переменной Delphi (в приложении) значение возвращаемой в запросе величины @rez. Чтобы потом можно было, к примеру, через ShowMessage(...) сообщить это пользователю.
Насчет: AdoConnection.OnInfoMessage + Сервверный курсор - если можно поподробнее, так мне не понятно.


 
Yura_2   (2004-03-18 16:18) [4]

Прошу извенить. Спешил и ошибка вышла в строке, в тексте вопроса. Надо читать так:

ADOQuery.SQL.Text:="EXECUTE spDelNaklad @rez OUTPUT";

Bо последней строке с print тоже:

"EXECUTE spDelNaklad @rez OUTPUT IF @rez>0 PRINT @rez"

В исходнике был запрос с параметрами, но они к этому вопросу не относятся. И я не все в строке убрал сразу.


 
Delirium ©   (2004-03-18 18:12) [5]

SET NOCOUNT ON
DECLARE @rez int
EXECUTE spDelNaklad, @rez OUTPUT
SELECT @rez as Result


 
Yura_2   (2004-03-19 09:05) [6]

To Delirium
К сожалению, у меня инет только до 18-ти часов. Поэтому не мог раньше ответить.
Дело в том, что как и "PRINT @rez", так и Ваша последняя сторка из приложения не видны. Поэтому и была идея как-то присвоить результат этого запроса какой-либо переменной Delphi. Чтобы потом можно было потом как-то ее (или его - результат) обработать. Но, видимо, это не правильно. Придется создавать расширенную хранимую процедуру. Если есть у кого какая-то информация, как проще это сделать на Delphi - дайте ссылку


 
stas ©   (2004-03-19 09:14) [7]

Ты немного не понял

ADOQuery.SQL.Text:="EXECUTE spDelNaklad @rez OUTPUT";
ADOQuery.SQL.ADD ("SET :PAR = @rez");
AdoQuery.Parameters[0].Direction:=pdOutPut;
Выполняешь запрос: ADOQuery.ExecSQL;
И дальше пишешь:
A:=AdoQuery.Parameters[0].Value;


 
stas ©   (2004-03-19 09:18) [8]

А чтобы получить результат функции print
нужно:
AdoQuery.Cursorlocation:=clUseServer;
И на событие ADOCONNECTION.ONINFOMESSAGE написать
procedure TForm1.ADOConnection1InfoMessage(Connection: TADOConnection;
 const Error: Error; var EventStatus: TEventStatus);
begin
SHOWMESSAGE (Error.Description);
end;
Помоему так.


 
Delirium ©   (2004-03-19 10:21) [9]

"...так и Ваша последняя сторка из приложения не видны..." - т.е. FieldByName("Result") результат не возвращает? :)


 
Yura_2   (2004-03-19 13:16) [10]

Опять были проблемы со связью. Всем спасибо за помощь.
To Delirium:
В этом варианте
SET NOCOUNT ON
DECLARE @rez int
EXECUTE spDelNaklad, @rez OUTPUT
SELECT @rez as Result

на FieldByName("Result") отвечает, что поле Result не найдено. Не смог разобраться, почему. Мне кажется, что должно бы было получиться.

TO stas:
С вариантом
AdoQuery.Parameters[0].Direction:=pdOutPut;
ругается на шаге ADOQuery.ExecSQL;
Прошел вариант:
Parameters.ParamValues["PAR"]:=pdOutPut;

Сейчас попробую вариант с PRINT


 
Yura_2   (2004-03-19 13:16) [11]

Опять были проблемы со связью. Всем спасибо за помощь.
To Delirium:
В этом варианте
SET NOCOUNT ON
DECLARE @rez int
EXECUTE spDelNaklad, @rez OUTPUT
SELECT @rez as Result

на FieldByName("Result") отвечает, что поле Result не найдено. Не смог разобраться, почему. Мне кажется, что должно бы было получиться.

TO stas:
С вариантом
AdoQuery.Parameters[0].Direction:=pdOutPut;
ругается на шаге ADOQuery.ExecSQL;
Прошел вариант:
Parameters.ParamValues["PAR"]:=pdOutPut;

Сейчас попробую вариант с PRINT


 
Yura_2   (2004-03-19 13:24) [12]

Что-то два ответа сразу получилось. Раз нажал - выдало ошибку, вернулся и отправил еще раз. Теперь - два...


 
stas ©   (2004-03-19 14:33) [13]

Параметры можешь настраивать в DesignTime.


 
Yura_2   (2004-03-19 16:46) [14]

Что у меня не так все это работает.
with ADOQuery_All Do begin
 SQL.Clear;
 SQL.Text:="DECLARE @rez int EXECUTE spDelNaklad :id, @rez  OUTPUT"
 SQL.ADD ("SET :par = @rez");
 Parameters.ParamValues["id"]:=id;
 Parameters[1].Value:=pdOutPut;
//или Parameters.ParamValues["PAR"]:=pdOutPut;
 ExecSQL;
 a:=Parameters[1].Value;


При этом почему-то a = 2 всегда! Если процедуру spDelNaklad запускать из SQL Analizer, то @rez OUTPUT принимает реальные значения (правильные). Запутался в трех строчках.


 
KSergey ©   (2004-03-20 14:14) [15]

1. Прекратите маятся фигней и просто вызовете SP как и положено, указав параметр выходной ;)
2.
> на FieldByName("Result") отвечает, что поле Result не найдено.

Ну так используйте

Query.Fields[0].Value - куда уж проще ;)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1080541211
Layner
2004-03-29 10:20
2004.04.18
Кто смотрит "Момент истины" в 20.00 по ТВЦ???


3-1080059869
neVIP
2004-03-23 19:37
2004.04.18
Маркировка ячйки DBGrid


1-1080910101
Zeon
2004-04-02 16:48
2004.04.18
Очистка памяти


4-1076912234
KADAN
2004-02-16 09:17
2004.04.18
IsWindowStayOnTop


1-1080498352
Eraser
2004-03-28 22:25
2004.04.18
Координаты Popup-меню





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский