|
|
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Добрый день всем гуру! Есть такая проблема. Нужно с клиента Delphi (Embarcadero 10.1 Berlin) передать в БД (Oracle 18c) через компоненты ODAC (версия 10.3.9) таблицу с данными. Покопавшись на просторах сети решил использовать компонент TOraNestedTable. На сервере создал два типа: Код: plsql 1. 2. 3. 4. 5. 6. Первый тип полностью соответствует структуре таблицы CLREE, в которую нужно будет вносить передаваемые данные. Данные заношу так: Код: 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. Суть проблемы в том, что при вызове LNestTable.Post значения всех столбцов превращается в Null. После LNestTable.Append ставил LNestTable.Edit, но сути это не поменяло. Посему вопрос: как мне записать данные в LNestTable? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 10:49 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Nested table is a dataset component that encapsulates a database table that is nested as a field within another table. Use TOraNestedTable to access data contained in a nested dataset. A nested table provides much of the functionality of a table component, with the difference that the data it accesses is stored in a nested table. Даже гугло перевод и то говорит, что компонент не подходит для этого: Вложенная таблица - это компонент набора данных, который инкапсулирует таблицу базы данных, которая вложена как поле в другую таблицу. Используйте TOraNestedTable для доступа к данным, содержащимся во вложенном наборе данных. Вложенная таблица обеспечивает большую часть функциональности компонента таблицы, с той разницей, что данные, к которым она обращается, хранятся во вложенной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 11:35 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
И по мелочи: Append и Post должны быть внутри цикла, а не за его пределами. Но ошибка тут не в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 11:36 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
еще по мелочи Код: pascal 1. должно быть ДО Код: pascal 1. а не после ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 11:37 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
wadmanИ по мелочи: Append и Post должны быть внутри цикла, а не за его пределами. Но ошибка тут не в этом. Они и так внутри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 11:57 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Если копать глубже, то мне надо из текстового файла перенести данные в таблицу. Логичнее всего было использовать TOraLoader. Для примера я его и использовал.Работал шустро, 43 ГБ залил всего за 2.5 часа. Но проблема в том, что я не могу дать пользователю права на запись непосредственно в таблицу. Вот и приходится извращаться. Как вариант хотел передать таблицей как параметр процедуры, благо TOraStoredProc позволяет это. А так как параметр должен быть TOraNestTable, то и возникла мысль использовать TOraNestedTable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 12:04 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийwadmanИ по мелочи: Append и Post должны быть внутри цикла, а не за его пределами. Но ошибка тут не в этом. Они и так внутри Я увидел в приведенном коде иное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 12:04 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийНо проблема в том, что я не могу дать пользователю права на запись непосредственно в таблицу. Вот и приходится извращаться. Есть еще один способ: залить во временную таблицу (без индексов заливка будет еще быстрее) и затем дернуть оракловую процедуру, которая из временной раскидает записи как угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 12:06 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
wadmanЕсть еще один способ: залить во временную таблицу (без индексов заливка будет еще быстрее) и затем дернуть оракловую процедуру, которая из временной раскидает записи как угодно. Эта мысль была реализована, но опять таки всё упирается в права доступа. Создавать заранее таблицу нельзя, потому как потом придется бороться с параллельной заливкой. Если создавать по ходу выполнения закачки, то как выдать права на созданную таблицу от владельца? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 13:19 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
wadmanЯ увидел в приведенном коде иное. Интересно, что именно? Между Append и Post есть только цикл, в котором по полям ОДНОЙ ЗАПИСИ разносятся данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 13:21 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийСоздавать заранее таблицу нельзя, потому как потом придется бороться с параллельной заливкой. С чего бы вдруг? Временные таблицы разных сессий никак не взаимодействуют. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 13:28 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovС чего бы вдруг? Временные таблицы разных сессий никак не взаимодействуют. Есть 2 пользователя БД. Один владелец схемы (назовем его OWN_USER), второй - пользователь, который пользуется приложением (путь будет ARM_USER). ARM_USER вызывает пакетную процедуру, в которой происходит создание временной таблицы, со схемы OWN_USER. Временная таблица создается от OWN_USER. Её будет видеть ARM_USER? Нет, потому что надо дать на нее права. Насколько я помню, права не выдаются моментально, нужно открыть новую сессию. Для АРМа это не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:14 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийARM_USER вызывает пакетную процедуру, в которой происходит создание временной таблицы "Уже смешно." (с) Не надо так делать. Динамические метаданные - путь в никуда. Создай таблицу один раз и потом используй её. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:19 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийИнтересно, что именно? Что цикл в коде только один, а append и post - за его пределами. Леонов ЮрийЕсть 2 пользователя БД. Один владелец схемы (назовем его OWN_USER), второй - пользователь, который пользуется приложением (путь будет ARM_USER). Это легко разруливается. Быстрее сделать, чем ждать ответы и рассуждать, почему нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:36 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Дело в том, что политика заказчика не позволяет писать данные прямо в таблицу. Только через пакеты. Все таблицы обернуты вьюшками и права только на select ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:37 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийDimitry Sibiryakov, Дело в том, что политика заказчика не позволяет писать данные прямо в таблицу. Только через пакеты. Все таблицы обернуты вьюшками и права только на select ну сделай пакет, который будет использоваться для записи в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:56 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, А если добавить в пакет процедуру, которая будет добавлять 1 строчку в NESTED TABLE? Если хотите, можно даже готовым объектом REE_REC передавать. Если нет, то отдельными полями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 15:00 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
defecator, Ну так а я о чем?! Суть проблемы описал, но свели в никуда своими комментариями. Я же с того и начал, что использую TOraNestedTable для передачи данных в пакетную процедуру, в которой и состоится запись всех данных в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 15:01 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Кроик Семён Леонов Юрий, А если добавить в пакет процедуру, которая будет добавлять 1 строчку в NESTED TABLE? Если хотите, можно даже готовым объектом REE_REC передавать. Если нет, то отдельными полями. Ну, 70 миллионов записей будет довольно таки долго добавляться. Смысл был передавать блоками по 2-5 тысяч строк и вставка вида Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 15:06 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, здесь иногда отвечают программисты из Devart. Может сегодня уже :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 15:57 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Кроик Семён Леонов Юрий, здесь иногда отвечают программисты из Devart. Может сегодня уже :) Да, я знаю. Очень сильно помогают, кстати. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 16:46 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийЯ же с того и начал, что использую TOraNestedTable для передачи данных в пакетную процедуру Тут нужен не nested table, а table variable. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 17:52 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТут нужен не nested table, а table variable. Ну если точнее то TOraArray. TOraNestTable как раз наследник его ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 19:00 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийНу если точнее то TOraArray. TOraNestTable как раз наследник егоВот и используй TOraArray как параметр TOraStoredProc. Для каких тебе удобств эта обёртка-то..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 19:42 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
ma1tusЛеонов ЮрийНу если точнее то TOraArray. TOraNestTable как раз наследник егоВот и используй TOraArray как параметр TOraStoredProc. Для каких тебе удобств эта обёртка-то..? Тут походу тупик. Я использую Direct подключение, и мне бьет ошибку "OCI function is not linked". Почитал на форуме Devart, там пишут, что "Такие типы как OBJECT, ARRAY, REF, XML, BINARY_DOUBLE, BINARY_FLOAT не поддерживаются в Direct режиме. " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2019, 11:05 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийТут походу тупик. Я использую Direct подключение, и мне ... Oracle Instant Client устанавливаются простым копированием этих файлов в папку (если не ошибаюсь, около 120Мб DLLок) и пропиской eё в PATH. Если заливка данных происходит лишь на нескольких машинах, то почему бы и не поставить там? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2019, 11:34 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Пример работы с TOraNestedTable: Код: 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. Леонов ЮрийТут походу тупик. Я использую Direct подключение, и мне бьет ошибку "OCI function is not linked". Почитал на форуме Devart, там пишут, что "Такие типы как OBJECT, ARRAY, REF, XML, BINARY_DOUBLE, BINARY_FLOAT не поддерживаются в Direct режиме. " Все эти типы уже много лет поддерживаются в Direct режиме. Мы приносим извенения, за устаревшую информацию в хелпе (исправим в следующем релизе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2019, 11:42 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
devartВсе эти типы уже много лет поддерживаются в Direct режиме. По какой причине отказались? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2019, 11:44 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
wadmandevartВсе эти типы уже много лет поддерживаются в Direct режиме. По какой причине отказались? От чего отказались? Приведеный выше пример работает в OCI и в Direct режиме. Если при каких-то действиях возникает ошибка "OCI function is not linked", то дайте нам пример, когда возникает такая ошибка, и мы обязательно исправим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2019, 11:48 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
devartПример работы с TOraNestedTable: Код: 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. Ваш код заработал. Но у меня проблема другого плана. Гружу в базу небольшими блоками. После того как загрузилось, пытаюсь очистить NestTable.Clear; Вот тут и вылетает ошибка "OCI function is not linked". Каждый раз пересоздавать сам объект разве что... Но хотелось бы понять, почему эта ошибка вылазит. Может забыли исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 13:05 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Кроик СемёнOracle Instant Client устанавливаются простым копированием этих файлов в папку (если не ошибаюсь, около 120Мб DLLок) и пропиской eё в PATH. Если заливка данных происходит лишь на нескольких машинах, то почему бы и не поставить там? Просто потому, что загрузка идет из АРМа и подключение к БД идет соответственно при его старте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 13:11 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийВаш код заработал. Но у меня проблема другого плана. Гружу в базу небольшими блоками. После того как загрузилось, пытаюсь очистить NestTable.Clear; Вот тут и вылетает ошибка "OCI function is not linked". Каждый раз пересоздавать сам объект разве что... Но хотелось бы понять, почему эта ошибка вылазит. Может забыли исправить? Да, был такой баг с методом Clear, он уже исправлен, и исправление войдет в следующий билд/релиз. Вы можете или пересоздавать объект каждый раз, или написать нам в техподдержку https://www.devart.com/company/contactform.html и мы вышлем вам ночной билд с исправлением данного бага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 14:56 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
devart, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 15:01 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
при пересоздании объекта первый раз TOraStoredProc отрабатывает нормально, на втором слетает с ошибкой TOraType.Free RefCount = 0 (D:\Projects\Delphi\Dac\Common\Source\MemData.pas, line 8994 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 15:07 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, вот пример с пересозданием TOraNestTable перед каждым выполнением: Код: 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. Если вы делаете как-то по другому, то дайте пример кода. Без примеро тяжело дать какой-нибудь совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 16:23 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
devart, извините, на несколько дней вылетел с температурой у меня ошибка выскакивала при использовании FreeAndNil(NetsTable). поменял на NetsTable.Free и все заработало, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2019, 14:38 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий devart, извините, на несколько дней вылетел с температурой у меня ошибка выскакивала при использовании FreeAndNil(NetsTable). поменял на NetsTable.Free и все заработало, спасибо FreeAndNil не должен приводить к ошибкам. У вас ошибка в другом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2019, 14:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038875]: |
0ms |
get settings: |
5ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 476ms |

| 0 / 0 |
