Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
declare @p1 int
select @p1=430
if @p1=
(Select top 1 price
from kv..adres_t
where price=@p1)
begin
raiserror('Этот тариф используется, тариф не будет удален!',1,1,1)with nowait
return
end
else
begin
raiserror('этот тариф не используется!',1,1,1)with nowait
end
14 авг 12, 05:55    [13006984]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
zedblack2002,

Предлагаю фломастеры , акварель , карандаши .
14 авг 12, 06:03    [13006987]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
Ken@t,

Это как это?
14 авг 12, 06:06    [13006988]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
сообщение выводит но, не из программы "этот тариф не используется!
Сообщение 50000, уровень 1, состояние 1"
14 авг 12, 06:13    [13006991]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
За отображение сообщения об ошибке "на экране" ответственно все же клиентское приложение. Сервер то ему его отослал.
14 авг 12, 06:23    [13006993]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
Я не получаю это сообщение место этого получаю: commandtext does not return a resultset
14 авг 12, 06:34    [13006998]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
Может, есть другие способы для отображение на экран сообщений? Начальник сказал чтобы я вывел это сообщение из хранимой процедуры. Уже 5-й день ищу похожее, нормальное не могу найти помогите пожалуйста заранее благодарен всем.
14 авг 12, 06:45    [13007002]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
zedblack2002
Может, есть другие способы для отображение на экран сообщений? Начальник сказал чтобы я вывел это сообщение из хранимой процедуры. Уже 5-й день ищу похожее, нормальное не могу найти помогите пожалуйста заранее благодарен всем.


Да, ну его такое программирование, не ваше это.
1. Зачем вызывать ExecuteReader когда не предпологается возврата набора данных ?
2. Возведение ошибки с уровнем серьёзности <=10 на клиенте можно получить обработав событие InfoMessage.
3. NOWAIT - желательно асинхронное выполнение запроса ибо иначе смысла нет.
4. У вас вызов батча - говно на клиенте , покажите его.
5. Вообще нет необходимости в представленном алгоритме , дурной он.
14 авг 12, 07:23    [13007021]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
автор
Да, ну его такое программирование, не ваше это.
1. Зачем вызывать ExecuteReader когда не предпологается возврата набора данных ?
2. Возведение ошибки с уровнем серьёзности <=10 на клиенте можно получить обработав событие InfoMessage.
3. NOWAIT - желательно асинхронное выполнение запроса ибо иначе смысла нет.
4. У вас вызов батча - говно на клиенте , покажите его.
5. Вообще нет необходимости в представленном алгоритме , дурной он.


Извините меня, я сам в первый раз тут пишу.
1. Просто я не знаю, какой метод еще использовать.
2. NOWAIT я использую для того чтобы мгновенно приходило сообщение.
3. А этот алгоритм маленький кусок хотел добавить для проверки, если есть код тарифа в доме, значит не удалять, если нет кода, удалить.
4. Я только с 7-го июля начал разбираться с программой, так что не ругайте меня.

ALTER PROCEDURE [dbo].[sp_purchase_price_delete]
@session char(38), @p1 int
WITH EXEC AS CALLER
AS
--==============================================================================
if @session not in(select id from sec_sessions)
begin
	select -1; return -1;
end
--==============================================================================
--==============================================================================
declare @permit bit
declare	@user_id int

select	@permit = sp.canDelete, @user_id = su.id
from	permitions sp join
	objects so on so.id = sp.object join
	roles sr on sr.id = sp.role join
	Users su on su.ID_Users_Role=sp.Role join
	sessions ss on ss.user_id = su.id
where	so.name = 'prices' and ss.id = @session
if 1 <> @permit
begin
	select -2; return -2;
end

--==============================================================================
--==============================================================================

update	kv.dbo.purchase_prices
set	user_id = @user_id
where	id = @p1


delete	kv.dbo.purchase_prices
where	id = @p1

select	1
return	1
--==============================================================================




