Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть модуль данных md1, на нем набор данных с персистентным полем X. От этого модуля унаследован новый модуль md2, добавлено персистентное поле Y. Вопрос: как в Run-time определить какие поля есть только на кастомном (md1) модуле ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 13:16 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 13:28 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
че-то мне сдается, что там будет и Y :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 13:43 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Код: plaintext А это чем не устраивает? Да и вариант Артем1 должен работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 13:47 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Ну, можно поробовать так (сам не проверял, только идея): 1. Определить предка. 2. Найти ресурс формы предка. 3. Создать экземпляр предка из ресурса. 4. Прочитать список полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 13:47 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
pkarklin писалДа и вариант Артем1 должен работать. Хотя нет, будет вызван метод объекта dm2, который соответсвенно вернет и Y. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 13:50 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
md1.Query1.Fields не устраивает, потому что md1 может не быть, а создаватьего нехорошо, потому что там могут быть абстрактные функции! вот. Насчет чтения ресурса -- интересно, но... по-моему очень уж гемморойно. Уж лучше статически сформировать строковой список этих полей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 13:57 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
svче-то мне сдается, что там будет и Y Да не будет там Y. я же попробовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 15:18 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
2 Артем1 авторДа не будет там Y. я же попробовал Как вы пробовали, если не секрет? Вот в этом вызове Код: plaintext метод Fileds какого объекта будет вызван? Правильно md2. То, что вы его привели к Tmd1 еще не о чем не говорит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 15:37 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Верно, глупость сморозил. Я проверял проще. Поставли после квери точку, смотрю, в списке только одно поле: Query1X :)) Поторопился, сорри. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 16:12 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Привет всем! Кто-нибудь из вас делал чтонибудь вроде того чтоб создать клас а потом проверать какие поля в этом классе есть? ... это то что хочет sv ... простите но попахивает маразмом ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 16:36 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
2 GroZ: выы сами поняли, что сказали? Если имеется ввиду создание экземпляра, то я уже сказал: "...создаватьего нехорошо, потому что там могут быть абстрактные функции! " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 16:44 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
2 sv Я вот, например, понял о чем говорил GroZ. Вы же сам создали класс, который dm1, а теперь в коде хотите узнать, какие у него значение свойств, причем не создавая экземляра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 16:48 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
2pkarklin я не понял насчет маразма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 17:00 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Ну, на счет маразма, может и перебор. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 17:02 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Мало того, даже и не свойства класса хотите проверить, а свойства компонентов. А они могут измениться - что и происходит. Так что тут даже не знаю, как. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 17:35 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 17:42 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
2Tygra: если бы вопрос был совсем тривиальный, то я его не задавал бы. 2JibSkeart: Код: plaintext 1. 2. 3. 4. 5. 6. вот так! А как еще можно унаследовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 18:07 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
И еще: хочу акцентировать ваше внимание на том, что меня интересует только факт наличия (отсутствия) полей на предковом модуле. Чтобы было понятнее зачем это, объясню: на предковом модуле лежит набор данных с каким-то количеством полей, от него унаследованы другие модули, в каждом из которых добавлены некоторые поля. При изменении полей которые есть ТОЛЬКО на дочерних модулях мне необходимо выполнять какое-то действие. Не хочется списиок полей держать в виде константы. Создавать предковый модуль тоже нельзя. Мне этот вопрос показался очень оригинальным, я бы даже сказал -- почти олимпиадная задача. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 18:18 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 18:28 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
procedure TForm1.Button1Click(Sender: TObject); {} function GetFieldsList( const ADataSet: TADOQuery ): String; var List: TStrings; FieldsList: String; i: Integer; begin List := TStringList.Create; try ADataSet.GetFieldNames( List ); FieldsList := List.CommaText; for i := 0 to Length( FieldsList ) do if FieldsList = ',' then FieldsList := ';'; finally List.Free; end; Result := FieldsList; end; {} var FieldsList1, FieldsList2: String; begin FieldsList1 := GetFieldsList( DataModule2.ADOQuery1 ); FieldsList2 := GetFieldsList( DataModule3.ADOQuery1 ); ShowMessage( FieldsList1 + ' ' + FieldsList2 ); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 19:24 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Правильно: Y будет только у наследника . Но проблема в том, что предка, как экземпляра не существует. Есть класс предка, а самого модуля нету. Используя чудесные возможности полиморфизма, я могу обратится к потомку через переменную типа предка, но это ничем, в данной ситуации не поможет. Как выразился мой коллега: "Попались в ловушку полиморфизма..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 19:27 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
2Hammer: DataModule2 не существует! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 19:32 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 19:35 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Код: 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. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Создается Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 19:55 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Ну и чего? Типа тады так: procedure TForm1.Button1Click(Sender: TObject); {} function GetFieldsList( const ADataSet: TADOQuery ): String; var List: TStrings; FieldsList: String; i: Integer; begin List := TStringList.Create; try ADataSet.GetFieldNames( List ); FieldsList := List.CommaText; for i := 0 to Length( FieldsList ) do if FieldsList = ',' then FieldsList := ';'; finally List.Free; end; Result := FieldsList; end; {} var FieldsList1, FieldsList2: String; begin with TDataModule2.Create( nil ) do try FieldsList1 := GetFieldsList( ADOQuery1 ); finally Free; end; FieldsList2 := GetFieldsList( DataModule3.ADOQuery1 ); ShowMessage( FieldsList1 + ' ' + FieldsList2 ); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2003, 20:04 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
...однако работает Вот если бы не создавая... ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2003, 13:31 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Вот какой огород с хакеризмами можно нагородить... А можно просто применить ОО подход и задачка получается примитивная : Самое простое - проверять if Dataset is TMd2 then // это дочка - соотв. знаем, что есть ... поле. else if Dataset is TMd1 then // это предок else // Чужой dataset Или так, если ожидаются разные Md2,Md3,Md4... с помощью признака : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Md1a - будет новым предком (если нельзя модифицировать Md1, иначе можно сразу вписывать IsFather в Md1) Если хочется работать прямо со списком полей, то заведите в базовом классе два списка - один определяется в базовом классе как эталонный - в конструкторе, скажем, а в дочернем определяется второй. И сравнивайте их на здоровье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2003, 15:45 |
|
||
|
Интересный вопрос с наследованием
|
|||
|---|---|---|---|
|
#18+
Вобщем если я правильно понимаю задачу, то надо сделать дву функции, одна из которых перегрузит другую, которая будет возвращать список полей. Тогда кастя к предку ты вызовешь метод предка. С методами типа GetFieldsList не выйден потому что функция не перегружается ни в предке ни в потомке, и вызываться она будет от того класса чей экземпляр создан. Мне так кажется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2003, 16:10 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2115411]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 378ms |

| 0 / 0 |
