Конференция "Базы" » Как передать TIBTransaction в качестве параметра процедуры. [D6, Firebird 1.5]
 
  • 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?
  • Ega23 © (27.12.10 11:43) [1]

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


    Передача параметра таким образом - вполне допустима. Более того, в целом именно так и делается.
    Другой вопрос - а что с логикой? И тут уже на него никто, кроме тебя не ответит.
  • avers_sm (27.12.10 11:57) [2]

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


    Спасибо за ответ. А насчет логики - буду ковырять дальше. Перед тем как задать следующий вопрос его нужно правильно сформулировать.
  • Sergey13 © (27.12.10 12:12) [3]
    > [0] avers_sm   (27.12.10 11:27)
    > Далее при вызове определенной формы, которая имеет свою транзакцию
    А зачем ей СВОЯ транзакция?
  • avers_sm (27.12.10 12:18) [4]

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


    Исключительно для разработки. Например, хотя бы создать список полей датасету.
  • Sergey13 © (27.12.10 12:33) [5]
    > [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. Из какого-то документа. Например, при добавлении товара нужного не обнаружено и вызывается справочник (в контексте транзакции документа) и туда сначала добавляются товары, а потом уже переносятся в документ. Но при откате документа и все изменения в справочнике тоже будут отвергнуты.
  • Sergey13 © (27.12.10 13:26) [7]
    > [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.
    А насчет замечаний по логике, то это субъективный подход. Как говорится кому что нравится. :)

    В любом случае всем спасибо за участие.
  • Ega23 © (27.12.10 14:00) [10]

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

    Логи, стек вызова, и снова логи. Много логов.
    Только так.
  • Дмитрий Белькевич (02.01.11 00:45) [11]
    Эврикалог в помощь.
 
Конференция "Базы" » Как передать TIBTransaction в качестве параметра процедуры. [D6, Firebird 1.5]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]