線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:946
推到 Plurk!
推到 Facebook!

如何判断数据控件是数据感知?

尚未結案
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-13 16:54:18 IP:222.183.xxx.xxx 未訂閱
如何判断数据控件是数据感知? 我想  
procedure TFrm.TestDatasetActive;
var
 i:integer;
begin
 for i:=0 to self.ComponentCount-1 do
 begin
//怎么判段控件 具有datasource属性?
//      if self.Components[i]. is     end;
end;
 
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-14 15:30:59 IP:219.68.xxx.xxx 未訂閱
zzmbeyond01 您好 我試了一下..發現DATAACCESS的元件的父繼承類別大多是STANDARD元件盤中的元件.. 再加上DATASOURCE屬性的..沒有共同的父繼承類別..所以要得知是否具有DATASOURCE屬性.. 從Components[i]這裡..是無法以共同的父繼承類別去檢驗DATASOURECE是否為NULL..    不過我發現有DATASOURCE屬性的資料感知元件..都是位於DATAACCESS元件盤中.. 而DATAACCESS的CLASSNAME都是"TDB"開頭的 所以我想這樣也應該是一種解決方式 < class="code"> procedure TForm1.FormActivate(Sender: TObject); var i:integer; str:string; begin for i:=0 to self.ComponentCount-1 do begin if pos('TDB',self.Components[i].ClassName)>0 then str:=str+self.Components[i].ClassName+#13 end; showmessage('具有DATASOURCE的元件為:'+#13+str) end;
< >
    =程式是一種藝術 也是訓練自己的分析規劃=
=是段落分明 或是雜亂無章=
=是一言以敝 或是廢話連篇=
=是一目了然 或是艱深難懂=
體會這份藝術 您會了解另一份喜悅與成就
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-14 15:39:13 IP:61.233.xxx.xxx 未訂閱
引言: 如何判断数据控件是数据感知? 我想
procedure TFrm.TestDatasetActive;
var
 i:integer;
begin
 for i:=0 to self.ComponentCount-1 do
 begin
//怎么判段控件 具有datasource属性?
//      if self.Components[i]. is     end;
end;
 
IF SELF.Components[I].ClassTYPE=TDATASOURCE THEN ...
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-14 16:14:20 IP:219.68.xxx.xxx 未訂閱
引言: IF SELF.Components[I].ClassTYPE=TDATASOURCE THEN ...
他是問..【怎么判段控件 具有datasource属性】 【具有datasource属性】<--------不是DATASOURCE元件.. 所以您這樣寫..是不對的喔! <> <> <> < > <> < class="code"> =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就
發表人 - geniustom 於 2004/11/14 16:15:20
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-14 16:44:45 IP:61.229.xxx.xxx 未訂閱
判斷component是否有DataSource屬性的方法:
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, DB, DBClient, StdCtrls, Mask, Grids, DBGrids;    type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ClientDataSet1: TClientDataSet;
    DBNavigator1: TDBNavigator;
    Button1: TButton;
    Label1: TLabel;
    DBGrid1: TDBGrid;
    DBText1: TDBText;
    DBEdit1: TDBEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation
uses TypInfo;
{$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
  Obj:TObject;
begin
  for i:=0 to Self.ComponentCount-1 do
  begin
    try
      Obj:=GetObjectProp((Components[i] as TObject),'DataSource'); //如果這個元件有DataSource屬性,就會執行下面的程式:加入到ListBox1中,否則就會有錯誤產生
      ListBox1.Items.Add(Components[i].Name);
    except
    end;
  end;
end;    end.
記得uses TypeInfo單元 發表人 - change.jian 於 2004/11/14 16:48:14
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-14 16:53:34 IP:218.174.xxx.xxx 未訂閱
這樣判斷比較精準    uses typinfo    ...    
    procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  listbox1.Clear;
  for i:=0 to self.ComponentCount-1 do begin
    if GetPropInfo(self.components[i].ClassInfo, 'datasource') <> nil then
       listbox1.Items.Add(self.components[i].name);
  end;    end;    
GetPropInfo中第一個參數傳入 component的classinfo,第二個參數傳入要判斷是否存在的屬性字串,如果執行結果不為nil代表該component有這個屬性...
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-14 16:56:13 IP:218.174.xxx.xxx 未訂閱
阿哈 change.jian 我們真是心有靈犀一點通 我回覆傳完後 才發現您已經回覆了 重複回覆 sorry 了 不過 範例倒是寫得很接近... 抱歉了各位...
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-14 17:01:33 IP:61.229.xxx.xxx 未訂閱
呵,沒關係,這種情況我也常發生.... 常常和其他大大撞題 <>< face="Verdana, Arial, Helvetica">引言: 阿哈 change.jian 我們真是心有靈犀一點通 我回覆傳完後 才發現您已經回覆了 重複回覆 sorry 了 不過 範例倒是寫得很接近... 抱歉了各位...
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-14 17:32:15 IP:219.68.xxx.xxx 未訂閱
哈..原來還有這招可以用..小弟受教了< > 突然覺得我的方法好土炮喔..嗚嗚< >
< >
    =程式是一種藝術 也是訓練自己的分析規劃=
=是段落分明 或是雜亂無章=
=是一言以敝 或是廢話連篇=
=是一目了然 或是艱深難懂=
體會這份藝術 您會了解另一份喜悅與成就
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-14 17:56:31 IP:218.174.xxx.xxx 未訂閱
別想太多,當初,我也是這樣遭受打擊而來的 
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-14 23:47:20 IP:222.183.xxx.xxx 未訂閱
多谢各位大大热心! 小弟感谢了! 我是在开发数据库程序中,因为发现设计时候开启数据集,编译出问题的时候经常会自己close,所以我想在运行时候利用数据感知控件的datasource的datasete属性进行开启。
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-15 00:13:17 IP:222.183.xxx.xxx 未訂閱
再多问一下:  
    procedure THintInfoFrm.TestDatasetActive;
var
  i: integer;
  ds:TADODataaset;
begin
  for i := 0 to self.ComponentCount - 1 do
  begin
    //判断该控件是否具有Datasource属性 或listsource属性或 lookupsource
    if GetPropInfo(self.components[i].ClassInfo, 'DataSource') <> nil then
    begin      
//如何进行强制,获得数据感知控件的datasource属性,从而获得dataset属性(想的很罗嗦),大大们有什么高招
     <>  > ClassName = 'TDBEdit'>
系統時間:2024-11-23 12:09:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!