⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remotedbtreeview.pas

📁 p2pdbanywhere 可以通过之udp方式远程连接数据库的组件,这个组件非常好,是Delphi7,9,2006能够使用,包含源码.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit RemoteDbTreeView;

interface

uses
  SysUtils, Classes, Controls, ComCtrls,DB, DBClient, remotedataset,
  ImgList,StrUtils,dialogs,classedit;

type
  TRemoteDbTreeView = class(TTreeView)
  private
    FClassCodeFieldName:string; //级别字段
    FClassStep:integer;
    FClassNameFieldName:string; //级别名称字段
    FClassEndFieldName:string;  //末级字段(boolean)
    FRemoteDataSet:TRemoteDataSet;
    class_list:Tstringlist;
    class_listcode:Tstringlist;
    FTableName:string;
    FSelectedDataSet:TRemoteDataSet;
    FClassEndFieldValue:string;  //末级字段值(boolean)
    FSynDataBase:boolean;
    Fclasseditform:TClassEdit_form;
    FOtherMarkValue:string;
    FOtherMarkField:string;
    FOtherMarkSign:string;
    FSelectFields:Tstrings;
    procedure setclasscode(value:string);
    procedure setclassname(value:string);
    procedure setclassstep(value:integer);
    procedure setclassend(value:string);
    procedure setclassendv(value:string);
    procedure setdataset(Value:TRemoteDataSet);
    procedure setselecteddataset(Value:TRemoteDataSet);
    procedure settablename(value:string);
    procedure setsyn(value:boolean);
    procedure setothermarkvalue(value:string);
    procedure setothermarkField(value:string);
    procedure setothermarkSign(value:string);
    procedure setselectfields(value:Tstrings);
    //procedure OnChange(Sender: TObject; Node: TTreeNode);
    { Private declarations }
  protected
    { Protected declarations }
  public
    function GetSelectedClassCode:string;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure AddClass;
    procedure EditClass;
    procedure DeleteClass;
    procedure ShowClassTree;
    procedure ShowSelectDb;
    { Public declarations }
  published
    property ClassCodeFieldName:string read FClassCodeFieldName write setclasscode;
    property ClassNameFieldName:string read FClassNameFieldName write setclassname;
    property ClassEndFieldName:string read FClassEndFieldName write setclassend;
    property ClassEndFieldValue:string read FClassEndFieldValue write setclassendv;
    property ClassStep:integer read FClassStep write setclassstep;
    property RemoteDataSet:TRemoteDataSet read FRemoteDataSet write setdataset;
    property SelectedDataSet:TRemoteDataSet read FSelectedDataSet write setselecteddataset;
    property TableName:string read FTableName write settablename;
    property SynDatabase:boolean read FSynDataBase write setsyn;
    property OtherMarkValue:string read FOtherMarkValue write setothermarkvalue;
    property OtherMarkField:string read FOtherMarkField write setothermarkfield;
    property OtherMarkSign:string read FOtherMarkSign write setothermarksign;
    property SelectFields:Tstrings read FSelectFields write setselectfields;
    { Published declarations }
  end;

procedure Register;

implementation
procedure Register;
begin
  RegisterComponents('DbAnyWhere', [TRemoteDbTreeView]);
end;
constructor TRemoteDbTreeView.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  class_list:=Tstringlist.Create;
  class_listcode:=Tstringlist.Create;
  self.HideSelection:=false;
  self.ReadOnly:=true;
  self.FClassStep:=4;
  self.FClassEndFieldValue:='1';
  FSynDataBase:=false;
  Fclasseditform:=TClassEdit_form.Create(nil);
  FOtherMarkValue:='';
  FOtherMarkField:='';
  FOtherMarkSign:='=';
  FSelectFields:=Tstringlist.Create;
end;
destructor TRemoteDbTreeView.Destroy;
begin
  inherited Destroy;
  freeandnil(class_list);
  freeandnil(class_listcode);
  freeandnil(Fclasseditform);
  freeandnil(Fselectfields);
end;
procedure TRemoteDbTreeView.setclasscode(value:string);
begin
  FClassCodeFieldName:=value;
end;
procedure TRemoteDbTreeView.setclassname(value:string);
begin
  FClassNameFieldName:=value;
end;
procedure TRemoteDbTreeView.setclassstep(value:integer);
begin
  FClassStep:=value;
end;
procedure TRemoteDbTreeView.setselectfields(value:Tstrings);
begin
  FSelectFields.Assign(value);
end;
procedure TRemoteDbTreeView.setclassend(value:string);
begin
  FClassEndFieldName:=value;
end;
procedure TRemoteDbTreeView.setclassendv(value:string);
begin
  FClassEndFieldValue:=value;
end;
procedure TRemoteDbTreeView.setsyn(value:boolean);
begin
  FSynDataBase:=value;
end;
procedure TRemoteDbTreeView.setdataset(Value:TRemoteDataSet);
begin
  FRemoteDataSet:=value;
end;
procedure TRemoteDbTreeView.setselecteddataset(Value:TRemoteDataSet);
begin
  FSelectedDataSet:=value;
end;
procedure TRemoteDbTreeView.settablename(value:string);
begin
  FTableName:=value;
end;
//其他区分标志,比如目录树所属部门等
procedure TRemoteDbTreeView.setothermarkvalue(value:string);
begin
  FOtherMarkValue:=value;
end;
procedure TRemoteDbTreeView.setothermarkfield(value:string);
begin
  FOtherMarkField:=value;
end;
procedure TRemoteDbTreeView.setothermarksign(value:string);
begin
  FOtherMarkSign:=value;
end;
procedure TRemoteDbTreeView.AddClass;
var
   max_code:string;
   new_code:string;
   temp_str:string;
   classname:string;
begin
  if length(trim(FothermarkField))<>0 then
  begin
    if length(trim(FOtherMarkValue))=0 then
    begin
      Showmessage('OtherMarkValue属性不能够为空!');
      exit;
    end;
  end;
  fclasseditform.Label1.Caption:='所属栏目名称';
  fclasseditform.Label2.Caption:='新建栏目名称';
  if self.Items.Count>0 then
    fclasseditform.Edit1.Text:=self.Selected.Text
  else
    fclasseditform.Edit1.Text:='增加栏目头';
  fclasseditform.Edit2.Text:='';
  fclasseditform.ShowModal;
  if fclasseditform.IfEdit then
  begin
    classname:=fclasseditform.Edit2.Text;
  end else exit;
  //判断
  if length(trim(classname))=0 then
  begin
    showmessage('名称不能够为空!');
    exit;
  end;
  //开始没有任何栏目的时候呢?
  if FClassEndFieldValue='1' then temp_str:='0';
  if FClassEndFieldValue='true' then temp_str:='false';
  //判断有无被选中的
  if self.Items.Count=0 then
  begin
    new_code:=stringofchar('0',self.FClassStep-1)+'1';
    self.FRemoteDataSet.Remoteclose;
    self.FRemoteDataSet.RTSQL.Text:='';
    self.FRemoteDataSet.RTSQL.Add('insert into '+FTableName+'('+FClassCodeFieldName+','+
                                    FClassEndFieldName+','+FClassNameFieldName+') values('+
                                    ''''+new_code+''','+
                                    temp_str+','+
                                    ''''+classname+''')');
    if length(trim(self.FOtherMarkField))>0 then
    begin
      self.FRemoteDataSet.RTSQL.Text:='';
      self.FRemoteDataSet.RTSQL.Add('insert into '+FTableName+'('+FClassCodeFieldName+','+
                                      FClassEndFieldName+','+FClassNameFieldName+
                                      ','+FOtherMarkField
                                      +') values('+
                                      ''''+new_code+''','+
                                      temp_str+','+
                                      ''''+classname+''','''+
                                      FOtherMarkValue+''')');
    end;

    if self.FSynDataBase then
    begin
      if length(trim(self.FOtherMarkField))=0 then
         self.FRemoteDataSet.RTSQL.Add('update '+FTableName+' set change_mark='+
                                       '(select max(change_mark) from '+FTableName
                                       +')+1 where '+FClassCodeFieldName+'='''+new_code+
                                       ''' and '+FClassEndFieldName+'='+temp_str+
                                       ' and delete_mark='+temp_str)
      else
         self.FRemoteDataSet.RTSQL.Add('update '+FTableName+' set change_mark='+
                                       '(select max(change_mark) from '+FTableName
                                       +')+1 where '+FClassCodeFieldName+'='''+new_code+
                                       ''' and '+FClassEndFieldName+'='+temp_str+
                                       ' and '+self.FOtherMarkField+self.FOtherMarkSign+''''+
                                       self.FOtherMarkValue+''' and delete_mark='+temp_str);
   end;
    //showmessage(self.FRemoteDataSet.RTSQL.Text);
    self.FRemoteDataSet.RemoteExeSQL;
    if length(trim(classname))>0 then
    begin
      if self.FRemoteDataSet.success then self.Items.AddChild(nil,classname);
      self.Items[0].ImageIndex:=0;
      self.Items[0].SelectedIndex:=0;
      self.Focused;
      self.Repaint;
      //self.SetFocus;
    end;
    //维护class_listcode列表
    class_listcode.Add(new_code);
    class_listcode.Sort;
    exit;
  end;
  if self.Selected.HasChildren then
  begin
    max_code:=rightstr(class_listcode.strings[self.Selected.GetLastChild.AbsoluteIndex],self.FClassStep);
    new_code:=class_listcode.strings[self.Selected.AbsoluteIndex]+
              stringofchar('0',self.FClassStep-length(inttostr(strtoint(max_code)+1)))+
              inttostr(strtoint(max_code)+1);
    //存在下级都可以增加
    self.FRemoteDataSet.Remoteclose;
    self.FRemoteDataSet.RTSQL.Text:='';
    self.FRemoteDataSet.RTSQL.Add('insert into '+FTableName+'('+FClassCodeFieldName+','+
                                    FClassEndFieldName+','+FClassNameFieldName+') values('+
                                    ''''+new_code+''','+
                                    temp_str+','+
                                    ''''+classname+''')');
    if length(trim(self.FOtherMarkField))>0 then
    begin
      self.FRemoteDataSet.RTSQL.Text:='';
      self.FRemoteDataSet.RTSQL.Add('insert into '+FTableName+'('+FClassCodeFieldName+','+
                                      FClassEndFieldName+','+FClassNameFieldName+
                                      ','+FOtherMarkField+
                                      ') values('+
                                      ''''+new_code+''','+
                                      temp_str+','+
                                      ''''+classname+''','''+
                                      FOtherMarkValue+''')');
    end;
    if self.FSynDataBase then
    begin
      if length(trim(self.FOtherMarkField))>0 then
        self.FRemoteDataSet.RTSQL.Add('update '+FTableName+' set change_mark='+
                                     '(select max(change_mark) from '+FTableName
                                     +')+1 where '+FClassCodeFieldName+'='''+new_code+
                                     ''' and '+FClassEndFieldName+'='+temp_str+
                                     ' and '+self.FOtherMarkField+self.FOtherMarkSign+''''+
                                     self.FOtherMarkValue+''' and delete_mark='+temp_str)
      else
        self.FRemoteDataSet.RTSQL.Add('update '+FTableName+' set change_mark='+
                                     '(select max(change_mark) from '+FTableName
                                     +')+1 where '+FClassCodeFieldName+'='''+new_code+
                                     ''' and '+FClassEndFieldName+'='+temp_str+
                                     ' and delete_mark='+temp_str);
   end;
    //showmessage(self.FRemoteDataSet.RTSQL.Text);
    self.FRemoteDataSet.RemoteExeSQL;
    if length(trim(classname))>0 then
    begin
      self.Items[self.Selected.AbsoluteIndex].ImageIndex:=1;
      self.Items[self.Selected.AbsoluteIndex].SelectedIndex:=1;
      if self.FRemoteDataSet.success then self.Items.AddChild(self.Selected,classname);
      self.Items[self.Selected.GetLastChild.AbsoluteIndex].ImageIndex:=2;
      self.Items[self.Selected.GetLastChild.AbsoluteIndex].SelectedIndex:=3;
    end;
    //维护class_listcode列表
    class_listcode.Add(new_code);
    class_listcode.Sort;
  end else
  begin
    new_code:=class_listcode.strings[self.Selected.AbsoluteIndex]+stringofchar('0',FClassStep-1)+'1';
    //判断非末级类别的增加有无详细信息,有则不允许增加
    self.FRemoteDataSet.Remoteclose;
    if length(trim(self.FOtherMarkField))>0 then
       self.FRemoteDataSet.RTSQL.Text:='select * from '+FTableName+' where left('+FClassCodeFieldName+','+
                    inttostr(length(class_listcode.Strings[self.Selected.AbsoluteIndex]))+
                    ')='''+class_listcode.Strings[self.Selected.AbsoluteIndex]+''''+
                    ' and '+FClassEndFieldName+'='+FClassEndFieldvalue +
                    ' and '+self.FOtherMarkField+self.FOtherMarkSign+''''+self.FOtherMarkValue+''''
    else
       self.FRemoteDataSet.RTSQL.Text:='select * from '+FTableName+' where left('+FClassCodeFieldName+','+
                    inttostr(length(class_listcode.Strings[self.Selected.AbsoluteIndex]))+
                    ')='''+class_listcode.Strings[self.Selected.AbsoluteIndex]+''''+
                    ' and '+FClassEndFieldName+'='+FClassEndFieldvalue;
    self.FRemoteDataSet.RemoteOpen;
    if self.FRemoteDataSet.RecordCount=0 then
    begin
      if length(trim(self.FOtherMarkField))>0 then
      begin
        self.FRemoteDataSet.RTSQL.Add('insert into '+FTableName+'('+FClassCodeFieldName+','+
                                        FClassEndFieldName+','+FClassNameFieldName+
                                        ','+FOtherMarkField
                                        +') values('+
                                        ''''+new_code+''','+
                                        temp_str+','+
                                        ''''+classname+''','''+
                                        FOtherMarkValue+''')');
      end else
        self.FRemoteDataSet.RTSQL.Add('insert into '+FTableName+'('+FClassCodeFieldName+','+
                                      FClassEndFieldName+','+FClassNameFieldName+') values('+
                                      ''''+new_code+''','+
                                      temp_str+','+
                                      ''''+classname+''')');

      if self.FSynDataBase then
      begin
        if FClassEndFieldValue='1' then temp_str:='0';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -