powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / message <...> to client из под ODBC
8 сообщений из 8, страница 1 из 1
message <...> to client из под ODBC
    #33532897
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поможите кто чем ...
мой поиск не увенчался успехом (
нужно из бд(хп, функций и эвентов) отправлять сообщения "message <...> to client", а в клиенте (написанном на msVC работа через ODBC), соответственно их получать.
чтение BOL к моему сожалению не увенчалось успехом
очень хочется получить направление копания и может быть прототип калбачной функции (для подглядывания)
...надежда умирает последней, но длится это долго...
...
Рейтинг: 0 / 0
message <...> to client из под ODBC
    #33532907
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя - сервера баз данных всегда работают в пассивном режиме - то есть только отвечают на запросы и сами никому ничего не шлют. Даже в ASA оператор MESSAGE TO CLIENT, который можно перехватить через ODBC, написав свою CALLBACK функцию, на самом деле просто откладывает сообщение для клиента и пока тот не обратится к серверу, сам он сообщение не получит. Единственный способ - это написать рассылку сообщений через расширенную хранимую процедуру на C или Java, однако лучше всего просто подумать о том, чтобы отказаться от этой затеи и возможно в корне пересмотреть решение проблемы, так как использование своих расширенных ХП чревато с точки зрения надежности работы сервера - представьте себе, что в коде на Си где то идут утечки памяти или же при отсылке сообщения клиенту через Java клиент не обнаруживается и процедура ждет таймаута, в то время, как сессия. вызвавшая ее, заблокировала записи, что может привести к блокировке других сессий.
...
Рейтинг: 0 / 0
message <...> to client из под ODBC
    #33532946
Евгений_СТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
panuпоможите кто чем ...
нужно из бд(хп, функций и эвентов) отправлять сообщения "message <...> to client", а в клиенте (написанном на msVC работа через ODBC), соответственно их получать.

А для чего? В чём смысл этой операции, просто передать какое-нибудь сообщение в клиентское приложение? Тогда вместо message <...> to client можно использовать raiserror.

Код: plaintext
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.
create message  20101  as '[#] Поле [%02!] в таблице [%01!] должно быть уникальным.';
create message  20201  as '[#] Поле [%02!] в таблице [%01!] должно быть %03!.';

ALTER PROCEDURE "DBA"."Street_UID" (
    in @режим               ИДУ_Режим,
    in @Улица_ИН            СсылкаИН,
    in @Название            С_Название
)
begin
    declare not_unique exception for sqlstate '23505';  -- неуникальное значение в ключевом поле
    declare bad_check exception for sqlstate '23506';   -- нарушение ограничения целостности

    -- Исполнение операции
    case @режим
    when 'И' then
    -- Изменить
        update STREET set "NAME" = @Название where ("IDSTREET" = @Улица_ИН);
    when 'Д' then
    -- Добавить
        insert into STREET ("NAME") values (@Название);
    when 'У' then
    -- Удалить
        delete from STREET where ("IDSTREET" = @Улица_ИН);
    end case;

-- Эти сообщения получает клиентское приложение
    exception
        when not_unique then
            raiserror  20101 , 'Улицы', 'Название';
        when bad_check then
            raiserror  20201 , 'Улицы', 'Название', 'непустым';
end
...
Рейтинг: 0 / 0
message <...> to client из под ODBC
    #33532966
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
премного благодарен откликнувшимся!!!
весьма познавательно, помимо данных еще что то спасибо Евгений_СТ!
но мне кажется не совсем подходит для решениямоей задачки (извенения - я сразу не изложил) ответ Евгений_СТ. а именно не единократная отсылка сообщений в процессе работы функции или процедуры и анализ этого сообщения в коде клиента.
прозьба к ASCRUS (ну и ко всем) а пример CALLBACK функции есть? можно увидеть?
рожденный ползать - летать ДОЛЖЕН УЧИТСЯ!
...
Рейтинг: 0 / 0
message <...> to client из под ODBC
    #33532997
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В BOL как всегда все описано:
BOL To register a callback in ODBC, first declare the message handler:

void SQL_CALLBACK my_msgproc(
void * sqlca,
unsigned char msg_type,
long code,
unsigned short len,
char* msg )
{ ... }

Install the declared message handler by calling the SQLSetConnectAttr function.

rc = SQLSetConnectAttr(
dbc,
ASA_REGISTER_MESSAGE_CALLBACK,
(SQLPOINTER) &my_msgproc, SQL_IS_POINTER );
...
Рейтинг: 0 / 0
message <...> to client из под ODBC
    #33533006
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!, сохраню как учебник
(в BOL наверное пропустил )

С уважением
Александр Плотников.
...
Рейтинг: 0 / 0
message <...> to client из под ODBC
    #33535289
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSНельзя - сервера баз данных всегда работают в пассивном режиме - то есть только отвечают на запросы и сами никому ничего не шлют.(переполошено хлопая крыльями и взволновано кудахча) Чего нельзя? Почему нельзя? Ты сам же год-полтора тому назад ругал меня за неполное чтение документации, когда я считал что через ODBC нельзя получать этих сообщений :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
// обязательный хеадер в котором перечислены дополнительные ASA константы
#include <asaodbc.h>

// сам колбек
void SQL_CALLBACK my_msgproc(
   void *    sqlca,
   unsigned char     msg_type,
   long              code,
   unsigned short    len,
   char*             msg )
{
	msg[len]= 0 ;
	frpintf(stderr, "%с %s\n", msg_type, msg);
}

// в процедуре создающей коннект делаешь регистрацию колбека
	RetCode = SQLSetConnectAttr(hDbc, ASA_REGISTER_MESSAGE_CALLBACK,
								(SQLPOINTER) &my_msgproc, SQL_IS_POINTER );
	if( RetCode != SQL_SUCCESS ) {
		strcpy(FunctionName, "SQLSetConnectAttr");
		goto DBC_Error;
	}
Прекрасно получает все сообщения именно тогда, когда они посланы.
...
Рейтинг: 0 / 0
message <...> to client из под ODBC
    #33535309
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl пишет:

> (переполошено хлопая крыльями и взволновано кудахча)

А мне казалось, что совы ухают... :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / message <...> to client из под ODBC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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