Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];

Вниз

Освобождение ресурса в finally   Найти похожие ветки 

 
ANB   (2008-05-07 17:51) [560]


> Во-первых, терминальный доступ - это та самая многозвенка
> о который ты говоришь (тонким клиентом выступает Terminal
> Services Client), во-вторых, я не совсем понимаю, каким
> образом поможет терминальный доступ при локальных базах,
>  в-третьих, я не до конца понял с репликацией - что куда
> реплицируется через поиск резервных каналов связи и т.п.
>  ?

1. Терминал и репликация - 2 разных решения.
С терминалом - уел. Пусть будет нужна трехслойка. Хотя аппсервер здесь тоже может быть тонким и бизнес логику в него пихать смысла нету.
С другой стороны, при отсутствии связи вообще, удаленный офис не сможет работать совсем.
Репликация - процесс обмена данными между отдельными серверами. Филиалы все свои документы отправляют в центральный офис. Сами получают тока нужные им документы.
Поиск резервных каналов связи : пишется специальное приложение, которое занимается только транспортом данных от сервера к серверу.
Оно должно уметь находить запасные рабочие каналы связи при отказе основных. Есно, эти запасные каналы связи сначала надо организовать, а в приложение засунуть из параметры и научить его работать с ними.
Такая штука была реализована в "МВ офисная техника" и работала довольно продуктивно.
При использовании репликации офисы смогут ограниченно работать даже при  полном отсутствии связи с центром.


 
Reindeer Moss Eater ©   (2008-05-07 17:55) [561]

а не подеретесь


 
ANB   (2008-05-07 17:56) [562]


> отченость реализованна полностью на серверных скриптах (это
> не SQL скрипты, это Pascal Script"ы),


> либо если лучше все таки отработать со спецификой БД, то
> пишется скрипт с синтаксисом Pascal"я, который призван отработать
> звеном между БД

А скл то кто генерит ? СУБД паскаль не понимает.


 
ANB   (2008-05-07 17:56) [563]


> Reindeer Moss Eater ©   (07.05.08 17:55) [561]
> а не подеретесь

А почти подрались уже :)


 
ANB   (2008-05-07 17:58) [564]


> ANB   (07.05.08 14:32) [531]

Вот моя задачка. Палладин - ты можешь ее решить ?
Пусть будет паскалеподобный скрипт.


 
Palladin ©   (2008-05-07 17:59) [565]


> ANB   (07.05.08 17:56) [562]

Pascal Script"у от аппсервера передается объект соединения и данные поступившие от клиента и в синтаксисе PS реализуются необходимые действия для сериализации объекта. В случае смены БД, изменяется скрипт, сервер остается нетронутым.

вопросы


 
Palladin ©   (2008-05-07 18:01) [566]

в скрипте можно создавать сколь угодно объекты TADOQuery и работать с ними на всех правах, сейчас конечно придет Николай наверное, но я могу его заверить, что все объекты TADOQuery используются только во благо программинга )


 
Palladin ©   (2008-05-07 18:01) [567]


> ANB   (07.05.08 17:58) [564]

сейчас гляну


 
Palladin ©   (2008-05-07 18:02) [568]

а.. ты все про свою транзакцию... :) помоему я уже достаточно озвучил, что твоя задача не является задачей, но лишь нюанс...


 
ANB   (2008-05-07 18:05) [569]


> Palladin ©   (07.05.08 17:59) [565]

1. Скрипт хранится просто в виде текста ?
2. Кто генерит конечный скл ? Вумные слова "сериализация объекта" мне понятны, но не отвечают на вопрос.
3. Какой скл сгенерит твой паскаль скрипт по моей задачке ? Тем более наверняка она у тебя и так решается.
4. Кто у тебя проставляет хинты запросам, если поехал план выполнения запроса (фуллскан вместо индекс ранж скана или наборот) и нужно его вернуть на место или улучшить из-за выявившихся тормозов ?


 
ANB   (2008-05-07 18:07) [570]


> помоему я уже достаточно озвучил, что твоя задача не является
> задачей, но лишь нюанс...

А что в ней непонятного ?


 
Palladin ©   (2008-05-07 18:08) [571]


> 1. Скрипт хранится просто в виде текста ?

да конечно


> 2. Кто генерит конечный скл ? Вумные слова "сериализация
> объекта" мне понятны, но не отвечают на вопрос

в случае скриптовой, то человек конечно )


> 3. Какой скл сгенерит твой паскаль скрипт по моей задачке
> ? Тем более наверняка она у тебя и так решается.

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


> 4. Кто у тебя проставляет хинты запросам, если поехал план
> выполнения запроса (фуллскан вместо индекс ранж скана или
> наборот) и нужно его вернуть на место или улучшить из-за
> выявившихся тормозов ?

если это имеется ввиду комментарии инструмента от оракл на подобие query analizer"а, то извини ADO эти комментарии не предоставляет...


 
Palladin ©   (2008-05-07 18:15) [572]

если ты прямо хочешь так увидеть PS скрипт твое решение реализующий, то покажи как идет работа с транзакциями в оракле (я plsql не знаю) и я напишу тебе


 
ANB   (2008-05-07 18:16) [573]


> > 1. Скрипт хранится просто в виде текста ?
>
> да конечно

Во. А кто потом в них ищет синтаксические ошибки ?
И массово правит их в случае изменения структуры БД ?
Тока не надо говорить, что структура не должна так менятся, чтобы старые запросы отвалились. Все этого хотят и хрен когда так бывает.


> человек пишущий скрипт его сегенерит

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

Судя по ответу на п.4 - это не ты. Так же, судя по ответу на п.4 я не дождусь ответа на свою задачку.


> то извини ADO эти комментарии не предоставляет

АДО вообще то фиолетово синтаксис запроса. И оракловые хинты и мс склный аналог он жрет одинаково.

При этом АДО - не лучший инструмент для работы с ораклом.


 
ANB   (2008-05-07 18:20) [574]


> Palladin ©   (07.05.08 18:15) [572]

а просто коммит в конце поставить. транзакция сама стартует.
а чтобы мона было несколько операторов в один запрос засунуть, нужно писать так :
declare
 переменные
begin
 куча операторов
 commit;
end;

к синтаксису придираться не буду. Но лучше попроси дать тебе готовый кусок человека, который эти скрипты пишет.

Да. Раз ты не знаешь пл/скл, то напиши на любом диалекте скл, который знаешь.


 
Palladin ©   (2008-05-07 18:20) [575]


> Во. А кто потом в них ищет синтаксические ошибки ?
> И массово правит их в случае изменения структуры БД ?
> Тока не надо говорить, что структура не должна так менятся,
>  чтобы старые запросы отвалились. Все этого хотят и хрен
> когда так бывает.

в одном месте поправил и все. структура БД конечно меняется, например в НПА она уже раз 20 поменялась и что? я не вижу проблемы... подробней пожалуста... и причем тут многозвенность?


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

ну... один раз, при смене БД... PS скриптов не 10 тыщь, а от силы 2, но в основном всего один...


> При этом АДО - не лучший инструмент для работы с ораклом

а причем тут оракл?


 
ANB   (2008-05-07 18:20) [576]


> Так же, судя по ответу на п.4 я не дождусь ответа на свою
> задачку.

Зазвиняюсь, беру свои слова обратно.


 
ANB   (2008-05-07 18:22) [577]


> а причем тут оракл?

Эт так. до кучи. Когда на оракл будете портировать - сам узнаешь.


> а от силы 2, но в основном всего один...

Всего 2 скрипта для всех отчетов ?


 
Palladin ©   (2008-05-07 18:47) [578]


> Во. А кто потом в них ищет синтаксические ошибки ?

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

t-sql знаю, но он блин родной для mssql... ну ладно... предполагая, что все числовое

примерно так...

Var
q:IIBQuery;
SubRecs:IIBRecords;
SQL:IStringList;
n,i:Integer;

