|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Добрый день Нужно выгрузить данные из PL/SQL таблицы в область ('Range') Excel покоординатно. Для этого нужен 2-х мерный массив. В help есть " Specifiers for OLE arrays ", но там общие слова. Выгружать PL/SQL таблицу в область работает отлично - типа такого: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
строки выгружаются в регион без проблем - все отлично, но не могу сообразить - как создать 2-х мерный OLE массив (и работать с ним). Может у кого есть пример(ы), или ссылка - где посмотреть подробности ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 17:29 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Игрался несколько лет назад. Многомерные массивы у меня также не получились. Так же не получились сложные типы. Но честно говоря, не вижу причины, почему бы Range не заполнять просто построчно-поколоночно. Тогда одномерного массива вполне должно хватить. 820089 P.S. Если так уж принципиально нужно и готовы схватить весь ворох проблем (полный п...ц с саппортом кода, полная недокументированность, 100% не переносимость под web forms) - всегда можно взять в руки напильник (например Visual C или даже просто Visual Basic) и доработать напильником ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2013, 07:22 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Добрый день! Спасибо за информацию. Я читал Вашу переписку и она действительно очень помогла. Спасибо ! По строкам проблем нет - скорость на одномерных вырастает на порядок. Но есть одно но ) - есть заданная регламентами форма (матрица - по Х категории, по Y дата-время, в ячейках значения) а индекс на таблице устроен так, что выгружать "удобней" по столбцам. В таблице ~ 3`000`000`000 строк, так что про альтернативный индекс речь не идет. Вот и хотелось класть по столбцам, а не по строкам. Что касается выгрузки через массив по строкам, то матрица 1000х50 выгружается за ~9 сек - более чем приемлемо. Под web forms переносить и не планируем. Сначала пошли по этому пути, но потом отказались ( и проблемы с переносом, и перипетии с лицензированием и т.д., да и смысла особого нет - либо сессия + транзакция, либо все это вручную ) - сделали отдельным модулем "Доступ через WEB" и заточили его на конечную функциональность. Всех, ну или почти всех) устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2013, 19:45 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Если бизнес-критикал - напильник ))). Возможно будет приемлемым решением. Но это в личку (tigralen AT mail.ru). В свое время пытался найти документацию/ноты по ActiveX build-ins, была полная пустота и в I-net и на metalink'е. Как workaround быстро выкинуть данные в отдельную страницу (например через .CSV файл, XML) и потом через тот же OLE2 вставить их в нужное место в отформатированном документе. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2013, 19:25 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Guest-123Вот и хотелось класть по столбцам, а не по строкам. А Range из 1 столбца по данному варианту не заполняется? Мне кажется, разница вытянут ли Range в ширину (одна строка) или в высоту (один столбец) на типе данных сказываться не должен. Надеюсь. Не проверить, Forms'а нет. Guest-123Что касается выгрузки через массив по строкам, то матрица 1000х50 выгружается за ~9 сек - более чем приемлемо. GLOBAL TEMPORARY TABLE .... Сначала в нее по столбцам, потом из нее в Excel по строкам. Плюс всю логику обработки данных можно будет перенести на сервер. На клиенте только выкачка из таблица и запихивание в Excel. Совсем финт ушами: из таблицы брать не через курсор (FOR),а через Record Group. Тогда Forms с сервера сразу будет pre-fetch делать по 50 строк и соответственная разница в round trips (по крайне мере раньше была). ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2013, 19:32 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Приложение -> 4.5 тыс. работающих систем, из них треть (или чуть больше) многопользовательские. Пока удается справляться без напильника ))) Жалко здесь нельзя вставлять картинки, но итоги экспериментов с регионами и одномерными массивами следующие Код: plsql 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.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Надеюсь в процессе 3-х дневных экспериментов ничего не напутал с циклами ) Т.е. весь вертикальный регион заполняется значением 1-го элемента массива. Вообще это согласуется с первоисточником http://office.microsoft.com/ru-ru/excel-help/HP010081865.aspx Вот что пишут в разделе "Использование констант массива" Константы заключены в фигурные скобки ({ }) Столбцы разделены запятыми (,). Например, чтобы представить значения 10, 20, 30 и 40, введите массив как {10,20,30,40}. Такой массив констант является матрицей с размерностью 1 на 4 и соответствует ссылке на одну строку и четыре столбца. Значения ячеек из разных строк разделены точкой с запятой. Например, чтобы представить значения 10, 20, 30, 40 и 50, 60, 70, 80, находящиеся в расположенных друг под другом ячейках, можно создать массив констант с размерностью 2 на 4: {10,20,30,40;50,60,70,80}. Т.е. внутри 1-но мерного массива должен быть некий разделитель. Так что все согласуется - при задании Excel(ю) прямоугольного региона не означает, что Excel сам сообразит как в него класть одномерный массив. Заполнение в таких случаях будет потоковым, слева направо. В приведенном примере очевидно берется 1-ый элемент массива и им автозаполняется весь столбец региона. Может изложил излишне подробно, но по крайней уже больше не нужно тратить на это время. Да, и по поводу "1000х50 выгружается за ~9 сек" это при открытом листе Excel - все происходит на глазах у Пользователя ) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 13:43 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Не знаю как тут вносить исправления, но во втором куске примера, вместо Код: plsql 1.
лучше заменить комментарий Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 13:51 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Guest-123, При выгрузке в ёксель для ускорения: 1. Не показывайте приложение пользователю до конца выгрузки. 2. Установите свойства реагирование на события и обновление экрана в фальш, после выгрузки верните в тру. 3. После выгрузки покажите ёксель пользователю. В OLE есть такие массивы SAFEARRAY , которые могут быть многомерными. Вставка из этих массивов в ёкселевский многомерный рэндж самая быстрая, но для заполнения его элементов придется использовать функции winapi длятработы с памятью, что не совсем подходит для формсов. А так ваш пример тоже интересен, но не совсем оптимален. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 14:05 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
brig_2000Guest-123, При выгрузке в ёксель для ускорения: 1. Не показывайте приложение пользователю до конца выгрузки. 2. Установите свойства реагирование на события и обновление экрана в фальш, после выгрузки верните в тру. 3. После выгрузки покажите ёксель пользователю. В OLE есть такие массивы SAFEARRAY , которые могут быть многомерными. Вставка из этих массивов в ёкселевский многомерный рэндж самая быстрая, но для заполнения его элементов придется использовать функции winapi длятработы с памятью, что не совсем подходит для формсов. А так ваш пример тоже интересен, но не совсем оптимален. при использование OLE (позднее связывание), а не COM (раннее связывание) каждая команда, отправляемая в сервер атомарна и подобна макросу, т.е. сервер ее исполняет и возвращается в исходное состояние - это касается всяких DisplayAlerts, ScreenUpdating и т.п., т.е. эти флаги действуют только на следующую команду, т.е. через OLE ускорить за счет необновления экрана и не показывать всякие предупреждения не получится. надо использовать Type Library и COM. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 10:32 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Все еще кололись, но продолжали, судя по нику, Вы давно с травы на соли для ванн перешли (2all: это такое для таможни название МДПВ — Метилен Диокси Пировалерона) ))) ...т.е. через OLE ускорить за счет необновления экрана и не показывать всякие предупреждения не получится.... Неправда ваша. Если Excel, Word etc не будут тратить время на обновление экрана и рендеринг документа - РАЗУМЕЕТСЯ вставка пойдет быстрее. Это даже обсуждать не нужно. Достаточно хоть раз поработать со сложным документом в Word'е. Для Word разница будет даже в режиме просмотра "обычный", "разметка страницы" etc... При чем тут позднее и раннее связывание - в упор не понимаю. Пример для Oracle Forms + Exceработающего не через OLE Automation, а через импорт Type Library (как я понимаю, a la импорт пакеджей для ActiveX контрола) - приветствуется. Но у меня сильно большие сомнение, что работа через "родные" интерфейсы VS IDispatch в _общем_ случае, дает сильно большой выигрыш в производительности. Неоткуда там этому выигрышу взяться. IMHO & AFAIK. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 13:19 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevВсе еще кололись, но продолжали, судя по нику, Вы давно с травы на соли для ванн перешли (2all: это такое для таможни название МДПВ — Метилен Диокси Пировалерона) ))) ...т.е. через OLE ускорить за счет необновления экрана и не показывать всякие предупреждения не получится.... Неправда ваша. Если Excel, Word etc не будут тратить время на обновление экрана и рендеринг документа - РАЗУМЕЕТСЯ вставка пойдет быстрее. Это даже обсуждать не нужно. Достаточно хоть раз поработать со сложным документом в Word'е. Для Word разница будет даже в режиме просмотра "обычный", "разметка страницы" etc... При чем тут позднее и раннее связывание - в упор не понимаю. Пример для Oracle Forms + Exceработающего не через OLE Automation, а через импорт Type Library (как я понимаю, a la импорт пакеджей для ActiveX контрола) - приветствуется. Но у меня сильно большие сомнение, что работа через "родные" интерфейсы VS IDispatch в _общем_ случае, дает сильно большой выигрыш в производительности. Неоткуда там этому выигрышу взяться. IMHO & AFAIK. читайте первоисточник - http://support.microsoft.com/kb/153043 позднее связываение - это COM. развитие OLE2 с большими плюсами по удобству разработки и скорости. Почитайте в чем разница. А пример с TL и Forms нету - скорее всего Forms в силу сво ейущербностиих возможностей и не умеет полностб поддерживать Import Type Library и COM (хороше хоть OLE2 более-менее умеет). Что в вашем понимание "родные" интерфейсы? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 14:06 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
ну колитесь дальшеLeonid KudryavtsevВсе еще кололись, но продолжали, судя по нику, Вы давно с травы на соли для ванн перешли (2all: это такое для таможни название МДПВ — Метилен Диокси Пировалерона) ))) пропущено... Неправда ваша. Если Excel, Word etc не будут тратить время на обновление экрана и рендеринг документа - РАЗУМЕЕТСЯ вставка пойдет быстрее. Это даже обсуждать не нужно. Достаточно хоть раз поработать со сложным документом в Word'е. Для Word разница будет даже в режиме просмотра "обычный", "разметка страницы" etc... При чем тут позднее и раннее связывание - в упор не понимаю. Пример для Oracle Forms + Exceработающего не через OLE Automation, а через импорт Type Library (как я понимаю, a la импорт пакеджей для ActiveX контрола) - приветствуется. Но у меня сильно большие сомнение, что работа через "родные" интерфейсы VS IDispatch в _общем_ случае, дает сильно большой выигрыш в производительности. Неоткуда там этому выигрышу взяться. IMHO & AFAIK. читайте первоисточник - http://support.microsoft.com/kb/153043 позднее связываение - это COM. развитие OLE2 с большими плюсами по удобству разработки и скорости. Почитайте в чем разница. А пример с TL и Forms нету - скорее всего Forms в силу сво ейущербностиих возможностей и не умеет полностб поддерживать Import Type Library и COM (хороше хоть OLE2 более-менее умеет). Что в вашем понимание "родные" интерфейсы?мы с леонидом кудрявцевым понимаем о чем говорим, потому как на практике испробывали, а вы где-то что-то прочли в инете. Попробуйте сделать то, о чем мы пишем, вам понравится. Если что, я эти приемы еще с 1997 применял, а занимался я тогда обработкой сигналов с аналоговых устройств, поэтому гонял большие объемы данных в эксель, так что не по наслышке достоин. Пс. Суха теория, мой друг, а практика - мерило жизни. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 15:16 |
|
OLE arrays 2-х мерные массивы
|
|||
---|---|---|---|
#18+
brig_2000ну колитесь дальшепропущено... читайте первоисточник - http://support.microsoft.com/kb/153043 позднее связываение - это COM. развитие OLE2 с большими плюсами по удобству разработки и скорости. Почитайте в чем разница. А пример с TL и Forms нету - скорее всего Forms в силу сво ейущербностиих возможностей и не умеет полностб поддерживать Import Type Library и COM (хороше хоть OLE2 более-менее умеет). Что в вашем понимание "родные" интерфейсы?мы с леонидом кудрявцевым понимаем о чем говорим, потому как на практике испробывали, а вы где-то что-то прочли в инете. Попробуйте сделать то, о чем мы пишем, вам понравится. Если что, я эти приемы еще с 1997 применял, а занимался я тогда обработкой сигналов с аналоговых устройств, поэтому гонял большие объемы данных в эксель, так что не по наслышке достоин. Пс. Суха теория, мой друг, а практика - мерило жизни. ну мне больше верится MS и личному опыту 97 года по экспорту в Excel - прикольно смотреть как формируется таблица, когда ее показываешь на экране:) - чем вашему опыту и возможностям Oracle Forms. есть гораздо более удобные средства разработки вообще, и экспорта в excel, в частности, чем Oracle Forms - это раз. Два - это то, что OLE2 был похорен где то в районе 99 года, чуть позже Forms и перегнать двумерных массив Variantов через OLE2 из Forms в Excel просто нельзя, опять таки наверное в силу продвинутости средства разработки и большого количества возможностей. Три - почитайте про COM и OLE2 в плане сравнения по скорости выполнения и удобства разработки (знать про методы, аргументы, их типы и количество гораздо удобнее, чем писат в слепую) - будете удивлены:) Ваши приемы 97 года это скрытие с экрана самого экселя? Это детский сад:) наверное про Excel.ErrorCheckingOptions.BackgroundChecking Excel.ErrorCheckingOptions.NumberAsText Excel.ErrorCheckingOptions.InconsistentFormula и не слышали ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 15:28 |
|
|
start [/forum/topic.php?fid=51&msg=38398790&tid=1878277]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
128ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 234ms |
0 / 0 |