Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.13;
Скачать: CL | DM;

Вниз

Как определить, что компонент is DataControl?   Найти похожие ветки 

 
Vitus   (2003-02-05 11:55) [0]

Привет мастерам! Подскажите, можли ли по какому-либо признаку определить, что компонент является DataControl, т.е. это компонент, отображающий данные из DataSet?


 
jack128 ©   (2003-02-05 12:14) [1]

наверное спорно, но может по наличию свойства DataSourse?


 
Романов Р.В. ©   (2003-02-05 12:17) [2]

Можно проверить есть ли у него свойство DataSource


 
Vitus   (2003-02-05 12:19) [3]

Как это проверять?


 
Романов Р.В. ©   (2003-02-05 12:29) [4]

uses TypInfo;

if GetPropInfo(MyControl, "DataSource")<>nil then...


 
Vitus   (2003-02-05 12:51) [5]

ОК, 1-я проблема решена.
Скажите, а можно ли по этому DataSource узнать связан ли он с каким-нибудь TQuery или его потомком и если связан, то как получить SQL.Text этого Query?


 
Anatoly Podgoretsky ©   (2003-02-05 12:59) [6]

А как же если не равен nil то связан и указывает на dataset


 
Романов Р.В. ©   (2003-02-05 13:05) [7]

if Assigned(MyControl.DataSource) and Assigned(MyControl.DataSource.DataSet) then
begin
if MyControl.DataSource.DataSet is TQuery then
ShowMessage(TQuery(MyControl.DataSource.DataSet).SQL.Text)
else
ShowMessage("Связан с таблицей или с чем то другим");
end
else
ShowMessage("Нисчем не связан");


 
Vitus   (2003-02-05 13:30) [8]

Проблема в том, что я не знаю, какой будет MyControl, у меня есть только Sender в FormKeyDown... Как быть?


 
icWasya ©   (2003-02-05 13:48) [9]


посмотри реализацию

Unit DBCGrids;

procedure TDBCtrlGrid.UpdateDataLinks


 
Vitus   (2003-02-05 14:01) [10]

ОК, делаю так:

if GetPropInfo(Sender, "DataSource") <> nil then begin
DataLink := TDataLink((Sender as TControl).Perform(CM_GETDATALINK, 0, 0));
if (DataLink <> nil) and Assigned(DataLink.DataSource) and Assigned(DataLink.DataSource.DataSet) then
if DataLink.DataSource.DataSet is TQuery then ShowMessage(TQuery(DataLink.DataSource.DataSet).SQL.Text)
else if DataLink.DataSource.DataSet is TRxQuery then ShowMessage(TRxQuery(DataLink.DataSource.DataSet).SQL.Text)
else if DataLink.DataSource.DataSet is TADOQuery then ShowMessage(TADOQuery(DataLink.DataSource.DataSet).SQL.Text);
end;


и все нормально работает, если фокус на TDBEdit, а если на каком-нибудь гриде, то DataLink := TDataLink((Sender as TControl).Perform(CM_GETDATALINK, 0, 0)); возвращает nil. В чем может быть проблема?


 
Романов Р.В. ©   (2003-02-05 14:08) [11]

var
Ds: TObject;
begin
if GetPropInfo(Sender, "DataSource") = nil then Exit;
Ds := GetObjectProp(Sender, "DataSource");
if Ds is TDataSource and Assigned(TDataSource(Ds).DataSet) then
begin
if TDataSource(Ds).DataSet is TQuery then
ShowMessage(TQuery(TDataSource(Ds).DataSet).SQL.Text)
else
ShowMessage("Связан с таблицей или с чем то другим");
end
else
ShowMessage("Нисчем не связан");

end;


 
malkolinge ©   (2003-02-05 14:26) [12]

Господа а ведь datasource Имее например и Квери с тейблом... А нас просили Контролы найти. Надо еще проверочку на наличие Тконтрола проверить. Если я вопрос понял.


 
malkolinge ©   (2003-02-05 14:27) [13]

Господа а ведь datasource Имеет например и Квери с тейблом... А нас просили Контролы найти. Надо еще проверочку на наличие Тконтрола проверить. Если я вопрос понял.


 
Vitus   (2003-02-05 15:55) [14]

Все ОК, всем спасибо!



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

Текущий архив: 2003.02.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
14-38567
vajo
2003-01-28 08:38
2003.02.13
Права доступа к папкам и файлам W2000


14-38572
Anatoly Podgoretsky
2003-01-30 07:33
2003.02.13
Именинники 30 января


1-38373
skarm
2003-02-04 10:45
2003.02.13
дата


14-38460
Dr.L.
2003-01-30 11:00
2003.02.13
Существует ли аналог Visual SourceSafe для Delphi ?


7-38599
X-jedy
2002-12-11 14:01
2003.02.13
глюки с printer.printers под Win98