Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

Почему не получается переопределить свойство DataSource у потомка   Найти похожие ветки 

 
Michael5   (2005-08-15 08:59) [0]

DBGrid? Пишет ошибку - неизвестный идентификатор... А вроде все делаю правильно. Подскажите пожалуйста!


unit MyGrid;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DBGrids, DB, ADODB, StdCtrls;

type
 TMyDatabaseGrid = class (TDBGrid)
 private
   FADOConnection: TADOConnection;
   FADOTable: TADOTable;
   FConnectionString: WideString;
   FDataSource: TDataSource;
   FLabel: TLabel;
   function GetConnectionString: WideString;
   procedure SetConnectionString(Value: WideString);
 public
   constructor Create(AOwner:TComponent); override;
   property DataSource;//вот что здесь неправильно???
 published
   property ConnectionString: WideString read GetConnectionString write
           SetConnectionString;
 end;
 

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("MyGrid", [TMyDatabaseGrid]);
end;

{
******************************* TMyDatabaseGrid ********************************
}
constructor TMyDatabaseGrid.Create(AOwner:TComponent);
begin
       inherited Create(AOwner);
       FLabel:=TLabel.Create(Self);
       FLabel.Caption:="MyDBGrid";
       FLabel.Top:=2;
       FLabel.Left:=20;
       FLabel.Parent:=Self;
       FLabel.Visible:=false;
       //******************************************
       
       FADOConnection:=TADOConnection.Create(Self);
       FADOTable:=TADOTable.Create(Self);
       FDataSource:=TDataSource.Create(Self);
       FADOTable.Connection:=FADOConnection;
       FDataSource.DataSet:=FADOTable;
       
      TMyDatabaseGrid.DataSource:=FDataSource;//на эту строку и ругается!
end;

function TMyDatabaseGrid.GetConnectionString: WideString;
begin
end;

procedure TMyDatabaseGrid.SetConnectionString(Value: WideString);
begin
   if ConnectionString <> Value then
   begin
 //    MyADOConnection.CheckInactive;
     FADOConnection.ConnectionString := Value;
     ConnectionString := Value;
     FConnectionString := Value;
   end;
end;

end.


 
Anatoly Podgoretsky ©   (2005-08-15 09:13) [1]

Это приватное поле.


 
Michael5   (2005-08-15 11:19) [2]

Почему приватное?
 TDBGrid = class(TCustomDBGrid)
 public
   property Canvas;
   property SelectedRows;
 published
   property Align;
   property Anchors;
   property BiDiMode;
   property BorderStyle;
   property Color;
   property Columns stored False; //StoreColumns;
   property Constraints;
   property Ctl3D;
   property DataSource;
...


 
Reindeer Moss Eater ©   (2005-08-15 14:14) [3]

TMyDatabaseGrid.DataSource:=FDataSource;//на эту строку и ругается!

Правильно делает что ругается.
Полям экземпляра надо присваивать значения, а не полям класса


 
tesseract ©   (2005-08-15 14:38) [4]

поле объявлено как published, public  лучше не объявлять, если и получится то скорей всего будет сбоить.
>>TMyDatabaseGrid.DataSource:=FDataSource;

Свойству нельзя так присваивать. Ему присвоены  методы OnDataSourceRead и OnDataSourceWrite которые непосредственно и отвечают за чтение и запись. И скорее всего в тот же FDataSource.

Moss Eater тоже прав, писать нужно так DataSource:=FDataSource - но зачем ???? Ведь FDataSource и есть поле где хранится DAtaSource.


 
Наиль ©   (2005-08-15 22:18) [5]

Где-то прочитал, что published-свойство, можно и иногда нужно делать public.
Эта возможность предусмотрена Borland"ом для скрытия свойств из Инспектора объектов.
А что касается ошибочной строчки, то всё очень просто.
Убери из декларации FDataSource. Всё равно DataSource будет использовать переменую описаную в предке.
Убери из декларации property DataSource, если хочешь оставить оставить свойсво в инспекторе.
А строчки
FDataSource.DataSet:=FADOTable;
TMyDatabaseGrid.DataSource:=FDataSource

замени на
DataSource.DataSet:=FADOTable
И тогда будет тебе Счастье.


 
Юрий Зотов ©   (2005-08-16 00:05) [6]

> Наиль ©   (15.08.05 22:18) [5]

> Где-то прочитал, что published-свойство, можно и иногда нужно
> делать public.

Можно. Но не нужно. Потому что это все равно ничего не даст.

> Эта возможность предусмотрена Borland"ом для скрытия свойств
> из Инспектора объектов.

Не верьте. Лучше проверьте. Не предусмотрено такое Borland"ом.

> Michael5   (15.08.05 08:59)

Если хотите спрятать DataSource, то наследуйтесь от TDCustomBGrid и публикуйте только те свойства, которые нужны (по образцу TDBGrid).


 
Наиль ©   (2005-08-16 16:30) [7]

Спасибо Юрий, что разъяснили про published->public. Этим методом для скрытия не пользовался, поэтому не был уверен, что прав.


 
Юрий Зотов ©   (2005-08-16 18:22) [8]

> Наиль ©   (16.08.05 16:30) [7]

Свойство можно убрать из ИО, если зарегистрировать для него "пустой" редактор (то есть, при вызове RegisterPropertyEditor указать nil вместо класса редактора).

Но спрячется оно только для ИО, а для кода все равно останется доступным. В Delphi нет способа понизить видимость членов класса в классе-потомке.

P.S.
Если в книжке написано обратное, то возникают очень серьезные сомнения в компетентности ее автора.


 
Наиль ©   (2005-08-16 22:57) [9]

> [8]

> Свойство можно убрать из ИО, если зарегистрировать для него
> "пустой" редактор (то есть, при вызове RegisterPropertyEditor
> указать nil вместо класса редактора).


Не смотря на то, что этот совет Вы не однократно дайте в течении многих лет. Я им так и не воспользовался. Мне проще было переопределить свойство как ReadOnly.


 
Наиль ©   (2005-08-17 00:11) [10]

Я поискал тот совет, на который опирался сам.
http://lib.profi.net.ua/doc/info_sites/visprog/books/delphi5books/2/DT/HIDEPROP.HTM
Там не совсем то, что я посоветовал. Поэтому проверил, соответсвует ли этот совет действительности. Вывод был не утешительный: не соответсвует.


 
Юрий Зотов ©   (2005-08-17 07:06) [11]

> Наиль ©   (17.08.05 00:11) [10]

Заглянул по ссылке. Потрясающе. Я буквально в шоке.

Ведь об этом писал еще Конопка, еще про Delphi 1, еще лет 7 тому назад (а Конопке стоит верить, он зря не говорит, вот чесс-слово). И это - азбука Дельфишной модели ООП. Более того, это же элементарно проверяется. И, тем не менее, даются вот такие "советы".

Потрясающе. Я буквально в шоке.

Млин, как же много "компонент райтеров" и как же мало разработчиков компонентов.



Страницы: 1 вся ветка

Форум: "Компоненты";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.013 c
15-1137360241
Bogdan1024
2006-01-16 00:24
2006.02.05
Шпоргалки


4-1132842612
ga3
2005-11-24 17:30
2006.02.05
как в консольном приложении отловить выход из Виндовс?


2-1137721466
STK
2006-01-20 04:44
2006.02.05
Работа с файлами TIFF


2-1137568718
ZZZ
2006-01-18 10:18
2006.02.05
Как определить сер. номер...?


15-1137138666
data
2006-01-13 10:51
2006.02.05
Ищу книгу Иосифа Дика "В дебрях Кара-Бумбы". Нужно сыну





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский