powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
13 сообщений из 13, страница 1 из 1
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34075258
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В java для этого есть st.getWarnings()
В php есть pg_get_notify()
А как, блин, в Access прочитать warning ?
Пускаю оператор по
conn.Execute stQuery, dbExecDirect
в случае ошибки смотрю на Err.Number и на DBEngine.Errors.
А куда смотреть на предупреждения, а не на ошибки - не пойму ... :(
Err.Number = 0, а семейство DBEngine.Errors - пустое.
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34077946
ездун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Через что подключаешься? ADO, ODBC?
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34077962
ездун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извини, не заметил. Похоже ODBC. ИМХО никак не прочитаешь. По умолчанию - только критические ошибки. Все остально в этом творении била - игнор.
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34078461
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я уж понял, что надо работать через libpq.dll.
Есть у кого-нить пример использования функций
PQconnectDb(), PQexec() из MSAccess ?
Поделитесь, pls !
В лоб пытался их юзать - Access выдает ошибку:
"Нарушение соглашения о вызовах DLL"

писал так:
Declare Function PQconnectdb Lib "LIBPQ.DLL" (stConString As String) As Long
Declare Function PQsetdbLogin Lib "LIBPQ.DLL" (stPgHost As String, stPgPort As String, stPgOptions As String, stPgTty As String, stDbName As String, stLogin As String, stPwd As String) As Long
Declare Function PQstatus Lib "LIBPQ.DLL" (lConnection As Long) As Long
Declare Function PQexec Lib "LIBPQ.DLL" (lConnection As Long, stQuery As String) As Long

Private Sub aa()
Dim bb As Long

bb = PQsetdbLogin("192.168.101.103", "", "", "", "in3", "postgres", "mypass")
End Sub
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34086286
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдя. Ошибка-то моя в самом начале - функция PQsetdbLogin возвращает объект типа PGconn, который ни в коем разе не long. И его описание на C меня испугало - не хочется его переписывать на MSAccess ... Да и типы, используемые для возврата результатов запроса, не проще :(

В связи с этим я склоняюсь к такому алгоритму.
1) создать спецтабличку для сообщений

create table notice_messages (id serial not null, message_body varchar(254), muser varchar(20) not null default session_user, primary key (id));
create index mu_notice_messages on notice_messages (muser, id);

2) На клиенте операторы, которые требуют последующего чтения предупреждений сервера оформлять такой, примерно, транзакцией:

begin;
select into mid curr_var('notice_messages_id_seq');
оператор insert, update или delete;
функции на триггерах пишут предупреждения в таблицу notice_messages вместо выдачи raise notice;
select * from notice_message where muser = session_user and id >= mid;
delete from notice_message where muser = session_user and id >= mid;
commit;

Соответственно, клиент получает предупреждения, которые добавились при выдаче операторов обновления/удаления/вставки в таблицу notice_messages с момента начала его транзакции. Все это хорошо, но вот в конкретной системе юзеры работают под одним логином парами - типа взаимозаменяемые работники (сектора, как они называются в организации). И в бухгалтерии такие есть, и в отделе продаж, и в отделе доставки ... Слава богу, что хоть в планировании и на складе таких нету :)
И как мне в этом случае правильно идентифицировать текущую транзацию (session_user будет одинаков для двух работников) ?
Готового id транзакции в postgresql нет - в этом форуме уже обсуждалось.
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34087364
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем тебе вообще понадобилось нотаисы хранимок видеть на клиенте?
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34088066
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть производственные лимиты, превышать которые никак нельзя (хранимки, которые это проверяют, отсекают попытки по raise exception с соответсвующим грозным текстом), но еще нужно при "подходе к лимиту" (где 5%, где 10%) выдавать предупреждение типа "скоро лафа закончится !"
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34092525
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если это сделано через хп ( но не через триггеры) то может просто сообщение возаращать из процедур? А если до лимита не дошло то возвращать нулл.
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34092564
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 strizh
Т.к. косвенно касаюсь этой тематики, хотел узнать, а чем собственно ado не угодило для доступа к бд, или я совсем не о том?
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34095648
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To bubucha:
А разве через ADO можно прочитать raise notice ?
Мне казалось, что драйвер ado работает ту же библиотеку psqlodbc.dll ...
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34095657
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Jelis:
На триггерах все, на них, родимых ...
Реализовал приведенный мной выше алгоритм, наплевав на их сектора. Раз сотрудники взаимозаменяемы - так пусть оба предупреждения и получают, даже если кто-то из них не с той датой работает, тем более, что редко такое будет - все ж одновременно запустить запрос - это тренироваться надо :)
Как посчитал - 500 строк кода в 16 функциях эти все лимиты контролируют ...
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34096759
4321`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
strizh И как мне в этом случае правильно идентифицировать текущую транзацию (session_user будет одинаков для двух работников) ?
Готового id транзакции в postgresql нет - в этом форуме уже обсуждалось.достаточно, имхо, идентифицировать сессию. для этого - пользовать сессионные переменные.

ЗЫ. поскоку запускаете из акса, то каждый запрос должен быть дополнен вызовом инициации переменной. (т.к. акс может открыть что-то помница около 250 соединений из одного приложения, если коннешн не описан явно, и вы работаете просто в формах через присоединенные таблы).
...
Рейтинг: 0 / 0
Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
    #34097960
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
strizhTo Jelis:
На триггерах все, на них, родимых ...
Реализовал приведенный мной выше алгоритм, наплевав на их сектора. Раз сотрудники взаимозаменяемы - так пусть оба предупреждения и получают, даже если кто-то из них не с той датой работает, тем более, что редко такое будет - все ж одновременно запустить запрос - это тренироваться надо :)
Как посчитал - 500 строк кода в 16 функциях эти все лимиты контролируют ...
А может лучше просто на клиенте отдельно функции проверок запускать после обновления/добавления?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как прочитать сообщение из raise notice ... в клиенте на MS Access ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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