//关于权限 先建几张表,比如说:一张用户信息表(包含权限ID),一张权限表(就是如管理员,普通用户之类的),一张菜单表,一张权限和菜单关系表。 权限表和菜单表有两个字段分别为(ID,Name)。 然后在Form的菜单中每个菜单都设一个tag值,把tag值对应到表里的菜单ID上,菜单项再关联到ActionList上(或者也可以直接设置Action的Tag)。再给个示例: procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=0 to ComponentCount-1 do begin if Components[i] is TMenuItem then if pos('-' + IntToStr(Components[i].Tag) + '-', s) > 0 then TMenuItem(Components[i]).Visible := True; end;细致的工作留给楼主,自己研究一下,完善代码吧!
//创建内存表函数 function TfrmNewItem.CreateTableInMemory(const AFieldDefs: TFieldDefs): TDataSet; var tmpTable: TClientDataSet; begin tmpTable := nil; Result := nil; if AFieldDefs <> nil then begin try tmpTable := TClientDataSet.Create(nil); tmpTable.FieldDefs.Assign(AFieldDefs); tmpTable.CreateDataSet; Result := (tmpTable as TDataSet); except if tmpTable <> nil then FreeAndNil(tmpTable); Result := nil; Raise; end; end; end;使用时先创建一个DataSet来定义字段类型,然后作为参数传给上述函数。 ADataSet := TDataSet.Create(nil); with ADataSet.FieldDefs do begin Add('aaa', ftString, 30); Add('bbb', ftString, 100); Add('ccc', ftString, 20); Add('ddd', ftString, 100); Add('eee', ftString, 100); Add('fff', ftString, 100); Add('ggg', ftString, 100); end; DataSource1.DataSet := CreateTableInMemory(ADataSet.FieldDefs); 接下来就能使用了!
先建几张表,比如说:一张用户信息表(包含权限ID),一张权限表(就是如管理员,普通用户之类的),一张菜单表,一张权限和菜单关系表。
权限表和菜单表有两个字段分别为(ID,Name)。
然后在Form的菜单中每个菜单都设一个tag值,把tag值对应到表里的菜单ID上,菜单项再关联到ActionList上(或者也可以直接设置Action的Tag)。再给个示例:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=0 to ComponentCount-1 do
begin
if Components[i] is TMenuItem then
if pos('-' + IntToStr(Components[i].Tag) + '-', s) > 0 then
TMenuItem(Components[i]).Visible := True;
end;细致的工作留给楼主,自己研究一下,完善代码吧!
function TfrmNewItem.CreateTableInMemory(const AFieldDefs: TFieldDefs): TDataSet;
var tmpTable: TClientDataSet;
begin
tmpTable := nil;
Result := nil;
if AFieldDefs <> nil then
begin
try
tmpTable := TClientDataSet.Create(nil);
tmpTable.FieldDefs.Assign(AFieldDefs);
tmpTable.CreateDataSet;
Result := (tmpTable as TDataSet);
except
if tmpTable <> nil then FreeAndNil(tmpTable);
Result := nil;
Raise;
end;
end;
end;使用时先创建一个DataSet来定义字段类型,然后作为参数传给上述函数。
ADataSet := TDataSet.Create(nil);
with ADataSet.FieldDefs do
begin
Add('aaa', ftString, 30);
Add('bbb', ftString, 100);
Add('ccc', ftString, 20);
Add('ddd', ftString, 100);
Add('eee', ftString, 100);
Add('fff', ftString, 100);
Add('ggg', ftString, 100);
end;
DataSource1.DataSet := CreateTableInMemory(ADataSet.FieldDefs);
接下来就能使用了!
ClientDataset2->Dataprovider->Dataset,这样的方式你可以得到在Clientdataset里得到数据,,
如果你再建一个ClientDataset1,那么你可以采用这样的代码
ClientDataset1.xmlData := ClientDataset2.XmlData
当然除了得到数据,在数据更新方面也有应用,看看帮助,
特别是MergeChangeLog的用法,
2,TClientdataset的append方法可以从其它数据集中的数据加到它的本身