-
avers_sm (27.12.10 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? -
> Подскажите, правильна ли такая передача параметра? Ведь
> TIBTransaction - это указатель на объект, а потом при инициализации
> фрейма я этот указатель присваиваю датасетам.
Передача параметра таким образом - вполне допустима. Более того, в целом именно так и делается.
Другой вопрос - а что с логикой? И тут уже на него никто, кроме тебя не ответит. -
avers_sm (27.12.10 11:57) [2]
> Передача параметра таким образом - вполне допустима. Более
> того, в целом именно так и делается.
> Другой вопрос - а что с логикой? И тут уже на него никто,
> кроме тебя не ответит.
Спасибо за ответ. А насчет логики - буду ковырять дальше. Перед тем как задать следующий вопрос его нужно правильно сформулировать. -
> [0] avers_sm (27.12.10 11:27)
> Далее при вызове определенной формы, которая имеет свою транзакцию
А зачем ей СВОЯ транзакция? -
avers_sm (27.12.10 12:18) [4]
> А зачем ей СВОЯ транзакция?
Исключительно для разработки. Например, хотя бы создать список полей датасету. -
> [4] avers_sm (27.12.10 12:18)
Я имею в виду КАЖДОЙ форме СВОЯ транзакция зачем? Какой в этом смысл? Это надежнее чем одна транзакция или что?
В чем выражается
> Приложение нестабильно работает. Эмпирическим путем установлено,
> что проблема скорее всего в механизме использования транзакций.
? -
avers_sm (27.12.10 13:13) [6]
> Sergey13 © (27.12.10 12:33) [5]
> Я имею в виду КАЖДОЙ форме СВОЯ транзакция зачем? Какой
> в этом смысл? Это надежнее чем одна транзакция или что?
> В чем выражается
Нет, не в каждой. Только в справочниках. Именно справочники могут вызываться или со своей транзакцией, или в контексте транзакции той формы, которая его вызвала.
Таким образом, пользователь может работать в разных режимах со справочником:
1. Обособлено и потом подтвердить/отменить свои действия.
2. Из какого-то документа. Например, при добавлении товара нужного не обнаружено и вызывается справочник (в контексте транзакции документа) и туда сначала добавляются товары, а потом уже переносятся в документ. Но при откате документа и все изменения в справочнике тоже будут отвергнуты. -
> [6] avers_sm (27.12.10 13:13)
Ну так а в чем выражается нестабильность то?
Каковы параметры транзакции кстати?
> 1. Обособлено и потом подтвердить/отменить свои действия.
И много отменяют? И интересно как это реализовано - начал транзакцию и ущел думать "ту би ор нот ту би"?
> Но при откате документа и все изменения в справочнике тоже будут отвергнуты.
Зачем? Что плохого в том, что в справочнике будет еще одно правильное (оно ведь не от балды туда вводилось?) значение? ИМХО конечно. -
Petr V. Abramov © (27.12.10 13:33) [8]
> Sergey13 © (27.12.10 13:26) [7]
да ладно, особого криминала в подходе нет. -
avers_sm (27.12.10 13:47) [9]
> Ну так а в чем выражается нестабильность то?
Периодически в разных местах вылетают runtime ошибки. Нерегулярно. Системы в их появлении пока не нашел. Сейчас нет смысла все это описывать. Пока разбираюсь. Сомневался в механизме передачи транзакции в качестве параметра, вот и задал вопрос. Получил исчерпывающий ответ:
> Ega23 © (27.12.10 11:43) [1]
>
> Передача параметра таким образом - вполне допустима. Более
> того, в целом именно так и делается.
Теперь буду разбираться дальше.
> avers_sm (27.12.10 11:57) [2]
> Перед тем как задать следующий вопрос его нужно правильно
> сформулировать.
:)
Возможно, проблема с EhLib. Попробую поменять версию библиотеки.
P.S.
А насчет замечаний по логике, то это субъективный подход. Как говорится кому что нравится. :)
В любом случае всем спасибо за участие. -
> Периодически в разных местах вылетают runtime ошибки. Нерегулярно.
> Системы в их появлении пока не нашел.
Логи, стек вызова, и снова логи. Много логов.
Только так. -
Дмитрий Белькевич (02.01.11 00:45) [11]Эврикалог в помощь.