|
|
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! У меня в проекте есть модуль (назовем его PkBase), в котором обрабатываются вызовы хранимых процедур из БД Oracle. В рабочей форме есть переменная этого класса. В самом PkBase есть процедура обращения в БД одним из возвращаемых параметров которой есть переменная типа TOraLob. Выполняю её, ошибок нет. Полученный блоб сохраняю в файл. Но когда приходит очередь закрывать форму, то вываливается ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 18:58 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Я просто нигде не найду пример с возвратом блоба из хп. Что я делаю не правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 19:00 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Как пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 19:10 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Вот класс для общения с БД Код: 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. Теперь вызов Код: 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. Вызов отрабатывает нормально, но при закрытии формы frmFileReestr вылетает ошибка. После нее все нормально, приложение продолжает работать. Среда Embarcadero Berlin, компоненты ODAC, база Oracle 11.2.0.4.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 10:14 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Имхо, здесь уничтожается Леонов Юрий Код: pascal 1. не этот объектЛеонов Юрий Код: pascal 1. 2. 3. Не создавать, а просто возвращать TOraLob из TPkBase.GetBlob - не? ...Леонов Юрий Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 11:04 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
ma1tusИмхо, здесь уничтожается Леонов Юрий Код: pascal 1. не этот объект А какой должен уничтожаться? ma1tusНе создавать, а просто возвращать TOraLob из TPkBase.GetBlob - не? У меня 2 параметра функцией возвращается, имя файла и собственно блоб, оба нужны в процедуре. Ошибка вылетает тут Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 11:30 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий Код: pascal 1. 2. Выделенное лишнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 11:45 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийА какой должен уничтожаться?вот этот... Код: pascal 1. Процедура TPkBase.GetBlob, через параметр Код: pascal 1. записывает в LLob свой объект, а ваш, ручками созданный по этому адресу - утекает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 11:53 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
КвейдЛеонов Юрий Код: pascal 1. 2. Выделенное лишнее Это не существенно, привычка проверять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 12:23 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
ma1tusЛеонов ЮрийА какой должен уничтожаться?вот этот... Код: pascal 1. А я какой уничтожаю? ma1tusПроцедура TPkBase.GetBlob, через параметр Код: pascal 1. записывает в LLob свой объект, а ваш, ручками созданный по этому адресу - утекает... Я наверное чего-то недопонял... Я создаю LLob, записываю процедурой в него значение, сохраняю из этого же LLob в файл и потом этот же LLob я уничтожаю... Что-то я запутался. Можете привести пример, как должно быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 12:27 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 13:14 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
goldmi45, как правильно тогда сделать? Я же не могу не создавая экземпляр что-то в него писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 13:20 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Леонов Юрийgoldmi45, как правильно тогда сделать? Я же не могу не создавая экземпляр что-то в него писать Почему? Разве такой код не работает: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 13:23 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, out-параметр и var-параметр вообще-то отличаются. У вас out ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 13:25 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
goldmi45, да в этом коде все устраивает, не устраивает только ошибка, которая вылетает по закрытии формы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 13:44 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
goldmi45Леонов Юрий, out-параметр и var-параметр вообще-то отличаются. У вас out Разницы никакой для этого случая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 13:47 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, хм, вроде как не нужно даже уничтожать экземпляр LLob: TOraLob в процедуре TfrmFileReestr.actUnloadFilesExecute. Он уничтожится вместе с экземпляром StoredProc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 13:51 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
goldmi45Леонов Юрий, хм, вроде как не нужно даже уничтожать экземпляр LLob: TOraLob в процедуре TfrmFileReestr.actUnloadFilesExecute. Он уничтожится вместе с экземпляром StoredProc Интересно, а если я повторно нажму кнопку, что тогда будет? Мусорная куча, пока я не закрою форму? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 14:04 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийИнтересно, а если я повторно нажму кнопку, что тогда будет? Мусорная куча, пока я не закрою форму? Вы освобождаете не свою переменную. В этом и есть ошибка. Ну а почему не попробовать не освобождать? Вы же параметры у StoredProc тоже не освобождаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 14:09 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
goldmi45Леонов ЮрийИнтересно, а если я повторно нажму кнопку, что тогда будет? Мусорная куча, пока я не закрою форму? Вы освобождаете не свою переменную. В этом и есть ошибка. Ну а почему не попробовать не освобождать? Вы же параметры у StoredProc тоже не освобождаете. Таки да, закомментил удаление LLob и все наладилось. Не учел момент, что переопределяется адрес переменной. Спасибо, растолковали)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 14:32 |
|
||
|
Закрытие формы и TOraLob
|
|||
|---|---|---|---|
|
#18+
Финальный вариант вызова выглядит так, если кому будет нужно: Код: 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. Получается, что создавать переменную типа и уничтожать не надо. Огромная благодарность goldmi45! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2018, 16:24 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39726796&tid=2040168]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 290ms |

| 0 / 0 |
