|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Например integer li_cols, i any la_any[] DWObject dwobjectvar li_cols = Integer(ds_1.Describe("DataWindow.Column.Count")) for i = 1 to li_cols // тут необходимо получить ссылку на соответствующий i DWObject //dwobjectvar = ds_1.object.#i la_any[] = dwobjectvar.Primary ... // далее некие действия next ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2004, 17:00 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
По имени можно вот так http://lokshinmark.narod.ru/tips.htm#tip0017 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2004, 17:43 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Спасибо, оказывается по номеру тоже можно, например так: integer li_cols, i any la_any[] DWObject dwobjectvar li_cols = Integer(ds_1.Describe("DataWindow.Column.Count")) for i = 1 to li_cols // тут необходимо получить ссылку на соответствующий i DWObject dwobjectvar = ds_1.object.get_attribute( "#"+string(i),True) la_any[] = dwobjectvar.Primary ... // далее некие действия next ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2004, 18:06 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
В общем это дурацкая практика, поскольку: 1) чаще всего это просто не нужно 2) синтаксис этот (get_attribute) НЕ документирован, НЕ поддержан, и меняется от версии к версии РВ ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2004, 18:38 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Согласен, что пользоваться недокументированными функциями нехорошо... Но меня немного удивляет, что стандартными и документированными средствами билдера нельзя в рантайме получить ссылку на DWObject по его имени или номеру... Во время разработки в коде можно указать: DWObject ldwo ldwo = dw_1.Object.colname или ldwo = dw_1.Object.#1 а рантайме стандартными средствами этого делать нельзя... чем можно объяснить отстутсвие стандартных средств? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2004, 19:06 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
авторчем можно объяснить отстутсвие стандартных средств? Тем, что кажущаяся необходимость его получить есть верный признак проблем в дизайне твоей логики/скриптинга... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2004, 19:13 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Есть подозрение, что скорее проблема не в дизайне, а в методологическом взгляде на вещи. Скорее всего dGrichine привык работать с объектами, посему и пытается работать с DW не как с целостным объектом, а как с контейнером... Я бы просто рекомендовал поработать и попрактиковаться в использовании Describe в DW ему. Надеюсь, это уберет максимум вопросов. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 11:27 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
все заключается в том, что приложение, которым я занимаюсь является на 100% невизуальным, работаю только с DataStore (в первом постинге не зря указано ds_1), которые создаются в рантайме с помощью SyntaxFromSQL, следовательно ничего о количестве, наименовании и типе объектов во время написания скрипта я знать не могу и не знаю. Иметь же к ним (объектам) доступ в рантайме мне необходимо. Еще раз повторюсь, что мне кажется странным: С одной стороны при дизайне и скриптинге DataWindow или DataStore с заранее определенными объектами получить ссылку на них можно как по наименованию так и по номеру. И это не называется кривостью дизайна/скриптинга, а является стандартным и описанным в документации методом работы с объектами входящими в состав DataStore. С другой же стороны, при работе с DataStore созданными во время выполнения все происходит с точностью до наоборот - получить ссылку на объект нельзя ни по номеру ни по наименованию и попытка ее получить - называется неправильной логикой приложения... Самое интересное, что потребность в таком доступе существует, стоит только поискать обсуждение этой темы на форумам самого sybase'a... Там периодически обсуждают эту тему начиная, по-моему, с 98 года... Итог всего этого: потребность есть, скрытая возможность есть, а в добавить функцию в стандартные почему то не торопятся... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 17:16 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Поддерживаю мнение dGrichine по этому вопросу. Действительно, весьма не ясно, почему к 9 версии нельзя было исправить. Ну это из серии наличия объекта DataWindowChild в PowerBuilder'е, невозможности приведения объектов DataStore к DataWindow и обратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 17:25 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
2 dGrichine автор// далее некие действия Можно узнать, что это за некоторые действия? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 17:54 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
авторС одной стороны при дизайне и скриптинге DataWindow или DataStore с заранее определенными объектами получить ссылку на них можно как по наименованию так и по номеру. И это не называется кривостью дизайна/скриптинга, а является стандартным и описанным в документации методом работы с объектами входящими в состав DataStore. С другой же стороны, при работе с DataStore созданными во время выполнения все происходит с точностью до наоборот - получить ссылку на объект нельзя ни по номеру ни по наименованию Сие утверждение ложно. НИКАКОЙ разницы в том, что можно получить во время выполнения и при дизайне НЕТ. И там и там ты можешь обращаться с "объектами" сидящими внутри dataobjectа одинаково - или через Descirbe/Modify, или через dot notation. Ссылку на TYPE DWObject ты получаешь ТОЛЬКО в событиях, предопределенных Sybaseом, и в плане этих ссылок разницы между runtime и design time нет . ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 18:20 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
To: Филипп Тут скорее всего речь идет не о "... во время выполнения и при дизайне ..." а о двух двух разных "типов" DW - созданных заранее и о которых мы знаем всю инфу и можем в скриптах напрямую работать с колонками...., и созданных динамически (например по синтаксису). To: all Так как народ (наверное в силу определенных причин) усиленно не хочет пользовать Descirbe/Modify (не совсем понятно почему...), то мучается с дот нотацией и удивляется - почему это не было сделано или сделано криво... Все это мне немного напоминают танцы с бубнами с API Windows :). Когда народ начинает юзать недокументированные функции и потом кричит, что мол все криво. Чесно говоря - не совсем понимаю, почему Вы так до сих пор не работаете с Descirbe/Modify, может хоть пример приведете, где они "не спасают"? Тем более, насколько мне известно - работа с дот нотацией неэффективна (тормозит). Объясните, плиз... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 18:48 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
andy753 , опять за рыбу деньги продаем - никакой разницы между авторDW - созданных заранее и о которых мы знаем всю инфу и можем в скриптах напрямую работать с колонками...., и созданных динамически (например по синтаксису) НЕТ . ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 19:02 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Филипп Ссылку на TYPE DWObject ты получаешь ТОЛЬКО в событиях, предопределенных Sybaseом, и в плане этих ссылок разницы между runtime и design time нет. Вот с этим позвольте не согласиться. Ссылку на DWObject объект я могу получить в design time где угодно, а не только в событиях DataWindow(DataStore) - см Help - Using the DWObject variable, а вот в run time этого сделать не удастся. Филипп НИКАКОЙ разницы в том, что можно получить во время выполнения и при дизайне НЕТ. И там и там ты можешь обращаться с "объектами" сидящими внутри dataobjectа одинаково - или через Descirbe/Modify, или через dot notation. Изменять свойства объекта с помошью функций Descirbe/Modify это одно, а вот иметь ссылку на сам объект это совсем другое... Как ты получишь/изменишь свойства объекта в run time с помощью dot natation если имена и количество объектов тебе заранее неизвестно? В моем первом постинге есть пример того что мне сделать не удалось в run time. Если вам удастся заполнить в run time массив значений la_any[] из primary буфера какой-либо колонки с помощью Describe и без использования цикла с пробегом от первой строки до последней, то попрошу пример кода... Но, думаю, навряд ли это удастся сделать эффективнее чем la_any[] = ds_1.object.#23.Primary Только не спрашивайте зачем, раз уж разницы нет, то покажите как... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 19:20 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
авторКак ты получишь/изменишь свойства объекта в run time с помощью dot notation если имена и количество объектов тебе заранее неизвестно? Количество, номера (да и имена, поскольку номера) объектов известны ВСЕГДА, а для получения/изменения свойств имена вообще НЕ нужны, поэтому любой dot notation для получения/изменения свойств работает. Код: plaintext
Ну да, всё захардкодируя, при этом неизвестно хорошо это или нет, причём ясно, что используешь ты эту ссылку ТОЛЬКО опять для получения/изменения свойств, потому как datу ты из этой ссылки вынуть всё равно не можешь. То есть единственный случай, когда твои претензии хоть сколько нибудь обоснованы, это dot notation Syntax for one or all data items in ONE named column, OK, только в чём проблема с использования цикла с пробегом от первой строки до последней, раз тебе так уж понадобилось оперировать с ОДНОЙ колонкой с неизвестным именем? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 19:43 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Да, ну и зачем DataWindowChild в PowerBuilder'е присутствует? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 20:59 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
А простите, причём здесь DataWindowChild? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 21:14 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Ну к DWObject'у он, конечно, не при чем, но все-же как-то навеяло :), почему в PowerBuilder'е функция GetChild возвращает DataWindowChild, а не DataWindow/DataStore? Вообще-то вопрос даже более чем интересный (по крайней мере, лично для меня). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 21:31 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
авторКоличество, номера (да и имена, поскольку номера) объектов известны ВСЕГДА, а для получения/изменения свойств имена вообще НЕ нужны, поэтому любой dot notation для получения/изменения свойств работает. что то мы о разном говорим, наверное... я так и не пойму, как можно имея номер или имя объекта (их всегда можно получить) использовать dot notation в run time приведу пример: попытаюсь получить тип колонки в run time, получая в run time же наименование и номер колонки... Только не говорите, что для этих целей надо использовать Describe... знаю... но раз говорят, что см цитату выше, то как это сделать я не пойму... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
в обоих случаях получаем system error: Error Number = 36 Error text = Name not found accessing external object property ls_colname и Error Number = 36 Error text = Name not found accessing external object property #i автор...причём ясно, что используешь ты эту ссылку ТОЛЬКО опять для получения/изменения свойств, потому как datу ты из этой ссылки вынуть всё равно не можешь. имея ссылку на DWObject я могу изменять как данные так и свойства, но мне нужны данные, которые я могу вынуть, манипулировать ими... получив массив с данными, я могу их изменить и заново присвоить их объекту, пример см Real's HowTo @ www.rgagnon.com Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
а вот используя стандартый механизм Код: plaintext 1. 2.
я, действительно не смог достучаться до данных, массив la_any[] в таком случае выглядит как массив структур... (кстати, надо будет попробовать со структурой) автор только в чём проблема с использования цикла с пробегом от первой строки до последней, раз тебе так уж понадобилось оперировать с ОДНОЙ колонкой с неизвестным именем? бегать по строкам и получать данные можно, но для этого нужно использовать набор функций GetItemDate, GetItemString, GetItemNumber и т.д.... чтобы их использовать, мне нужно определить тип каждой колонки и писать что-то типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
в случае же, если мне надо получить ВСЕ данные из DWObject, мне кажется проще и эффективнее использовать la_any[] = dwobjectvar.Primary не говоря уже о быстродействии беганья по строкам ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 22:56 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
авторбегать по строкам и получать данные можно, но для этого нужно использовать набор функций GetItemDate, GetItemString, GetItemNumber и т.д.... чтобы их использовать, мне нужно определить тип каждой колонки и писать что-то типа Есть ерунда, делается это так: Код: plaintext 1.
где i - номер колонки. А тут очепятка, вот так должно быть: Код: plaintext
(поскольку номер колонки известен, а получения/изменения свойств делаются естественно через Describe/Modify, что в любом случае лучше с точки зрения error handling) авторно мне нужны данные, которые я могу вынуть, манипулировать ими... получив массив с данными, я могу их изменить и заново присвоить их объекту ...и далее идёт пример сортировки - блестящая идея, вынуть данные из объекта, который знает как и умеет сортировать, засунуть их в специально созданный объект (такого же класса, который умеет и знает тоже самое), потом нести их обратно. Вы бы может поточнее задачу обрисовали, которую на самом деле решать пытаетесь, вместо того, чтоб сначала "решить", как вы её решать хотите, а потом жаловаться, что PowerBuilderное одеяло не натягивается на некоторые из ног вашего "решения"... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2004, 23:57 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Я тебе про Фому, ты мне про Ерему... :) Я тебе говорю, что иметь ссылку на DWObject полезно, указываю место в документации, ты мне говоришь, что-то про проблемы дизайна, хардкоддинг и одеяло :) Я тебе говорю что получить ссылку на DWObject в design time можно, а в run time нельзя, ты мне говоришь, что нет никакой разницы... раз уж так, приведи пример. Ты мне говоришь, что нельзя манипулировать данными из DWObject'а, я тебе показываю что это сделать довольно легко, привожу пример с сортировкой массива. Пример приведен, только для доказательства такой возможности. Ну и навскидку задача, которую не может решить стандарный DataStore. Сразу оговорюсь, это не задача, которую я решал... Пусть есть объект DataStore, сформированный и заполненный динамически НЕСВЯЗАННЫМИ между собой данными. Необходимо произвести сортировку данных одного или нескольких объектов, входящих с состав этого DataStore так, чтобы соседние данные остались на прежних местах... И еще одна задача: Необходимо в заполненный DataStore добавить копию какой-нибудь колонки, т.е. было 10 столбцов, стало 11, т.е. реализовать что-то типа ds_1.AddColumn(name, type, data[], columnplace) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2004, 09:36 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
)) ну просто Ексел какой-то получается... Сори за офтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2004, 09:41 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
авторЯ тебе говорю что получить ссылку на DWObject в design time можно ТОЛЬКО захардкодив имена, понятно, что дальше продолжать бессмысленно. авторПусть есть объект DataStore, сформированный и заполненный динамически НЕСВЯЗАННЫМИ между собой данными. Необходимо произвести сортировку данных одного или нескольких объектов, входящих с состав этого DataStore так, чтобы соседние данные остались на прежних местах... Ну так и что, из динамически сделанных колонок вынимать данные (и вставлять их) строковым перебором (причём можно и без лишнего CASTинга, как я показал выше), а сортировщик можно построить статический, со колонками всех типов данных и для вставления/вынимания данных в него/из него использовать dot notation и array asignments, всех дел то... авторИ еще одна задача: Необходимо в заполненный DataStore добавить копию какой-нибудь колонки, т.е. было 10 столбцов, стало 11, т.е. реализовать что-то типа Ну а с этим вообще непонятно, при чём здесь DWObject, когда весь dataobject заново CREATEать надо... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2004, 18:54 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
ФилиппНу а с этим вообще непонятно, при чём здесь DWObject, когда весь dataobject заново CREATEать надо Для External DатаWindow в свое время было опубликовано решение... Заранее прошу прощения за длинную цитату, но может кому-то пригодится :-) Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
(С) Влад Ермолаев, приблизительно конец прошлого века :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2004, 20:34 |
|
Возможно ли получить ссылку на DWObject по его номеру?
|
|||
---|---|---|---|
#18+
Давай вспомним из-за чего разгорелся спор. Я утверждал, что получить ссылку на DWObject в дизайнтайм можно, а в рантайм нельзя. Ты утверждал, что нет никаких различий в дизайне и рантайме. Пусть получать ссылку на DWObject трижды неправильно (по-твоему мнению) и это будет хардкодинг, но получить ее в рантайме у тебя не получится... авторНу так и что, из динамически сделанных колонок вынимать данные (и вставлять их) строковым перебором (причём можно и без лишнего CASTинга, как я показал выше) можно, но какой смысл так делать? Данные в колонке уже являются массивом и вынуть/вставить их можно простым присваиванием этого массива локальному массиву. Я никогда не поверю, что при копировании содержимого массивов из одного в другой ты ходишь по одному перебором (от первого элемента к последнему или от последнего к первому) и вставляешь данные поэлементно в другой... Копирование всех данных из DWObject'a в массив и обратно это как раз частный случай присвоения одного массива другому. автора сортировщик можно построить статический, со колонками всех типов данных и для вставления/вынимания данных в него/из него использовать dot notation и array asignments, всех дел то... зачем же строить/изобретать статический сортировщик, если сортировать прекрасно умеет dataobject... пример с сортировкой массива с использованием динамически создаваемого datastore, который я приводил выше, прекрасно с эти справляется. авторНу а с этим вообще непонятно, при чём здесь DWObject, когда весь dataobject заново CREATEать надо... правильно, dataobject придется пересоздавать, а вот чтобы данные из него не потерять тут как раз пригодилась бы прямая ссылка на DWObject. Но при копировании содержимого одного DWObjecta в другой этого можно избежать и использовать dot notation, как я показывал выше. А если необходимо не копировать, а присвоить новой колонке какие-то другие данные, находящиеся в локальном одномерном массиве, то без ссылки на DWObject не обойтись... авторТОЛЬКО захардкодив имена, понятно, что дальше продолжать бессмысленно. Согласен, продолжать бессмысленно... доводы друг друга мы знаем и остались при своих мнениях... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2004, 20:41 |
|
|
start [/forum/topic.php?fid=15&fpage=110&tid=1339322]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
70ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 256ms |
total: | 433ms |
0 / 0 |