Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: CL | DM;

Вниз

Освобождение ресурса в 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;
Скачать: CL | DM;

Наверх




Память: 1.62 MB
Время: 0.173 c
2-1210856525
Гена_88
2008-05-15 17:02
2008.06.08
SQL in Delphi


8-1180962851
Igor_thief
2007-06-04 17:14
2008.06.08
Screenshot формы (с рамкой)


2-1210942401
Шестаков Антон
2008-05-16 16:53
2008.06.08
Работа с TreeViev


3-1198763654
squirrel
2007-12-27 16:54
2008.06.08
SQL запрос


8-1181893421
BlackCat
2007-06-15 11:43
2008.06.08
Проигрывание AVI файла с выводом на плату ввода /вывода