if(-1 = arPurchasePrices.lv.ItemIndex) then
  begin
    MessageDlg('Необходимо выбрать элемент для удаления!', mtError, [mbOK], 0);
    Exit;
  end
  else
    dlPurchasePriceId := arPurchasePrices.GetKeyValue(arPurchasePrices.lv.ItemIndex);

  if(IDYES <> Application.MessageBox('Вы действительно хотите удалить элемент?', 'Сообщение', MB_YESNO)) then
    Exit;

  if(dmConnection.connection_open) then
  begin
    sp := TADOStoredProc.Create(Self);
    sp.Connection := dmConnection.acConn;
    sp.ProcedureName := 'sp_ser_purchase_price_delete';
    with sp.Parameters.AddParameter do
    begin
      Name := '@RETURN_VALUE';
      DataType := ftInteger;
      Direction := pdReturnValue;
      Value := -1;
    end;
    with sp.Parameters.AddParameter do
    begin
      Name := '@session';
      DataType := ftString;
      Direction := pdInput;
      Value := dmConnection.idSession;
    end;
    with sp.Parameters.AddParameter do
    begin
      Name := '@p1';
      DataType := ftInteger;
      Direction := pdInput;
      Value := dlPurchasePriceId;
    end;
    try
      sp.Active := True;
    except
      on EOleException do
      begin
        dmConnection.connection_close;
        MessageDlg('Невозможно выполнить хранимую процедуру "' + sp.ProcedureName + '"!', mtError, [mbOk], 0);
        Exit;
      end;
    end;
    dmConnection.connection_close;

    if(1 = sp.Parameters.ParamByName('@RETURN_VALUE').Value) then
      arPurchasePrices.Fill
    else if(-1 = sp.Parameters.ParamByName('@RETURN_VALUE').Value) then
      MessageDlg('Необходимо пройти авторизацию!', mtError, [mbOK], 0)
    else if(-2 = sp.Parameters.ParamByName('@RETURN_VALUE').Value) then
      MessageDlg('Отсутсвуют права доступа!', mtError, [mbOK], 0)
    else
      MessageDlg('Неизвестная ошибка! (' + sp.ProcedureName +')', mtError, [mbOK], 0);

    sp.Free;
  end
  else
    MessageDlg('Невозможно подключиться к серверу!', mtError, [mbOK], 0);
end;
14 авг 12, 08:33    [13007098]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
zedblack2002,

На сервере использовать raiserror с severity от 11 до 16.
В клиенте научится пользоваться обработкой исключений.
14 авг 12, 09:04    [13007181]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
aleks2
Guest
invm
zedblack2002,

В клиенте научится пользоваться обработкой исключений.


1. Ты о чем? Коллекцией ADODB.Errors - вот чем тредстартеру надо учиться пользоваться.
http://support.microsoft.com/kb/167957

2. В данном случае речь идет о "бизнес-ошибке", такое не выводят через raiserror.
14 авг 12, 09:27    [13007246]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
aleks2
invm
zedblack2002,

В клиенте научится пользоваться обработкой исключений.
1. Ты о чем? Коллекцией ADODB.Errors - вот чем тредстартеру надо учиться пользоваться.
http://support.microsoft.com/kb/167957
Одно другому не мешает.
aleks2
2. В данном случае речь идет о "бизнес-ошибке", такое не выводят через raiserror.
Если речь идет о втором raiserror'е, то поддерживаю. Такое вообще выводить не нужно.
14 авг 12, 09:46    [13007330]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
qwerty112
Guest
invm
zedblack2002,

На сервере использовать raiserror с severity от 11 до 16.
В клиенте научится пользоваться обработкой исключений.

сообщения с severity < 11, можно "вытащить" в событии ADO.Connection InfoMessage
14 авг 12, 10:17    [13007413]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
qwerty112,
Конечно можно, только они не вызывают исключения на клиенте.
14 авг 12, 10:22    [13007439]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Вся логика не нравится.

Опеределить неиспользуемые тарифы - отметить их на экране и дать возможность удалить чохом или персонально.
Опеределить, какие удалять нельзя - и дисайблить на них возможность удаления.
Необходимо выбрать элемент для удаления - тоже не к месту. Команда удаления должна быть доступна только на активных элементах.

В общем слабовата связка клиента с состоянием данных - чего можно делать, чего нельзя. Когда программа сначала двадцать раз переспрашивает "Вы действительно хотите удалить эту хрень", пользователь жмет ОК, а она ему в ответ: "А кк раз эту-то хрень удалить и нельзя!" - это прелесть.
14 авг 12, 10:49    [13007582]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
invm

