Форум: "Начинающим";
Текущий архив: 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