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

Вниз

Sender is TDB...   Найти похожие ветки 

 
Silver_   (2003-03-17 09:26) [0]

Как узнать что обьект из "семеиства" TDB т.е. предназначен для доступа к данным.

Есть ли более красивый способ ЛУЧШЕ чем проверка на имение своиства DataSource

чтоб работало например TDB...(aDBObject).DataSource:= для лубого ДБ обьекта


 
Johnmen ©   (2003-03-17 09:44) [1]

>Как узнать что обьект из "семеиства" TDB ...

Такого "семейства" нет... Предназначенность для доступа к данным вовсе не означает наличие свойства DataSource.


 
гончий   (2003-03-17 10:06) [2]

if Sender is TDataSet then
with Sender as TDataSet do
begin
//......
end;


 
myor ©   (2003-03-17 10:07) [3]

определи имя объекта sender.name, а в нем найди подстроку "tdb".
ну и задачки, однако.


 
passm ©   (2003-03-17 10:22) [4]

Вопрос сводится к:
Возможен ли перебор свойств компонента (published) с просмотром их типов? Как это делается в среде Delphi с выводом в Object Inspector.
Ответ, IMHO, надо искать в TObject.ClassInfo


 
Dred2k ©   (2003-03-17 12:09) [5]

2 passm

Все можно. Вот пример, где я иду по всем компонентам формы, ищу проперти Caption и Hint, а затем перевожу их с помощью специальной функции Lang.


procedure TFormMainDBDoctor.LangFormComponents(AForm: TForm);
var i : Integer;
tmpPropInfo: PPropInfo;
begin
with AForm do begin
Caption := Lang(Caption);
for i := 0 to ComponentCount - 1 do begin
tmpPropInfo := GetPropInfo(Components[i].ClassInfo, "Caption");
if(Assigned(tmpPropInfo)) then
SetStrProp(Components[i], tmpPropInfo, Lang(GetStrProp(Components[i], tmpPropInfo)));
tmpPropInfo := GetPropInfo(Components[i].ClassInfo, "Hint");
if(Assigned(tmpPropInfo)) then
SetStrProp(Components[i], tmpPropInfo, Lang(GetStrProp(Components[i], tmpPropInfo)));
end;
end;
end;


Копай в этом направлении...


 
Silver_   (2003-03-17 13:15) [6]

так я и сам умею

If Sender is TDBEdit then
DBNavigetor.DataSource:=TDBEdit(Sender).DataSource;
If Sender is TDBMemo then
DBNavigetor.DataSource:=TDBMemo(Sender).DataSource;
If Sender is TDBGrid then
DBNavigetor.DataSource:=TDBGrid(Sender).DataSource;
If Sender is TDBRichEdit then
DBNavigetor.DataSource:=TDBRichEdit(Sender).DataSource;
...
...

скока так продолжать

хотел чтоб выше указаный код (в бог знает скока строк)
выглядел примерно так

DBNavigetor.DataSource:=TDB...(Sender).DataSource;


> Johnmen © (17.03.03 09:44)

не нужно придираться к словам меня ведь поняли :)


 
Johnmen ©   (2003-03-17 13:19) [7]

Никаких придирок не было !


 
Silver_   (2003-03-17 13:21) [8]

на счет "семеиства" :)
ну да ладно проблема то осталась :(((


 
Johnmen ©   (2003-03-17 13:27) [9]

Было сказано, что такого "семеиства" нет, с сохранением авторского синтаксиса.
Проблема нерешаема, т.к. невозможно выделить к.-л. общие характеристики в классах DB-Aware компонент.


 
Dred2k ©   (2003-03-17 13:31) [10]

2 Silver_

Ну а чуть-чуть подумать...


uses TypInfo;

function DataSourceFromObject(Instance : TObject) : TDataSource;
var tmpPropInfo : PPropInfo;
begin
Result := nil;
tmpPropInfo := GetPropInfo(Instance.ClassInfo, "DataSource");
if(Assigned(tmpPropInfo)) then
Result := Pointer(GetOrdProp(Instance, tmpPropInfo));
end;


И мучения твои принимают вид

DBNavigetor.DataSource := DataSourceFromObject(Sender);


Вуаля, блин. ;)


 
Johnmen ©   (2003-03-17 13:40) [11]

>Dred2k © (17.03.03 13:31)

А есть уверенность, что наличие свойства DataSource необходимо и достаточно, чтобы "обьект из "семеиства" TDB " ?


 
Dred2k ©   (2003-03-17 13:43) [12]

2 Johnmen

Да никакого. Для полного кайфа надо добавить:

var tmpObject : TObject;
try
// ...
tmpObject := Pointer(GetOrdProp(Instance, tmpPropInfo));
if(tmpObject is TDataSource) then
Result := tmpObject;
except
Result := nil;
end;

И передавай хоть что, включая и объекты со свойством DataSource вообще другой природы...


 
Dred2k ©   (2003-03-17 13:48) [13]

Да, и еще перед проверкой "is" по-любому надо

if(Assigned(tmpObject)) then
// ...


Спешка ;)


 
Silver_   (2003-03-17 16:22) [14]

выглядит неплохо, пробую, спасибо


> Ну а чуть-чуть подумать...


а ты думаешь лень зря изобрели :о))



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
3-6366
RealShip
2003-03-13 15:34
2003.04.03
Помогите со свойством Filter у Table...


3-6353
Explorer
2003-03-14 09:47
2003.04.03
Oracle


6-6634
mfender
2003-02-10 22:20
2003.04.03
Как запустить удаленный скрипт php из локальной Delphi


14-6792
Мазут Береговой
2003-03-18 01:35
2003.04.03
Что такое 86 smopuim?


1-6461
cult
2003-03-24 12:09
2003.04.03
Сохранение контента RichEdit