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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
3-6390
spogi
2003-03-14 14:24
2003.04.03
QRExpr v QReport


14-6687
NetBreaker666
2003-03-18 19:11
2003.04.03
Кстати, нафига нужны компоненты IntraWeb.


3-6414
mib431
2003-03-15 13:11
2003.04.03
Как запихнуть таблицу в exe-шник?


3-6296
Sergei
2003-03-16 15:42
2003.04.03
ADOQery.ExeSQL ----- > EXception ????


14-6771
RelakS
2003-03-16 19:33
2003.04.03
Как уменьшить размер ехе-файла





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