powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Возможности ODBC
12 сообщений из 12, страница 1 из 1
Возможности ODBC
    #35486062
bn1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Суть вопроса заключается в следующем:
Есть хранимая процедура или триггер и возникла необходимость выбора варианта ее ветвления, на C++ это будет выглядеть, где-то так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  void Func()
  {
    TMsgDlgButtons MSG  = mbYes + mbNo;
    try{
           ExecSql(“ALTER TABLE TEST DROM COLUMN ID”);
    } catch(…){
        if(MessageDlg("Продолжить выполнение процедуры?", mtConfirmation, MSG,  0 ) == mrNo) return;
      }
  ExecSql(“…”);
  …
}

Можно ли нечто подобное реализовать средствами Cache если вызов осуществляется через ODBC? // ExecSql(“CALL Func()”);
...
Рейтинг: 0 / 0
Возможности ODBC
    #35486331
Вопрос неясен. Можно поподробнее, что интересует - как работает try/catch в Cache'? генерируется ли исключение во внешнем приложении при работе через ODBC? Что именно?

---------
http://writeimagejournal.com - InterSystems Russia Technology Blog.
...
Рейтинг: 0 / 0
Возможности ODBC
    #35488427
bn1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть вопроса в том, возможно ли создать диалоговое окно в стиле :
Код: plaintext
1.
if(MessageDlg("Продолжить выполнение процедуры?", mtConfirmation, MSG,  0 ) == mrNo) return;
возможность сгенерировать исключение во внешнем приложении существует, но хотелось бы иметь возможность создать исключение с потверждением дальнейшего выполнения процедуры.

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
ClassMethod Error(Message As %String) As %String
{
 n $ETRAP
 set $ETRAP="s $ZERROR="""_$G(Message)_""""  set $ECODE=",Uerror,"
}

ClassMethod ReturnSQLResultSet(Sql As %String) As %ResultSet
{
 n SQLCODE,result
 s result =##class(%ResultSet).%New()
 if result.Prepare(Sql) if result.Execute() Quit result
 if (SQLCODE <  0 ) {
    d result.Close() k result
    set CODETEXT = $SYSTEM.SQL.SQLCODE(SQLCODE)
    do ..Error("Error "_SQLCODE_": "_CODETEXT_";\nSQL: "_Sql)
 }
}

ClassMethod Exec(Sql As %String, Value As %String =  0 ) As %String
{
 n result s result = ..ReturnSQLResultSet(Sql)
 s Val = $G(Value) 
 if (Val =  0 ) goto END
 if (Val = "") goto END
 if result.Next() set Temp = $G(result.Data(Val))  quit Temp
 quit ""
END 
 k result Quit ""
}

ClassMethod SetMasterDetail(TableName As %String, MasterField As %String, DetailField As %String, RefTable As %String, ID As %String) [ Language = cache ]
{
 SET $ZTRAP="ERR1"
 set sql = "ALTER TABLE "_TableName_" DROP CONSTRAINT FKAUTO"_TableName   do ..Exec(sql, 0 )
ERR1
 SET $ZTRAP="ERR2"
 set sql = "DROP INDEX AUTOINDEX"_TableName  do ..Exec(sql, 0 ) 
ERR2
 SET $ZTRAP="ERR3"
 set sql = "ALTER TABLE "_TableName_" DROP COLUMN "_DetailField  do ..Exec(sql, 0 ) 
ERR3
 set sql = "ALTER TABLE "_TableName_" ADD COLUMN "_DetailField_" %Numeric"   do ..Exec(sql, 0 ) 
 ...
}


Тут или генерируеш исключение или пытаешся его скрыть, вот если бы была такая возможность проинформировать пользователя о ошибке без прекращения выполнения процедуры, а лучше, что бы он мог сам решить, продолжать выполнять или нет, в зависимости от типа ошибки.
...
Рейтинг: 0 / 0
Возможности ODBC
    #35488766
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каше-программа работает на сервере, а пользователь на клиенте.

Без проблем взаимодействие можно сделать в терминале, в других случаях будут проблемы.
Особенно нехорошо все это будет через ODBC.

В вашем случае программу нужно делать на куски, эти куски запускать раздельно, смотреть коды возврата, на клиенте спрашивать что делать и запускать другие куски.

По-моему это не очень красиво, но это зависит не от каше, а от клиент-серверной архитектуры.

Можно конечно распараллеливать отдельно работу сервера и общаться через флажки - закончился кусок программы - ставим флажок, клиент асинхронно его цепляет, спрашивает пользователя, ставит другой флажок и т.д.

ИМХО.
...
Рейтинг: 0 / 0
Возможности ODBC
    #35488767
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но как через ODBC без извращений эмулировать флажки - я не в курсе.
...
Рейтинг: 0 / 0
Возможности ODBC
    #35488769
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и в случае с флажками возможны случаи, когда например перезагрузится клиент, а сервер будет ждать изменения флажка, то есть это тот еще вараинт.

ИМХО
...
Рейтинг: 0 / 0
Возможности ODBC
    #35491054
bn1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Флажки это слишком банально , лучше установить соединение через порт и создать свой протокол обмена сообщениями. Существувют определенные наработки http://karataev.nm.ru/cache/mdapi.html
...
Рейтинг: 0 / 0
Возможности ODBC
    #35491560
bn1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только там все наоборот, клиент посылат на сервер команды и получает ответы, а нужно что бы
клиент слушал порт, а сервер передавал сообщение и принимал ответ. Было бы достаточно обрабатывать две команды MessageDlg и InputQuery для начала. Может быть кто то слышал о таком?
...
Рейтинг: 0 / 0
Возможности ODBC
    #35491604
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хвост виляет собакой?

Наверно так можно, но не делатся, потому что это извращение архитектуры клиент-сервер.
Есть проще задачи такого плана - одновременное редактирование одного документа, задача передать информацию о том, что документ начал редактироваться другим пользователем (тупо блокировка не всегда хорошо)
И эта задача как-то решается при желании, но судя то тому, что это нераспространено, скорее всего делается не очень красиво.
...
Рейтинг: 0 / 0
Возможности ODBC
    #35491667
bn1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если так никто не делал до сих пор то это не извращение , а иновация в духе интерсистемс.
Может и не красиво, но ничего более менее интересного пока что нет. В случае с документом нучно его постоянно перечитывать , вариант хуже предложеного, или посылать сигнал что он изменился, в этом случае это тот же вариант что и предыдущий.
...
Рейтинг: 0 / 0
Возможности ODBC
    #35491788
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Вы забываете о таких распространенных вещах, как NAT и Firewall, которые не
позволят серверу напрямую обратиться на порт клиента. Так что более правильный
вариант - устанавливать неразрывное соединение с сервером со стороны клиента, по
которому сервер в нужный момент будет передавать данные. Это тоже вносит
существенное усложнение логики приложения (необходимо будет организовывать
многопоточную работу клиента), но более реально с точки зрения сетевого
взаимодействия. Естественно, и протоколы обмена придется писать самостоятельно.

Так что старый способ с проверкой блокировки перед сохранением или по таймеру
может оказаться не таким уж плохим.

=Сергей Шутов (logist)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Возможности ODBC
    #35491860
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bn1978Только там все наоборот, клиент посылат на сервер команды и получает ответы, а нужно что бы
клиент слушал порт, а сервер передавал сообщение и принимал ответ. Было бы достаточно обрабатывать две команды MessageDlg и InputQuery для начала. Может быть кто то слышал о таком?
Вообще-то именно это и делает SMWrap.
Сервер управляет клиентом для показа чего-то.
Или телнет-ориентированная программа.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Возможности ODBC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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