| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Класс производный от TOracleQuery |
| Автор: holodnaya 11.12.2008, 02:08 | ||||
| Здравствуйте, уважаемые! Я столкнулась со следующей проблемой. Мне нужно в отдельном модуле описать класс, производный от TOracleQuery, таким образом, чтобы его методы были доступны в других модулях программы. Пишу вот так:
Первое, на что ругается Делфи - это следующая строка.
Потом ему не нравится строка, в которой объявляется переменная 'Passw' Мне непонятно почему. Session - это свойство класса TOracleQuery и при наследовании оно должно тоже передаваться дочернему классу. Методы определения переменных (DeclareVariable) тоже есть в родительском классе. Что я делаю не так? Можно ли вообще создавать класс таким образом, как указано выше (по сути, только конструктор добавляется, а процедуры остаются те же самые) или это некорректное объявление и процедуры (подобные DeclareVariable) надо объявлять в разделе public и описывать ниже? |
| Автор: pseud 11.12.2008, 10:27 | ||
| какой ужас я бы за такой код сделал тебя горячей для начала:
|
| Автор: holodnaya 11.12.2008, 11:42 | ||
| Ну хорошо. Я описываю конструктор таким образом. А как его вызвать из другой формы, например, формы авторизации (FormLogon), причём OracleSession1 находится в отдельном DataModule, а не на форме авторизации.
Такая запись будет правильной? |
| Автор: pseud 11.12.2008, 12:07 | ||||
Logon - не давай таких имен
что-то типа этого:
|
| Автор: holodnaya 11.12.2008, 13:40 | ||||||||||
| С конструктором разобрались Теперь перейдём к другому моменту. Что касается этих строк
то при процедурном программировании , эти методы я использовала для определения переменных
Сейчас мне как эти переменные опредеклять? Попробовала следующим образом
И при вызове этой процедуры из другого модуля пишу, откуда записываются данные в переменные "Account" и "Passw"
Вообще можно ли при определении процедуры класса так много там всего написать? И сейчас выдает ошибку на строке
Смысл ошибки такой, что обращается по одному адресу, а читается другой |
| Автор: pseud 11.12.2008, 18:18 | ||||||
скроее всего на строке Execute, т.к. параметры ты забыла в кавычки взять. Authory - нет такого слова в английском языке. наверно этот код ты случайно сбда впаяла. он видимо написан в форме.
попробуй так:
и так в форме
|
| Автор: holodnaya 12.12.2008, 02:04 | ||
| Я использвоала предложенный вариант кода, но писалась ошибка, что Active, IsEmpty - неопределённые идентификаторы. Вопрос: почему создаваемый класс не перенимает свойства от родительского класса TOracleQuery? Может быть, их надо переопределять? Заменила
Сейчас пишет, что идентификатор IsEmpty не определён. |
| Автор: holodnaya 12.12.2008, 13:04 |
| Пишу на Делфи из Borland Developer Studio 2006. TOracleQuery - объект из компонентов прямого доступа Direct Oracle Access, который устанавливается дополнительно. При этом используется библиотека Oracle. |
| Автор: pseud 12.12.2008, 15:06 | ||
я использую Oracle Data Access Components (ODAC). раз твой TOracleQuery не знает функциии IsEmpty - следую моим рекомендация в пред. посте |
| Автор: holodnaya 12.12.2008, 18:03 | ||
К сожалению, этого он тоже не знает. |
| Автор: pseud 12.12.2008, 18:59 |
т.е. он не может определить количества отобранных записей??? |
| Автор: holodnaya 12.12.2008, 20:43 | ||||||
да, не может определить количесвто записей. Нашла, как можно определить
Но всё равно выделяет строку SQL.Clear;, а до закоментирования строки Close, при ошибке ссылался на неё в функции
Такое впечатление, что действительно свойства не наслёдуются. И ещё, я так понимаю, что по иерархий классов (по аналогии с обычными TQuery TDateset) TOracleQuery от TOracleDataSet должен наследовать некоторые свойства и методы. |
| Автор: pseud 15.12.2008, 10:15 |
тогда извини нет у меня такого класса пальцем в небо не получилось |
| Автор: holodnaya 16.12.2008, 01:07 | ||
И что же теперь делать? Использовать другие компоненты? Что касается ODAC, где это можно взять? |
| Автор: pseud 16.12.2008, 10:28 | ||||
Ссылка: http://www.sql.ru/forum/actualthread.aspx?tid=466437 Все точки расставлены:
попробуй cделать свой класс так:
|
| Автор: holodnaya 17.12.2008, 09:43 | ||
| Pseud, спасибо большое за помощь! Я разобралась в чём у меня была ошибка. Это я по глупости вызывала конструктор в одной процедуре (при загрузке MainForm), а методы этого класса - в процедуре другого юнита, а не в одной процедуре одного мейна последовательно. Сейчас пишу так, и всё работает.
|
| Автор: pseud 17.12.2008, 11:08 | ||
| предлагаю немножко еще доработать: 1. я так понял quLogon это поле класса формы, а не брошенный на форму компонент. может лучше вообще динамически. 2. FLogon - это видимо глобальная переменная автогенерируемая дельфей. в классе формы НИКОГДА к ней не обращайся. лучше уж к Self. 3. поэтому код:
4. всем всем всем и тебе в частности пройти http://www.delphikingdom.com/quintana/quintana.asp. Вся прелесть в том, что результат тестирования - это не выставление оценки знаниям, а подробный и доходчивый анализ ответов на поставленный вопросы. |
| Автор: holodnaya 17.12.2008, 21:32 |
| Спасибо и за оптимизацию, и за предложение пройти тестирование. Обязательно проверю свои силы как только сдам сессию. |