...
SQL:=GetStringList;
SQL.Add("declare @id int");
SQL.Add("begin transaction");
SQL.Add("insert into t1 (ф1) values ("+Object.Field("F1")+")");
SQL.Add("set @id=(select @@Identity)");
If Object.GetSubRecs("t2",SubRecs) Then
For i:=0 to SubRecs.Count-1 Do
 SQL.Add("insert into t2 (т1_ид,ф2) values(@id,"+SubRecs.Field("F2")+")");
SQL.Add("commit transaction");
q:=GetQuery;
q.Exec(SQL.Text,[]);
...


 
Palladin ©   (2008-05-07 18:48) [579]


> Всего 2 скрипта для всех отчетов ?

нет 2 скрипта на одно приложение, отвечающее за сохранение/загрузку данных осущности...

если говорить про систему отчетности в системе отчетности один PS скрипт и от одного до трех максимум SQL скриптов...


 
Palladin ©   (2008-05-07 18:49) [580]


>  один PS скрипт

*на один отчет...


 
Palladin ©   (2008-05-07 18:56) [581]

упс.... еще ошибочка... в:
SQL.Add("insert into t2 (т1_ид,ф2) values(@id,"+SubRecs.Field("F2")+")");

SQL.Add("insert into t2 (т1_ид,ф2) values(@id,"+SubRecs(i).Field("F2")+")");


 
Palladin ©   (2008-05-07 19:17) [582]


> Эт так. до кучи. Когда на оракл будете портировать - сам
> узнаешь.

э... я портировать не буду, в случае перехода на оракл, портировать будет тот перец, который заморочился на отхода от SQL-92 :)

ситуация с задачей [531] возникает редко, бо на уровне аппсервера поднимается BeginTrans и CommitTrans ADOConnection для каждого сеанса сохранения сущности...

да кстати, а чей то я ступил :)... у меня же соеднинение передается тоже...
тогда еще проще...

Var
 q:IIBQuery;
 SubRecs:IIBRecords;
 n,i:Integer;

 q:=GetQuery;
 Connection.BeginTrans;
 q.Exec("insert into t1 (ф1) values (:PF1)",[Object.Field("F1")]);
 q.sql.text:="select @@Identity";
 q.Open;
 n:=q.AsInt(0);
 q.Close;
 If Object.GetSubRecs("t2",SubRecs) Then
  For i:=0 to SubRecs.Count-1 Do
   q.Exec("insert into t2 (т1_ид,ф2) values(:PT1ID,:PF2)",[n,SubRecs(i).Field("F2")]);
 Connection.CommitTrans;


 
Игорь Шевченко ©   (2008-05-07 20:22) [583]

ANB   (07.05.08 17:42) [558]


> В хранимках сразу видны ошибки в тексте запроса. На этапе
> компиляции. А при хранении запроса в приложении ошибки выявятся
> тока на тестировании при входе в эту ветку.


Это крайне сомнительное преимущество. Если писать на каждый чих процедуру, да еще и права на нее отдельно раздавать, будет такой геморрой, что мало не покажется. Если в одном месте нужен запрос, который делает нечто, нужное только в одном месте, то место этому запросу в том самом месте. А делать процедуры ради процедур или, упаси боже, тестирования, это настолько нелепое занятие, что мне даже сказать нечего.


 
Игорь Шевченко ©   (2008-05-07 20:27) [584]


> Репликация - процесс обмена данными между отдельными серверами.
>  Филиалы все свои документы отправляют в центральный офис.
>  Сами получают тока нужные им документы.


То есть, вполне может быть, что каждый филиал введет набор одних и тех же документов и выяснится это на следующее утро после того, как пьяный экскаваторщик в Усть-Констанинополе перегрыз от злости кабель ?


> При использовании репликации офисы смогут ограниченно работать
> даже при  полном отсутствии связи с центром.


На количество звеньев это вообще-то несильно влияет, с использованием briefcase-технологии подобные задачи как-то решаются.


 
MsGuns ©   (2008-05-07 23:00) [585]

>ANB   (07.05.08 10:32) [517]
>> Что такое АБС и чем отличается от XYZ ?
>Ой. Привычка. Автоматизированная банковская система.

Опана.. а щё цэ таке ?


 
Palladin ©   (2008-05-07 23:09) [586]

по моему опыту это целый зоопарк из программ, и  бедный банковский отдел IT пытается заставить все это вместе работать...


 
Германн ©   (2008-05-08 01:15) [587]

И до каких пределов может достигать любовь к спорам? Лищь бы последнее слово "осталось за мной"!
:)


 
ANB   (2008-05-08 09:34) [588]


> в одном месте поправил и все. структура БД конечно меняется,
>  например в НПА она уже раз 20 поменялась и что? я не вижу
> проблемы... подробней пожалуста... и причем тут многозвенность?
>

В одном месте ? Минимум 2 : скрипт для модификации базы и поправить ваши скл скрипты для "сериализации".
Плюс все скрипты отчетов, где используется это поле. Плюс связка "имя поля таблицы" - "имя поля в классе - обертке".

А если поле добавилось ? У вас клиент тонкий и всю инфу о полях и формах ввода тянет с аппсервера ?


> SQL.Add("set @id=(select @@Identity)");

В оракле это делается совсем по другому. Так же как в ФБ/ИБ.
И трехслойка тут все переделать никак не поможет.


> нет 2 скрипта на одно приложение, отвечающее за сохранение/загрузку
> данных осущности...

Надеюсь, не на каждую сущность отдельное приложение ?

А сколько всего таблиц нарисовать успели ?


> если говорить про систему отчетности в системе отчетности
> один PS скрипт и от одного до трех максимум SQL скриптов.
> ..

Это для всех отчетов или для каждого ?


 
ANB   (2008-05-08 09:43) [589]


> Если писать на каждый чих процедуру, да еще и права на нее
> отдельно раздавать, будет такой геморрой

А пакеты зачем ?


> портировать будет тот перец, который заморочился на отхода
> от SQL-92 :)

А теперь напиши тоже самое с использованием SQL-92.
Можно без оболочки с паскалем - чисто SQL. И мона с ошибками. Главное - принцип.


> что каждый филиал введет набор одних и тех же документов

Если филиалы занимаются сканнированием книжек, то ситуевина вполне возможна.
В других случаях - как то нереально. Придумай сам пример.


> по моему опыту это целый зоопарк из программ, и  бедный
> банковский отдел IT пытается заставить все это вместе работать.
> ..

Ты успел поработать в банке ? Обалдеть.
АБС - это не зоопарк. Это всего лишь одна клетка в зоопарке.
И самое удивительное - у нас почему то весь зоопарк работает.
Может потому, что мы пишем работающие приложения, а не витаем в облаках ООП и трехслоек ?


 
Игорь Шевченко ©   (2008-05-08 10:41) [590]

ANB   (08.05.08 09:43) [589]


> А пакеты зачем ?


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


 
ANB   (2008-05-08 11:48) [591]


> но писать запросы в процедурах пакета, для того, чтобы выявить
> ошибки на этапе компиляции пакета и только для этого - это
> нонсенс

1. Легче выявляются ошибки при написании
2. Легче выявить, что сломается при изменении структуры БД
3. Легче тонко настраивать права.

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


 
Игорь Шевченко ©   (2008-05-08 11:56) [592]

ANB   (08.05.08 11:48) [591]


> гранты оракла не позволяют достаточно точно установить права
> на чтение таблиц. Например, я хочу ограничить пользователей
> по набору полей и строк.
> Плюс в зависимости от вошедшего юзера показывать им разную
> инфу в вычисляемой колонке.


FGA не пробовал ?


> 1. Легче выявляются ошибки при написании
> 2. Легче выявить, что сломается при изменении структуры
> БД


То есть, у вас тестирование приложений отсутствует как класс или построено по приницу - запустили, не ломается, ну и ладно.
Ясно. Удачи


 
Palladin ©   (2008-05-08 12:30) [593]


> ANB   (08.05.08 11:48) [591]

ты не будешь сетовать на то что я пропал, если я только после праздников отвечу, бо сейчас я могу быть не адекватен...

