自动查询本窗体所有datasource所连接的dataset并Open(100分)

  • 主题发起人 主题发起人 wonken
  • 开始时间 开始时间
W

wonken

Unregistered / Unconfirmed
GUEST, unregistred user!
如何写到窗体的oncreate中?实现在datamoudle应用模式中自动查询本窗体所用到的所有datasource所连接的table或dataset并将其全部打开?
 
在窗体创建时oncreate写:
for i:=0 to self.ComponentCount-1do
if self.Components is tdatasource then
tdatasource(self.Components).dataset.open;
 
谢谢PDB,不过我不是指目前窗体上的DATASOURCE,而是指所有用到DATASOURCE的组件,如DBLOOKUP、Combo等,我想扫描当前窗体,将所有组件用到的DataSource相关连的远程DataModule中的DataSet打开。
 
//轮到我出手了,^_^
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
v : Variant;
D : Integer;
DataSource : TDataSource;
begin
for I := 0 to ComponentCount-1do
begin
v :=GetPropValue(Components,'DataSource');//检索组件有没有datasource属性
if (not VarIsEmpty(V)) and (not VarIsNull(V)) then
begin
D := v;
Integer(DataSource) := D;
DataSource.DataSet.Open ;
end;
end;
end;
 
哦,学习学习。
另外很奇怪楼主为什么要这样做呢?
 
再次谢谢两位,我刚才已经调试成功。不过是做到OnActive事件中,OnCreate中没有试,想想组件都没创建完毕,可能会不行。RealLearning兄的方法中没有判断组件是否有DataSource属性,所以会出错。修改代码如下:
procedure TMDIChild.FormActivate(Sender: TObject);
var
I : Integer;
v : Variant;
PropInfo:PPropInfo;
D : Integer;
DataSource : TDataSource;
begin
for I := 0 to ComponentCount-1do
begin
PropInfo :=GetPropInfo(Components,'DataSource');
if PropInfo<>nil then
begin
v :=GetPropValue(Components,'DataSource');
if (not VarIsEmpty(V)) and (not VarIsNull(V)) then
begin
D := v;
Integer(DataSource) := D;
DataSource.DataSet.Active := True;
DataSource.DataSet.Open;
ShowMessage('OneDataset');
self.Refresh ;
end;
end;

end;
end;
 
后退
顶部