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

Вниз

Как определить, что компонент 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
1-38161
Andrey V.
2003-01-29 12:01
2003.02.13
ToolButton & PopupMenu


14-38472
michael_b
2003-01-30 20:21
2003.02.13
Проблема с рекурсией


3-38120
VFP
2003-01-28 11:44
2003.02.13
Перехват системного сообщение об ошибке


1-38274
Тип
2003-02-05 12:40
2003.02.13
Tree.AddChildObject имеет параметр Ptr, как освободить память?


7-38615
devol
2002-12-07 16:40
2003.02.13
UPS





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский