![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Освобождение ресурса в finally
Arinyshka © (2008-04-23 12:17:00)
Страницы: < 1 2 3 4 5 6 7 8 9 10 ... 32 33 >
Не подскажете еще один момент:
Есть процедура, выглядит примерно так
procedure TSetPayFrm.BtnAddImageClick(Sender: TObject);
var TempBitmap:TBitmap;
begin
if not(opendialog1.Execute) then exit;
try
TempBitmap := TBitmap.Create;
TempBitmap.LoadFromFile(OpenDialog1.FileName);
finally
TempBitmap.Free;
end;
end;
На освобождение TempBitmap.Free; выдает варнинг
[Warning] uSetPaymentMain.pas(313): Variable 'TempBitmap' might not have been initialized
Не смертельно, но непонятно... почему варнинг? При изменениии условия и включении всей конструкции в один блок begin..end ситуация не менялась.
Игорь Шевченко (2008-05-08 11:56:00) [61]ANB (08.05.08 11:48) [591]
> гранты оракла не позволяют достаточно точно установить права
> на чтение таблиц. Например, я хочу ограничить пользователей
> по набору полей и строк.
> Плюс в зависимости от вошедшего юзера показывать им разную
> инфу в вычисляемой колонке.
FGA не пробовал ?
> 1. Легче выявляются ошибки при написании
> 2. Легче выявить, что сломается при изменении структуры
> БД
То есть, у вас тестирование приложений отсутствует как класс или построено по приницу - запустили, не ломается, ну и ладно.
Ясно. Удачи
ANB (2008-05-08 11:48:00) [62]
> но писать запросы в процедурах пакета, для того, чтобы выявить
> ошибки на этапе компиляции пакета и только для этого - это
> нонсенс
1. Легче выявляются ошибки при написании
2. Легче выявить, что сломается при изменении структуры БД
3. Легче тонко настраивать права.
Про права :
гранты оракла не позволяют достаточно точно установить права на чтение таблиц. Например, я хочу ограничить пользователей по набору полей и строк.
Плюс в зависимости от вошедшего юзера показывать им разную инфу в вычисляемой колонке.
Пишется хранимка, в которой в зависимости от прав юзера ему подсовывается нужный запрос. Сам юзер ни текста запроса не видит, ни откуда вообще данные берутся.
Хранимки складываются в один пакет и на него даются гранты общей роли.
В самих хранимках в самом начале проверяется, имеется ли у юзера "тонкое" право на выполнение именно этой хранимки.
Как преимущество - хрен юзер, зайдя девелопером, сможет сделать больше, чем ему позволяет клиентское приложение.
Игорь Шевченко (2008-05-08 10:41:00) [63]ANB (08.05.08 09:43) [589]
> А пакеты зачем ?
Я понимаю, что когда под рукой нет ничего, кроме молотка, все вокруг кажется гвоздями, но писать запросы в процедурах пакета, для того, чтобы выявить ошибки на этапе компиляции пакета и только для этого - это нонсенс
ANB (2008-05-08 09:43:00) [64]
> Если писать на каждый чих процедуру, да еще и права на нее
> отдельно раздавать, будет такой геморрой
А пакеты зачем ?
> портировать будет тот перец, который заморочился на отхода
> от SQL-92 :)
А теперь напиши тоже самое с использованием SQL-92.
Можно без оболочки с паскалем - чисто SQL. И мона с ошибками. Главное - принцип.
> что каждый филиал введет набор одних и тех же документов
Если филиалы занимаются сканнированием книжек, то ситуевина вполне возможна.
В других случаях - как то нереально. Придумай сам пример.
> по моему опыту это целый зоопарк из программ, и бедный
> банковский отдел IT пытается заставить все это вместе работать.
> ..
Ты успел поработать в банке ? Обалдеть.
АБС - это не зоопарк. Это всего лишь одна клетка в зоопарке.
И самое удивительное - у нас почему то весь зоопарк работает.
Может потому, что мы пишем работающие приложения, а не витаем в облаках ООП и трехслоек ?
ANB (2008-05-08 09:34:00) [65]
> в одном месте поправил и все. структура БД конечно меняется,
> например в НПА она уже раз 20 поменялась и что? я не вижу
> проблемы... подробней пожалуста... и причем тут многозвенность?
>
В одном месте ? Минимум 2 : скрипт для модификации базы и поправить ваши скл скрипты для "сериализации".
Плюс все скрипты отчетов, где используется это поле. Плюс связка "имя поля таблицы" - "имя поля в классе - обертке".
А если поле добавилось ? У вас клиент тонкий и всю инфу о полях и формах ввода тянет с аппсервера ?
> SQL.Add('set @id=(select @@Identity)');
В оракле это делается совсем по другому. Так же как в ФБ/ИБ.
И трехслойка тут все переделать никак не поможет.
> нет 2 скрипта на одно приложение, отвечающее за сохранение/загрузку
> данных осущности...
Надеюсь, не на каждую сущность отдельное приложение ?
А сколько всего таблиц нарисовать успели ?
> если говорить про систему отчетности в системе отчетности
> один PS скрипт и от одного до трех максимум SQL скриптов.
> ..
Это для всех отчетов или для каждого ?
Германн (2008-05-08 01:15:00) [66]И до каких пределов может достигать любовь к спорам? Лищь бы последнее слово "осталось за мной"!
:)
Palladin (2008-05-07 23:09:00) [67]по моему опыту это целый зоопарк из программ, и бедный банковский отдел IT пытается заставить все это вместе работать...
MsGuns (2008-05-07 23:00:00) [68]>ANB (07.05.08 10:32) [517]
>> Что такое АБС и чем отличается от XYZ ?
>Ой. Привычка. Автоматизированная банковская система.
Опана.. а щё цэ таке ?
Игорь Шевченко (2008-05-07 20:27:00) [69]
> Репликация - процесс обмена данными между отдельными серверами.
> Филиалы все свои документы отправляют в центральный офис.
> Сами получают тока нужные им документы.
То есть, вполне может быть, что каждый филиал введет набор одних и тех же документов и выяснится это на следующее утро после того, как пьяный экскаваторщик в Усть-Констанинополе перегрыз от злости кабель ?
> При использовании репликации офисы смогут ограниченно работать
> даже при полном отсутствии связи с центром.
На количество звеньев это вообще-то несильно влияет, с использованием briefcase-технологии подобные задачи как-то решаются.
Игорь Шевченко (2008-05-07 20:22:00) [70]ANB (07.05.08 17:42) [558]
> В хранимках сразу видны ошибки в тексте запроса. На этапе
> компиляции. А при хранении запроса в приложении ошибки выявятся
> тока на тестировании при входе в эту ветку.
Это крайне сомнительное преимущество. Если писать на каждый чих процедуру, да еще и права на нее отдельно раздавать, будет такой геморрой, что мало не покажется. Если в одном месте нужен запрос, который делает нечто, нужное только в одном месте, то место этому запросу в том самом месте. А делать процедуры ради процедур или, упаси боже, тестирования, это настолько нелепое занятие, что мне даже сказать нечего.
Palladin (2008-05-07 19:17:00) [71]
> Эт так. до кучи. Когда на оракл будете портировать - сам
> узнаешь.
э... я портировать не буду, в случае перехода на оракл, портировать будет тот перец, который заморочился на отхода от 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;
Palladin (2008-05-07 18:56:00) [72]упс.... еще ошибочка... в:
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 18:49:00) [73]
> один PS скрипт
*на один отчет...
Palladin (2008-05-07 18:48:00) [74]
> Всего 2 скрипта для всех отчетов ?
нет 2 скрипта на одно приложение, отвечающее за сохранение/загрузку данных осущности...
если говорить про систему отчетности в системе отчетности один PS скрипт и от одного до трех максимум SQL скриптов...
Palladin (2008-05-07 18:47:00) [75]
> Во. А кто потом в них ищет синтаксические ошибки ?
ты наверное имеешь в виду отладку... в качестве движка используется 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,[]);
...
ANB (2008-05-07 18:22:00) [76]
> а причем тут оракл?
Эт так. до кучи. Когда на оракл будете портировать - сам узнаешь.
> а от силы 2, но в основном всего один...
Всего 2 скрипта для всех отчетов ?
Palladin (2008-05-07 18:20:00) [77]
> Во. А кто потом в них ищет синтаксические ошибки ?
> И массово правит их в случае изменения структуры БД ?
> Тока не надо говорить, что структура не должна так менятся,
> чтобы старые запросы отвалились. Все этого хотят и хрен
> когда так бывает.
в одном месте поправил и все. структура БД конечно меняется, например в НПА она уже раз 20 поменялась и что? я не вижу проблемы... подробней пожалуста... и причем тут многозвенность?
> Т.е. текст скл под конкретный сервер пишет человек.
> Так вот можешь обрадовать этого человека, что при переезде
> с мс скл на оракл их все придется переписывать. Точнее,
> как минимум - все перепроверять.
ну... один раз, при смене БД... PS скриптов не 10 тыщь, а от силы 2, но в основном всего один...
> При этом АДО - не лучший инструмент для работы с ораклом
а причем тут оракл?
ANB (2008-05-07 18:20:00) [78]
> Palladin © (07.05.08 18:15) [572]
а просто коммит в конце поставить. транзакция сама стартует.
а чтобы мона было несколько операторов в один запрос засунуть, нужно писать так :
declare
переменные
begin
куча операторов
commit;
end;
к синтаксису придираться не буду. Но лучше попроси дать тебе готовый кусок человека, который эти скрипты пишет.
Да. Раз ты не знаешь пл/скл, то напиши на любом диалекте скл, который знаешь.
ANB (2008-05-07 18:20:00) [79]
> Так же, судя по ответу на п.4 я не дождусь ответа на свою
> задачку.
Зазвиняюсь, беру свои слова обратно.
ANB (2008-05-07 18:16:00) [80]
> > 1. Скрипт хранится просто в виде текста ?
>
> да конечно
Во. А кто потом в них ищет синтаксические ошибки ?
И массово правит их в случае изменения структуры БД ?
Тока не надо говорить, что структура не должна так менятся, чтобы старые запросы отвалились. Все этого хотят и хрен когда так бывает.
> человек пишущий скрипт его сегенерит
Т.е. текст скл под конкретный сервер пишет человек.
Так вот можешь обрадовать этого человека, что при переезде с мс скл на оракл их все придется переписывать. Точнее, как минимум - все перепроверять.
Судя по ответу на п.4 - это не ты. Так же, судя по ответу на п.4 я не дождусь ответа на свою задачку.
> то извини ADO эти комментарии не предоставляет
АДО вообще то фиолетово синтаксис запроса. И оракловые хинты и мс склный аналог он жрет одинаково.
При этом АДО - не лучший инструмент для работы с ораклом.