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

📄 remotedbtreeview.pas

📁 p2pdbanywhere 可以通过之udp方式远程连接数据库的组件,这个组件非常好,是Delphi7,9,2006能够使用,包含源码.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
        if FClassEndFieldValue='true' then temp_str:='false';
        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;
      self.FRemoteDataSet.RemoteExeSQL;
      if length(trim(classname))>0 then
      begin
        if self.Selected.AbsoluteIndex>0 then
        begin
          self.Items[self.Selected.AbsoluteIndex].ImageIndex:=1;
          self.Items[self.Selected.AbsoluteIndex].SelectedIndex:=1;
        end;
        if self.FRemoteDataSet.success then self.Items.AddChild(self.Selected,classname);
        self.Items[self.Selected.AbsoluteIndex+self.Selected.Count].ImageIndex:=2;
        self.Items[self.Selected.AbsoluteIndex+self.Selected.count].SelectedIndex:=3;
      end;
      //维护class_listcode列表
      class_listcode.Add(new_code);
      class_listcode.Sort;
    end else
    begin
      showmessage('已经存在资料信息,不允许增加下级栏目!');
    end;
  end;
end;
procedure TRemoteDbTreeView.EditClass;
var
   cur_class:string;
   temp_str:string;
   NewClassName: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:='新的栏目名称';
  fclasseditform.Edit1.Text:=self.Selected.Text;
  fclasseditform.Edit2.Text:=self.Selected.Text;
  fclasseditform.ShowModal;
  if fclasseditform.IfEdit then
  begin
    newclassname:=fclasseditform.Edit2.Text;
  end else exit;
  //判断
  if length(trim(newclassname))=0 then
  begin
    showmessage('名称不能够为空!');
    exit;
  end;
  if self.Items.Count=0 then
  begin
    showmessage('没有任何栏目信息可以修改!');
    exit;
  end;
  //不允许排序
  self.SortType:=stnone;
  cur_class:=class_listcode.Strings[self.Selected.AbsoluteIndex];
  //修改数据库
  self.FRemoteDataSet.Remoteclose;
  self.FRemoteDataSet.RTSQL.Text:='';
  if FClassEndFieldValue='1' then temp_str:='0';
  if FClassEndFieldValue='true' then temp_str:='false';
  if length(trim(self.FOtherMarkField))=0 then
    self.FRemoteDataSet.RTSQL.Add('update '+FTableName+' set '+FClassNameFieldName+'='''+
                   newclassname+''' where '+FClassCodeFieldName+'='''+
                   cur_class+''' and '+FClassEndFieldName+'='+temp_str+' and delete_mark='+temp_str)
  else
    self.FRemoteDataSet.RTSQL.Add('update '+FTableName+' set '+FClassNameFieldName+'='''+
                   newclassname+''' where '+FClassCodeFieldName+'='''+
                   cur_class+''' and '+FClassEndFieldName+'='+temp_str+
                                     ' and '+self.FOtherMarkField+self.FOtherMarkSign+''''+
                                     self.FOtherMarkValue+''' and delete_mark='+temp_str);

  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+'='''+cur_class+
                                    ''' 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+'='''+cur_class+
                                    ''' and '+FClassEndFieldName+'='+temp_str+
                                    ' and '+self.FOtherMarkField+self.FOtherMarkSign+''''+
                                    self.FOtherMarkValue+''' and delete_mark='+temp_str);
  end;
  self.FRemoteDataSet.RemoteExeSQL;
  if self.FRemoteDataSet.success then
  begin
    //修改树
    self.Items[self.Selected.AbsoluteIndex].Text:=newclassname;
  end;
end;
procedure TRemoteDbTreeView.DeleteClass;
var
   cur_index,i:integer;
   cur_class:string;
   temp_str:string;
begin
  if self.Items.Count=0 then
  begin
    showmessage('没有任何栏目信息可以删除!');
    exit;
  end;
  if length(trim(FothermarkField))<>0 then
  begin
    if length(trim(FOtherMarkValue))=0 then
    begin
      Showmessage('OtherMarkValue属性不能够为空!');
      exit;
    end;
  end;
  cur_index:=self.Selected.AbsoluteIndex;
  cur_class:=class_listcode.Strings[self.Selected.AbsoluteIndex];
  //判断有无详细信息,有则不允许删除
  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
  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+' and '+
                    self.FOtherMarkField+self.FOtherMarkSign+''''+self.FOtherMarkValue+'''';
  self.FRemoteDataSet.RemoteOpen;
  if self.FRemoteDataSet.RecordCount=0 then
  begin
    self.FRemoteDataSet.Remoteclose;
    if length(trim(self.FOtherMarkField))>0 then
      self.FRemoteDataSet.RTSQL.Text:='delete from '+FTableName+' where left('+FClassCodeFieldName+','+
                  inttostr(length(class_listcode.Strings[self.Selected.AbsoluteIndex]))+
                  ')='''+class_listcode.Strings[self.Selected.AbsoluteIndex]+''' and '+
                  self.FOtherMarkField+'='''+self.FOtherMarkValue+''''
    else
      self.FRemoteDataSet.RTSQL.Text:='delete from '+FTableName+' where left('+FClassCodeFieldName+','+
                  inttostr(length(class_listcode.Strings[self.Selected.AbsoluteIndex]))+
                  ')='''+class_listcode.Strings[self.Selected.AbsoluteIndex]+'''';
    if self.FSynDataBase then
    begin
      if FClassEndFieldValue='1' then temp_str:='0';
      if FClassEndFieldValue='true' then temp_str:='false';
      if not self.Selected.HasChildren then
      begin
        if length(trim(self.FOtherMarkField))=0 then
          self.FRemoteDataSet.RTSQL.Text:='update '+FTableName+' set change_mark='+
                                  '(select max(change_mark) from '+FTableName
                                  +')+1,delete_mark='+FClassEndFieldValue
                                  +' where '+FClassCodeFieldName+'='''+cur_class+
                                  ''' and '+FClassEndFieldName+'='+temp_str+' and delete_mark='+temp_str
        else
          self.FRemoteDataSet.RTSQL.Text:='update '+FTableName+' set change_mark='+
                                  '(select max(change_mark) from '+FTableName
                                  +')+1,delete_mark='+FClassEndFieldValue
                                  +' where '+FClassCodeFieldName+'='''+cur_class+
                                  ''' and '+FClassEndFieldName+'='+temp_str+
                                    ' and '+self.FOtherMarkField+self.FOtherMarkSign+''''+
                                    self.FOtherMarkValue+''' and delete_mark='+temp_str;
      end
      else
      begin
        showmessage('请先删除下级所有栏目!');
        exit;
      end;
    end;
    self.FRemoteDataSet.RemoteExeSQL;
    if self.FRemoteDataSet.success then self.Items.Delete(self.Selected);
    if self.Items.Count>0 then
    begin
      if self.Selected.HasChildren then
      begin
        self.Items[self.Selected.AbsoluteIndex].ImageIndex:=1;
        self.Items[self.Selected.AbsoluteIndex].SelectedIndex:=1;
      end else
      begin
        self.Items[self.Selected.AbsoluteIndex].ImageIndex:=2;
        self.Items[self.Selected.AbsoluteIndex].SelectedIndex:=3;
      end;
    end;
    //维护class_listcode列表
    for i:=class_listcode.Count-1 downto cur_index do
    begin
      if leftstr(class_listcode.Strings[i],length(cur_class))=cur_class then
      class_listcode.Delete(i);
    end;
    class_listcode.Sort;
  end else showmessage('存在资料信息,不允许删除本级栏目!');
end;
function TRemoteDbTreeView.GetSelectedClassCode:string;
begin
  if self.Items.Count=0 then
  begin
    result:='';
    exit;
  end;
  result:=class_listcode.Strings[self.Selected.AbsoluteIndex];
end;
procedure TRemoteDbTreeView.ShowClassTree;
var
  class_stream:tstringstream;
  cur_class:integer;
  first_class:integer;
  tab_str:string;
  i:integer ;
  temp_str:string;
begin
  if length(trim(FothermarkField))<>0 then
  begin
    if length(trim(FOtherMarkValue))=0 then
    begin
      Showmessage('OtherMarkValue属性不能够为空!');
      exit;
    end;
    if length(trim(FOtherMarkSign))=0 then
    begin
      Showmessage('OtherMarkSign属性不能够为空!');
      exit;
    end;
  end;
  class_list.Text:='';
  class_listcode.Text:='';
  if FClassEndFieldValue='1' then temp_str:='0';
  if FClassEndFieldValue='true' then temp_str:='false';
  self.FRemoteDataSet.Remoteclose;
  if length(trim(self.FOtherMarkField))=0 then
    self.FRemoteDataSet.RTSQL.Text:='select top 100000000 * from '+FTableName+' where '+
                                    FClassEndFieldName+'='+temp_str+' and delete_mark='+temp_str+
                                    ' order by '+FClassCodeFieldName
  else
    self.FRemoteDataSet.RTSQL.Text:='select top 100000000 * from '+FTableName+' where '+
                                    FClassEndFieldName+'='+temp_str+' and delete_mark='+temp_str+
                                    ' and ('+self.FOtherMarkField+self.FOtherMarkSign+''''+
                                    self.FOtherMarkValue+''''+
                                    ' or '+self.FOtherMarkField+' is null)'+
                                    ' order by '+FClassCodeFieldName;
  self.FRemoteDataSet.RemoteOpen;
  if self.FRemoteDataSet.RecordCount=0 then exit;
  first_class:=trunc(length(trim(self.FRemoteDataSet.FieldValues[FClassCodeFieldName]))/FClassStep);
  while not self.FRemoteDataSet.Eof do
  begin
    cur_class:=trunc(length(trim(self.FRemoteDataSet.FieldValues[FClassCodeFieldName]))/FClassStep)-first_class+1;
    tab_str:='';
    for i:=1 to cur_class-1 do
    begin
      tab_str:=tab_str+chr(9);
    end;
    class_list.Add(tab_str+self.FRemoteDataSet.fieldbyname(FClassNameFieldName).AsString);
    class_listcode.Add(self.FRemoteDataSet.fieldbyname(FClassCodeFieldName).AsString);
    self.FRemoteDataSet.Next;
  end;
  class_stream:=Tstringstream.Create(class_list.Text);
  self.LoadFromStream(class_stream);
  for i:=0 to self.Items.Count-1 do
  begin
    if i=0 then
    begin
       self.Items[0].imageIndex:=0;
       self.Items[0].SelectedIndex:=0;
       self.Items[0].Expand(true);
    end else
    begin
      if self.Items[i].HasChildren then
      begin
        self.Items[i].imageIndex:=1;
        self.Items[i].SelectedIndex:=1;
      end else
      begin
        self.Items[i].imageIndex:=2;
        self.Items[i].SelectedIndex:=3;
      end;
    end;
  end;
  freeandnil(class_stream);
end;
procedure TRemoteDbTreeView.ShowSelectDb;
var
   temp_str:string;
   fieldlist:string;
   i:integer;
begin
  fieldlist:='';
  for i:=0 to self.FSelectFields.Count-1 do
  begin
    fieldlist:=fieldlist+self.FSelectFields.Strings[i]+',';
  end;
  if length(trim(fieldlist))>0 then
     fieldlist:=leftstr(fieldlist,length(fieldlist)-1)
  else fieldlist:='*';
  if length(trim(FothermarkField))<>0 then
  begin
    if length(trim(FOtherMarkValue))=0 then
    begin
      Showmessage('OtherMarkValue属性不能够为空!');
      exit;
    end;
  end;
  if FClassEndFieldValue='1' then temp_str:='0';
  if FClassEndFieldValue='true' then temp_str:='false';
  //选取节点,查询相应的内容
  self.FSelectedDataSet.Remoteclose;
  if length(trim(self.FOtherMarkField))=0 then
  begin
    self.FSelectedDataSet.RTSQL.Text:='select top 100000000 '+fieldlist+' from '+FTableName+' where left('+FClassCodeFieldName+','+
                    inttostr(length(class_listcode.Strings[self.Selected.AbsoluteIndex]))+
                    ')='''+class_listcode.Strings[self.Selected.AbsoluteIndex]+''''+
                    ' and '+FClassEndFieldName+'='+self.FClassEndFieldValue+' and '+
                    'delete_mark='+temp_str+' order by '+FClassCodeFieldName;
  end else
  begin
    self.FSelectedDataSet.RTSQL.Text:='select top 100000000 '+fieldlist+' from '+FTableName+' where left('+FClassCodeFieldName+','+
                    inttostr(length(class_listcode.Strings[self.Selected.AbsoluteIndex]))+
                    ')='''+class_listcode.Strings[self.Selected.AbsoluteIndex]+''''+
                    ' and '+FClassEndFieldName+'='+self.FClassEndFieldValue+' and '+
                    'delete_mark='+temp_str+' and '+self.FOtherMarkField+self.FOtherMarkSign+''''+
                    self.FOtherMarkValue+''' order by '+FClassCodeFieldName;
  end;
  self.FSelectedDataSet.RemoteOpen;
end;

end.

⌨️ 快捷键说明

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