На сервере использовать raiserror с severity от 11 до 16.
В клиенте научится пользоваться обработкой исключений.

пишит что не возможно выполнить хранимую процедуру
14 авг 12, 11:31    [13007917]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
автор
1. Ты о чем? Коллекцией ADODB.Errors - вот чем тредстартеру надо учиться пользоваться.
http://support.microsoft.com/kb/167957

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

там же нет sql алгоритмов
14 авг 12, 11:35    [13007950]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
Программист-Любитель
Вся логика не нравится.

Опеределить неиспользуемые тарифы - отметить их на экране и дать возможность удалить чохом или персонально.
Опеределить, какие удалять нельзя - и дисайблить на них возможность удаления.
Необходимо выбрать элемент для удаления - тоже не к месту. Команда удаления должна быть доступна только на активных элементах.

В общем слабовата связка клиента с состоянием данных - чего можно делать, чего нельзя. Когда программа сначала двадцать раз переспрашивает "Вы действительно хотите удалить эту хрень", пользователь жмет ОК, а она ему в ответ: "А кк раз эту-то хрень удалить и нельзя!" - это прелесть.

не я писал эту программу мне ее дали изучить и войти в курс всех ее дел вот и мучаюсь. а насчет чтоб не удолялось мне такое задание дали (
14 авг 12, 11:39    [13007983]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
Glory
Member

Откуда:
Сообщений: 104751
zedblack2002
пишит что не возможно выполнить хранимую процедуру

Кто пишет то ?
14 авг 12, 11:42    [13008005]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
автор
Кто пишет то ?
выходит сообщение что невозможно выполнить хранимую процедуру.
14 авг 12, 11:45    [13008030]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
ПаWWWлОдАрЕц
Member

Откуда: NSK-PVL
Сообщений: 135
Можно использовать параметр RETURN_VALUE. В процедуре обработать возможность удаления, и если можно то возвращаем 1 и удаляем, если нет, то 0 и ничего не удаляем. А на клиенте потом смотреть это возвращаемоле значение и оповящять пользователя либо об успехе операции либо о ее отмене ...
14 авг 12, 11:47    [13008051]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
zedblack2002
Member

Откуда:
Сообщений: 12
ПаWWWлОдАрЕц
Можно использовать параметр RETURN_VALUE. В процедуре обработать возможность удаления, и если можно то возвращаем 1 и удаляем, если нет, то 0 и ничего не удаляем. А на клиенте потом смотреть это возвращаемоле значение и оповящять пользователя либо об успехе операции либо о ее отмене ...

Меня начальник достал говорит это же просто элементарные вещи не можешь сделать. Простая проверка селектом и ее выводом сообщения.
14 авг 12, 11:53    [13008087]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
Glory
Member

Откуда:
Сообщений: 104751
zedblack2002
выходит сообщение что невозможно выполнить хранимую процедуру.

Прямо в воздухе что ли сообщение появляется ? Такими большими светящимяся буквами ?
14 авг 12, 11:54    [13008096]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
VitAks
Member

Откуда:
Сообщений: 233
zedblack2002,

ALTER PROCEDURE [dbo].[purchase_price_delete]
	-- Add the parameters for the stored procedure here
	@p1 int, @p2 int output
AS
BEGIN
	
	SET NOCOUNT ON;

   -- Insert statements for procedure here
	if @p1=
		(Select top 1 price
		from purchase_prices

		where price=@p1)
		begin
			set @p2 = 1
		--raiserror('Этот тариф используется, тариф не будет удален!',1,1,1)with nowait
		return
		end
	else
		begin	
			set @p2 = 0
		--raiserror('этот тариф не используется!',1,1,1)with nowait
	end 
END
14 авг 12, 11:58    [13008118]     Ответить | Цитировать Сообщить модератору
 Re: Дорогие друзья помогите пожалуста вывести на экран сообщение  [new]
VitAks
Member

Откуда:
Сообщений: 233
zedblack2002,

а вот вызов:

DECLARE @p2 int 

EXEC purchase_price_delete 500, @p2 output
SELECT @p2
if @p2 = 1
	begin
		print 'Тариф используется'
	end
else
	begin
		print 'Можно удалять'
	end
14 авг 12, 11:58    [13008125]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить