![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить, что компонент is DataControl? [D5]
Vitus © (2003-02-05 11:55:00)Привет мастерам! Подскажите, можли ли по какому-либо признаку определить, что компонент является DataControl, т.е. это компонент, отображающий данные из DataSet?
Vitus (2003-02-05 15:55:00) [1]Все ОК, всем спасибо!
malkolinge (2003-02-05 14:27:00) [2]Господа а ведь datasource Имеет например и Квери с тейблом... А нас просили Контролы найти. Надо еще проверочку на наличие Тконтрола проверить. Если я вопрос понял.
malkolinge (2003-02-05 14:26:00) [3]Господа а ведь datasource Имее например и Квери с тейблом... А нас просили Контролы найти. Надо еще проверочку на наличие Тконтрола проверить. Если я вопрос понял.
Романов Р.В. (2003-02-05 14:08:00) [4]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;
Vitus (2003-02-05 14:01:00) [5]ОК, делаю так:
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. В чем может быть проблема?
icWasya (2003-02-05 13:48:00) [6]
посмотри реализацию
Unit DBCGrids;
procedure TDBCtrlGrid.UpdateDataLinks
Vitus (2003-02-05 13:30:00) [7]Проблема в том, что я не знаю, какой будет MyControl, у меня есть только Sender в FormKeyDown... Как быть?
Романов Р.В. (2003-02-05 13:05:00) [8]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("Нисчем не связан");
Anatoly Podgoretsky (2003-02-05 12:59:00) [9]А как же если не равен nil то связан и указывает на dataset
Vitus (2003-02-05 12:51:00) [10]ОК, 1-я проблема решена.
Скажите, а можно ли по этому DataSource узнать связан ли он с каким-нибудь TQuery или его потомком и если связан, то как получить SQL.Text этого Query?
Романов Р.В. (2003-02-05 12:29:00) [11]uses TypInfo;
if GetPropInfo(MyControl, "DataSource")<>nil then...
Vitus (2003-02-05 12:19:00) [12]Как это проверять?
Романов Р.В. (2003-02-05 12:17:00) [13]Можно проверить есть ли у него свойство DataSource
jack128 (2003-02-05 12:14:00) [14]наверное спорно, но может по наличию свойства DataSourse?