powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Освобождение памяти TIBSQL
25 сообщений из 30, страница 1 из 2
Освобождение памяти TIBSQL
    #39937526
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var
  ibq: TIBSQL;
begin
  ibq := TIBSQL.Create(IBDatabase1);
  ibq.Transaction := TIBTransaction.Create(IBDatabase1);

  try
    ibq.SQL.Text := 'delete from table1';
    ibq.ExecQuery;
    ibq.Transaction.Commit;
  finally
    FreeAndNil(ibq);
  end;
end;



Будет ли удален ibq.Transaction := TIBTransaction или его надо отдельно удалять?
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937527
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox

Будет ли удален ibq.Transaction := TIBTransaction или его надо отдельно удалять?

Будет при освобождении IBDatabase1.

Мне кажется, лучше при создании в качестве Owner указать ibq:
Код: pascal
1.
  ibq.Transaction := TIBTransaction.Create(ibq);


Тогда транзакция будет освобождена вместе с ibq.
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937529
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov
antox

Будет ли удален ibq.Transaction := TIBTransaction или его надо отдельно удалять?

Будет при освобождении IBDatabase1.

Мне кажется, лучше при создании в качестве Owner указать ibq:
Код: pascal
1.
  ibq.Transaction := TIBTransaction.Create(ibq);


Тогда транзакция будет освобождена вместе с ibq.


Отлично, пришлось только добавить

Код: pascal
1.
ibq.Transaction.DefaultDatabase := ibq.Database;
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937553
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox
Будет ли удален ibq.Transaction := TIBTransaction или его надо отдельно удалять?

формально экземпляр объекта уничтожается автоматом при уничтожении owner'a. Но, представь, что в твоем коде создание экземпляра объекта транзакции завершилось фейлом. Ы?

зы. прокладки try..filnally/try..except не просто так придуманы:)
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937555
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

А при каком условии создание транзакции может завершиться ошибкой?

И да, бесит, что нет нормальной конструкции:
Код: sql
1.
2.
3.
4.
5.
6.
7.
Try

Except

Finally

End
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937558
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox
И да, бесит, что нет нормальной конструкции:

Легко заменяется:
Код: pascal
1.
2.
3.
4.
try
finally
 if Assigned(ExceptObject()) then;
end;
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937559
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox> А при каком условии создание транзакции может завершиться ошибкой?

Наверняка, при проблемах с соединением (потеря связи, закрытие соединения со стороны сервера).
В случае эксепшена в триггере на старт транзакции - тоже, наверное (не помню уже, лень проверять).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937564
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  ibq := TIBSQL.Create(IBDatabase1);
  ibq.Transaction := TIBTransaction.Create(IBDatabase1);

  try
    ibq.SQL.Text := 'delete from table1';
    ibq.ExecQuery;
    ibq.Transaction.Commit;
  finally
    FreeAndNil(ibq);


Зачем вообще при создании объекта задавать владельца, если ты этот объект убиваешь сам?
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937572
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox
А при каком условии создание транзакции может завершиться ошибкой?

Если брать шире, то неважно, при каких условиях. Важна методология. В любой классической книжке по Паскалю об этом говорится, когда описывается создание объектов и обработки исключительных ситуаций. Так что, в твоем случае можно написать как-то:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
var
  ibq: TIBSQL;
  WriteTrans: TIBTransaction;
begin
  ibq := TIBSQL.Create(nil);
  try
    try
      WriteTrans:= TIBTransaction.Create(nil);

      with WriteTrans do
      begin
        //задаем параметры транзации, исключая дефолтовые свойства
      end;

      with ibq do
      begin
        SQL.Text := 'delete from table1';
        Transaction:= WriteTrans;
        //задаем остальные параметры кверей, исключая дефолтовые свойства
      end;
  
      try
        ibq.ExecQuery;
        ibq.Transaction.Commit;
      except
        on E:EIBError do
        begin
          ibq.Transaction.Rollback;
          ShowMessage(E.Message);
        end;
      end;
    finally
      FreeAndNil(WriteTrans)
    end;
  finally
    FreeAndNil(ibq);
  end;
end;
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937577
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам
antox> А при каком условии создание транзакции может завершиться ошибкой?

Наверняка, при проблемах с соединением (потеря связи, закрытие соединения со стороны сервера).
В случае эксепшена в триггере на старт транзакции - тоже, наверное (не помню уже, лень проверять).

Не, ошибок не будет, ничего не будет, пока с транзакцией работать не начнёшь. Это ведь всего лишь оболочка, экземпляр класса.
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937581
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  ibq := TIBSQL.Create(nil);
  try
    try
      WriteTrans:= TIBTransaction.Create(nil);
 
    finally
      FreeAndNil(WriteTrans)
    end;
  finally
    FreeAndNil(ibq);
  end;
 end;



Тут двух блоков не нужно, одного достаточно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937582
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ> Не, ошибок не будет, ничего не будет, пока с транзакцией работать не начнёшь.

Да, это я в вопрос не вник, я про старт говорил. Сорри, короче.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937592
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Тут двух блоков не нужно, одного достаточно.

Но так красивше :)
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937595
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
antox
И да, бесит, что нет нормальной конструкции:

Легко заменяется:
Код: pascal
1.
2.
3.
4.
try
finally
 if Assigned(ExceptObject()) then;
end;



Не видел такого, подробную
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937596
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
antox
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  ibq := TIBSQL.Create(IBDatabase1);
  ibq.Transaction := TIBTransaction.Create(IBDatabase1);

  try
    ibq.SQL.Text := 'delete from table1';
    ibq.ExecQuery;
    ibq.Transaction.Commit;
  finally
    FreeAndNil(ibq);


Зачем вообще при создании объекта задавать владельца, если ты этот объект убиваешь сам?


Что бы обьект коннекшена не задавать, так он сразу сам задаётся
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937597
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox
ъъъъъ
пропущено...

Зачем вообще при создании объекта задавать владельца, если ты этот объект убиваешь сам?


Что бы обьект коннекшена не задавать, так он сразу сам задаётся

А зачем вообще объект транзакции на каждый чих создавать? Отчего не создать нужный набор при создании TIBDatabase?
Например, RC/R, RC/W и RR (для отчетов).
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937615
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
antox
пропущено...


Что бы обьект коннекшена не задавать, так он сразу сам задаётся

А зачем вообще объект транзакции на каждый чих создавать? Отчего не создать нужный набор при создании TIBDatabase?
Например, RC/R, RC/W и RR (для отчетов).


На чтение использую одну транзакцию в приложении, для записи создаю каждый раз + на датасеты по смыслу

А так-то, наверно, можно переделать.

Почему на отчёты отдельная нужна?
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937620
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox
Почему на отчёты отдельная нужна?

Не "отдельная", а именно RR.
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937867
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Тут двух блоков не нужно, одного достаточно.
Это если мы исключаем возникновение исключения в деструкторе.

ЗЫ. Это провокация :)
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937869
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> ЗЫ. Это провокация :)

Ты там покопался и нашёл что-то или я чего забыл? :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937885
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Ты там покопался и нашёл что-то или я чего забыл? :)
Нет. Я сам пишу код из расчета на то, что почти любая строчка кода может поднять исключение.

А провокация потому, что вспомнился старый тред о том, как относиться к исключениям в деструкторах
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937918
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
вспомнился старый тред о том, как относиться к исключениям в деструкторах

вы бы не путали неофита. Пусть пишет с лишней обвязкой, пальцы, небось, не сотрутся :)
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937922
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док> Пусть пишет с лишней обвязкой

И всё равно ты неправ. :)

Если бы конструкторов было пять -
плодил бы пять вложенных блоков?

Пальцы не сотрутся, конечно, ни у тебя,
ни у него, но всё же это неправильно. :)
Хотя я это, конечно, зря пишу - помню,
что ты упёртый. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39937970
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Если бы конструкторов было пять - плодил бы пять вложенных блоков?
Вот когда найдем, тогда и будем думать (С).

ЗЫ. А в джаве придумали try-with-resourses. Там синтаксис
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
try (
  obj1 = new Object1();
  obj2 = new Object2();
  ........
  objN = new ObjectN()
) {
  // Body
}

эквивалентен такому
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
obj1 = new Object1();
try {
  obj2 = new Object2();
  try {
    ........
    objN = new ObjectN();
    try {
      // Body
    } finally {
      objN.close();
    }
    ..........
  } finally {
    obj2.close();
  }
} finally {
  obj1.close();
}

и исключение в любом месте приводит к корректному выполнению finally блоков
...
Рейтинг: 0 / 0
Освобождение памяти TIBSQL
    #39938132
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
ЗЫ. А в джаве придумали try-with-resourses.

Так там в любом случае переменные удалятся при выходе за scope. В чем изобретение-то?
В Дельфях тоже можно все объекты в интерфейсный autofree объектик заворачивать. Но, кмк, если взбухает исключение в деструкторе, то случилась довольно серьезная бяка, и на утечку от невыполненного второго тут уже покласть
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Освобождение памяти TIBSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]