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

Вниз

Как передать TIBTransaction в качестве параметра процедуры.   Найти похожие ветки 

 
avers_sm   (2010-12-27 11:27) [0]

Уважаемые мастера, помогите разобраться. Приложение нестабильно работает. Эмпирическим путем установлено, что проблема скорее всего в механизме использования транзакций.
Использую Firebird 1.5.

Имеется фрейм GrItemsFrame, в котором реализована логика каталога товаров. Соответственно во фрейме имеются наборы данных, подвязанные к транзакции. Она размещена тоже во фрейме.

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


procedure TGrItemsFrame.Init(Transaction:TIBTransaction; WID:integer);
var i:integer;
begin

Groups.Transaction:=Transaction;
Wares.Transaction:=Transaction;
WaresUnit.Transaction:=Transaction;

Groups.Active:=true;
Wares.Active:=true;
WaresUnit.Active:=true;

....
end;


Далее при вызове определенной формы, которая имеет свою транзакцию, я инициализирую фрейм, в контексте этой транзакции:


procedure TWaresForm.FormActivate(Sender: TObject);
begin
Tr_Wares.Active:=true;
GrItemsFrame1.Init(Tr_Wares,ID:integer);
end;


Подскажите, правильна ли такая передача параметра? Ведь TIBTransaction - это указатель на объект, а потом при инициализации фрейма я этот указатель присваиваю датасетам.

Или такой механизм неприменим для TIBTransaction?


 
Ega23 ©   (2010-12-27 11:43) [1]


> Подскажите, правильна ли такая передача параметра? Ведь
> TIBTransaction - это указатель на объект, а потом при инициализации
> фрейма я этот указатель присваиваю датасетам.


Передача параметра таким образом - вполне допустима. Более того, в целом именно так и делается.
Другой вопрос - а что с логикой? И тут уже на него никто, кроме тебя не ответит.


 
avers_sm   (2010-12-27 11:57) [2]


> Передача параметра таким образом - вполне допустима. Более
> того, в целом именно так и делается.
> Другой вопрос - а что с логикой? И тут уже на него никто,
>  кроме тебя не ответит.


Спасибо за ответ. А насчет логики - буду ковырять дальше. Перед тем как задать следующий вопрос его нужно правильно сформулировать.


 
Sergey13 ©   (2010-12-27 12:12) [3]

> [0] avers_sm   (27.12.10 11:27)
> Далее при вызове определенной формы, которая имеет свою транзакцию
А зачем ей СВОЯ транзакция?


 
avers_sm   (2010-12-27 12:18) [4]


> А зачем ей СВОЯ транзакция?


Исключительно для разработки. Например, хотя бы создать список полей датасету.


 
Sergey13 ©   (2010-12-27 12:33) [5]

> [4] avers_sm   (27.12.10 12:18)

Я имею в виду КАЖДОЙ форме СВОЯ транзакция зачем? Какой в этом смысл? Это надежнее чем одна транзакция или что?
В чем выражается
> Приложение нестабильно работает. Эмпирическим путем установлено,
> что проблема скорее всего в механизме использования транзакций.
?


 
avers_sm   (2010-12-27 13:13) [6]


> Sergey13 ©   (27.12.10 12:33) [5]
> Я имею в виду КАЖДОЙ форме СВОЯ транзакция зачем? Какой
> в этом смысл? Это надежнее чем одна транзакция или что?
> В чем выражается


Нет, не в каждой. Только в справочниках. Именно справочники могут вызываться или со своей транзакцией, или в контексте транзакции той формы, которая его вызвала.

Таким образом, пользователь может работать в разных режимах со справочником:
1. Обособлено и потом подтвердить/отменить свои действия.
2. Из какого-то документа. Например, при добавлении товара нужного не обнаружено и вызывается справочник (в контексте транзакции документа) и туда сначала добавляются товары, а потом уже переносятся в документ. Но при откате документа и все изменения в справочнике тоже будут отвергнуты.


 
Sergey13 ©   (2010-12-27 13:26) [7]

> [6] avers_sm   (27.12.10 13:13)

Ну так а в чем выражается нестабильность то?
Каковы параметры транзакции кстати?

> 1. Обособлено и потом подтвердить/отменить свои действия.
И много отменяют? И интересно как это реализовано - начал транзакцию и ущел думать "ту би ор нот ту би"?

> Но при откате документа и все изменения в справочнике тоже будут отвергнуты.

Зачем? Что плохого в том, что в справочнике будет еще одно правильное (оно ведь не от балды туда вводилось?) значение? ИМХО конечно.


 
Petr V. Abramov ©   (2010-12-27 13:33) [8]


> Sergey13 ©   (27.12.10 13:26) [7]

да ладно, особого криминала в подходе нет.


 
avers_sm   (2010-12-27 13:47) [9]


> Ну так а в чем выражается нестабильность то?


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

> Ega23 ©   (27.12.10 11:43) [1]
>
> Передача параметра таким образом - вполне допустима. Более
> того, в целом именно так и делается.


Теперь буду разбираться дальше.
> avers_sm   (27.12.10 11:57) [2]
>  Перед тем как задать следующий вопрос его нужно правильно
> сформулировать.


:)

Возможно, проблема с EhLib. Попробую поменять версию библиотеки.

P.S.
А насчет замечаний по логике, то это субъективный подход. Как говорится кому что нравится. :)

В любом случае всем спасибо за участие.


 
Ega23 ©   (2010-12-27 14:00) [10]


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

Логи, стек вызова, и снова логи. Много логов.
Только так.


 
Дмитрий Белькевич   (2011-01-02 00:45) [11]

Эврикалог в помощь.



Страницы: 1 вся ветка

Текущий архив: 2013.11.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
8-1233235167
iworm
2009-01-29 16:19
2013.11.03
Line in


3-1293286581
caesar_88
2010-12-25 17:16
2013.11.03
База данных "План - рейтинг"


11-1248443105
DevilDevil
2009-07-24 17:45
2013.11.03
Горизонтальный ScrollBar


15-1368966000
Interrupted++
2013-05-19 16:20
2013.11.03
Проблемы с внешним хардом.


2-1357887539
vrem
2013-01-11 10:58
2013.11.03
Память естся, подскажите как исправить для такого вызова: