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

📄 localdbtreeview.pas

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

interface

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

type
  TLocalDbTreeView = class(TTreeView)
  private
    FClassCodeFieldName:string; //级别字段
    //FClassCodeFieldName:string; //编码字段
    FClassStep:integer;
    FClassNameFieldName:string; //级别名称字段
    FClassEndFieldName:string;  //末级字段(boolean)
    FLocalDataSet:TAdoQuery;
    class_list:Tstringlist;
    class_listcode:Tstringlist;
    FTableName:string;
    FSelectedDataSet:TAdoQuery;
    FClassEndFieldValue:string;  //末级字段value(boolean)
    Fclasseditform:TClassEdit_form;
    FOtherMarkValue:string;
    FOtherMarkField:string;
    FOtherMarkSign:string;
    procedure setclasscode(value:string);
    procedure setclassname(value:string);
    procedure setclassstep(value:integer);
    procedure setclassend(value:string);
    procedure setclassendv(value:string);
    procedure setdataset(Value:TAdoquery);
    procedure setselecteddataset(Value:Tadoquery);
    procedure settablename(value:string);
    procedure setothermarkvalue(value:string);
    procedure setothermarkField(value:string);
    procedure setothermarkSign(value:string);
    //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 ClassFieldName:string read FClassCodeFieldName write setclass;
    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 LocalDataSet:TAdoQuery read FLocalDataSet write setdataset;
    property SelectedDataSet:Tadoquery read FSelectedDataSet write setselecteddataset;
    property TableName:string read FTableName write settablename;
    property OtherMarkValue:string read FOtherMarkValue write setothermarkvalue;
    property OtherMarkField:string read FOtherMarkField write setothermarkfield;
    property OtherMarkSign:string read FOtherMarkSign write setothermarksign;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('DbAnyWhere', [TLocalDbTreeView]);
end;
constructor TLocalDbTreeView.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:='true';
  Fclasseditform:=TClassEdit_form.Create(nil);
  FOtherMarkValue:='';
  FOtherMarkField:='';
  FOtherMarkSign:='=';
end;
destructor TLocalDbTreeView.Destroy;
begin
  inherited Destroy;
  freeandnil(class_list);
  freeandnil(class_listcode);
  freeandnil(Fclasseditform);
end;
{procedure TLocalDbTreeView.setclass(value:string);
begin
  FClassCodeFieldName:=value;
end; }
procedure TLocalDbTreeView.setclasscode(value:string);
begin
  FClassCodeFieldName:=value;
end;
procedure TLocalDbTreeView.setclassname(value:string);
begin
  FClassNameFieldName:=value;
end;
procedure TLocalDbTreeView.setclassstep(value:integer);
begin
  FClassStep:=value;
end;
procedure TLocalDbTreeView.setclassendv(value:string);
begin
  FClassEndFieldValue:=value;
end;
procedure TLocalDbTreeView.setclassend(value:string);
begin
  FClassEndFieldName:=value;
end;
procedure TLocalDbTreeView.setdataset(Value:TADOQuery);
begin
  FLocalDataSet:=value;
end;
procedure TLocalDbTreeView.setselecteddataset(Value:TADOQuery);
begin
  FSelectedDataSet:=value;
end;
procedure TLocalDbTreeView.settablename(value:string);
begin
  FTableName:=value;
end;
//其他区分标志,比如目录树所属部门等
procedure TLocalDbTreeView.setothermarkvalue(value:string);
begin
  FOtherMarkValue:=value;
end;
procedure TLocalDbTreeView.setothermarkfield(value:string);
begin
  FOtherMarkField:=value;
end;
procedure TLocalDbTreeView.setothermarksign(value:string);
begin
  FOtherMarkSign:=value;
end;
procedure TLocalDbTreeView.AddClass;
var
   max_code:string;
   new_code:string;
   temp_str:string;
   classname:string;
   //classcode:string;
begin
  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;
    //classcode:=fclasseditform.Edit3.Text;
  end else exit;
  //判断
  if length(trim(classname))=0 then
  begin
    showmessage('名称不能够为空!');
    exit;
  end;
  {if length(trim(classcode))=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.FLocalDataSet.Close;
    self.FLocalDataSet.SQL.Text:='insert into '+FTableName+'('+FClassCodeFieldName+','+
                                    FClassEndFieldName+','+FClassNameFieldName+') values('+
                                    ''''+new_code+''','+
                                    temp_str+','+
                                    ''''+classname+''')';  
    self.FLocalDataSet.ExecSQL;
    if length(trim(classname))>0 then
    begin
      self.Items.AddChild(self.Selected,classname);
      self.Items[0].ImageIndex:=0;
      self.Items[0].SelectedIndex:=0;
      self.Focused;
      self.Repaint;
    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],4);
    new_code:=class_listcode.strings[self.Selected.AbsoluteIndex]+
              stringofchar('0',self.FClassStep-length(inttostr(strtoint(max_code)+1)))+
              inttostr(strtoint(max_code)+1);
    //存在下级都可以增加
    self.FLocalDataSet.Close;
    self.FLocalDataSet.SQL.Text:='insert into '+FTableName+'('+FClassCodeFieldName+','+
                                    FClassEndFieldName+','+FClassNameFieldName+') values('+
                                    ''''+new_code+''','+
                                    temp_str+','+
                                    ''''+classname+''')';
    self.FLocalDataSet.ExecSQL;
    if length(trim(classname))>0 then
    begin
      self.Items[self.Selected.AbsoluteIndex].ImageIndex:=1;
      self.Items[self.Selected.AbsoluteIndex].SelectedIndex:=1;
      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.FLocalDataSet.Close;
    self.FLocalDataSet.SQL.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.FLocalDataSet.Open;
    if self.FLocalDataSet.RecordCount=0 then
    begin
      self.FLocalDataSet.Close;
      self.FLocalDataSet.SQL.Text:='insert into '+FTableName+'('+FClassCodeFieldName+','+
                                    FClassEndFieldName+','+FClassNameFieldName+') values('+

⌨️ 快捷键说明

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