1.想写一个程序,用户和系统管理员登陆我的程序后,要有不同的权限,我很菜,请大虾讲讲具体的思路,越详细越好。2。在书上看过,在ClientDataSet中可以建立内存表,但具体怎么做,我不知道,请高手指教。

解决方案 »

  1.   

    //关于权限
    先建几张表,比如说:一张用户信息表(包含权限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;细致的工作留给楼主,自己研究一下,完善代码吧!
      

  2.   

    //创建内存表函数
    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);
    接下来就能使用了!
      

  3.   

    这样跟你说有关内存表:
    ClientDataset2->Dataprovider->Dataset,这样的方式你可以得到在Clientdataset里得到数据,,
    如果你再建一个ClientDataset1,那么你可以采用这样的代码
    ClientDataset1.xmlData := ClientDataset2.XmlData
    当然除了得到数据,在数据更新方面也有应用,看看帮助,
    特别是MergeChangeLog的用法,
      

  4.   

    1,创建一个系统权限表,在登陆的时候要求输入用户名和密码。在根据用户的性质区分那个按钮可见那个按钮不可见。这样就把权限问题解决了。
    2,TClientdataset的append方法可以从其它数据集中的数据加到它的本身