ок? :)


 
MsGuns ©   (2008-05-08 13:11) [594]

>ANB   (08.05.08 11:48) [591]
>Пишется хранимка, в которой в зависимости от прав юзера ему подсовывается >нужный запрос. Сам юзер ни текста запроса не видит, ни откуда вообще данные >берутся.
>Хранимки складываются в один пакет и на него даются гранты общей роли.
>В самих хранимках в самом начале проверяется, имеется ли у юзера "тонкое" право на >выполнение именно этой хранимки.
>Как преимущество - хрен юзер, зайдя девелопером, сможет сделать больше, чем ему >позволяет клиентское приложение.

Читается как триллер. Особенно про юзера-трансформера.
Аффтар, пеши есчо ;)))


 
ANB   (2008-05-08 13:12) [595]


> FGA не пробовал ?

Эт чего такое ?
Знаю, что у оракла мона настроить хитро права на чтение таблиц. Но фактически это работает как обычная вьюха.
Следовательно, может невовремя вызвать жуткие тормоза.

> То есть, у вас тестирование приложений отсутствует как класс
> или построено по приницу - запустили, не ломается, ну и
> ладно.
> Ясно. Удачи

Комплексное тестирование - вообще редкость.
А качественное комплексное тестирование - эт ваще что то на грани фантастики.


 
Loginov Dmitry ©   (2008-05-08 13:13) [596]

Очевидное решение, позволяющая с помощью одного try..finally защитить сразу множество ресурсов:


procedure TForm1.Button1Click(Sender: TObject);
var
 ObjList: Contnrs.TObjectList;
 List1, List2, List3: TList;
begin
 ObjList := TObjectList.Create;
 try
   List1 := TList.Create;
   ObjList.Add(List1);

   List2 := TList.Create;
   ObjList.Add(List2);

   List2 := TList.Create;
   ObjList.Add(List2);

   {..................}

 finally
   ObjList.Free;
 end;
end;


По-моему - изящный способ, и по сравнению с присваиванием NIL записывается короче.


 
ANB   (2008-05-08 13:14) [597]


> Читается как триллер. Особенно про юзера-трансформера.
> Аффтар, пеши есчо ;)))

Милин. Ща узнаю у кореша, как его донецкий банк назывался.

У них так и сделано. + репликация в центральный офис со всей украины и уже даже россии.


 
Palladin ©   (2008-05-08 13:16) [598]


> Loginov Dmitry ©   (08.05.08 13:13) [596]

хреновое решение :) кто поинтеры в List1, List2 и List3 освобождать будет? :) пиши уж TStringList :)

понимаешь, Дим, если бы все так было просто, что сводилось к освобождению лишь объектов... так ведь полным полно других ресурсов, требующих защитить и гарантированно освободить в конце работы...


 
ANB   (2008-05-08 13:16) [599]


>  ObjList.Add(List2);

Вместо нилов идет эта строка. + лишний объект. Единственно - в файналли строка одна.


 
Loginov Dmitry ©   (2008-05-08 13:36) [600]


> понимаешь, Дим, если бы все так было просто, что сводилось
> к освобождению лишь объектов... так ведь полным полно других
> ресурсов, требующих защитить и гарантированно освободить
> в конце работы...


Это все понятно.
Зато в файналли - одна строка и отсутсвие присваиваний NIL (это преимущества, которое я увидел в данном способе). Естественно, работает только для объектов.
Имхо, и такой подход имеет право на существования в определенных случая...



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 1.6 MB
Время: 0.21 c
3-1199832163
Евгений Р.
2008-01-09 01:42
2008.06.08
Где ошибка в синтаксисе?


2-1210702537
TStas
2008-05-13 22:15
2008.06.08
Не рисуется на TPanel


15-1208756362
Скорость закачки
2008-04-21 09:39
2008.06.08
Скорость закачки


2-1211044712
lewka-serdceed
2008-05-17 21:18
2008.06.08
Нажатие на Enter


4-1190818620
H@kker
2007-09-26 18:57
2008.06.08
Нужно добавит новый пункт в системное контекстное меню...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский