Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Освобождение ресурса в finally


Страницы:   1 2 3 4 5 6 7 8 9 10 ... 32 33

Arinyshka ©   (2008-04-23 12:17:00) 

Не подскажете еще один момент:
Есть процедура, выглядит примерно так

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 эти комментарии не предоставляет

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

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


Страницы:   1 2 3 4 5 6 7 8 9 10 ... 32 33

Наверх

Титульная страница Поиск, карта сайта Написать письмо