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

Суть вопроса заключается в следующем:
Есть хранимая процедура или триггер и возникла необходимость выбора варианта ее ветвления, на 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
14.08.2008, 00:17
    #35486331
Возможности ODBC
Вопрос неясен. Можно поподробнее, что интересует - как работает try/catch в Cache'? генерируется ли исключение во внешнем приложении при работе через ODBC? Что именно?

---------
http://writeimagejournal.com - InterSystems Russia Technology Blog.
...
Рейтинг: 0 / 0
14.08.2008, 18:41
    #35488427
bn1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможности ODBC
Суть вопроса в том, возможно ли создать диалоговое окно в стиле :
Код: 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
15.08.2008, 06:30
    #35488766
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможности ODBC
Каше-программа работает на сервере, а пользователь на клиенте.

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

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

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

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

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

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

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

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

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

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


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