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

📄 room.pas

📁 pasa人力资源考勤管理系统
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    Adoroom3.Close;
    adoroom3.open;
  end;
end;

procedure Tformroom.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  setdbgridwidth(dbgrid1,'p'+'room');
  setdbgridwidth(dbgrid2,'p'+'room');
  setdbgridwidth(dbgrid3,'p'+'room');
  action:=cafree;
  formroom:=nil;
end;

procedure Tformroom.FormActivate(Sender: TObject);
begin
  showtree(sender);  //显示宿舍树状结构
  getdbgridwidth(dbgrid1,'p'+'room');
  getdbgridwidth(dbgrid2,'p'+'room');
  getdbgridwidth(dbgrid3,'p'+'room');
  with datamod do
  begin
   Adoroom1.Close;
   Adoroom2.Close;
   adoroom3.close;
   Adoroomnow.Close;
   Adoroom1.CursorType:=ctkeyset;
   Adoroom1.LockType :=ltpessimistic;
   Adoroom2.CursorType:=ctkeyset;
   Adoroom2.LockType :=ltpessimistic;
   Adoroom3.CursorType:=ctkeyset;
   Adoroom3.LockType :=ltpessimistic;
   Adoroomnow.CursorType:=ctkeyset;
   Adoroomnow.LockType :=ltpessimistic;
   Adoroom1.Open ;
   Adoroomnow.Open;
   Adoroom2.open;
   adoroom3.open;
  end;
  fcount:=0;
  fcount1:=0;
  fcount2:=0;
  case pagecontrol1.ActivePageIndex of
  1:begin

    end;
  2:begin
     dbnavigator1.Visible:=true;
     dbnavigator1.Left :=190;
    end;
  end;
end;

procedure tformroom.showtree(sender:tobject);
var
   mynode,mynode1,mynode2:Ttreenode;
   aqy1,aqy2,aqy3:Tadoquery;
   roomcan,roomin,roomno:string;
begin
  aqy1:=tadoquery.create(application);
  aqy2:=tadoquery.create(application);
  aqy3:=tadoquery.create(application);
  aqy1.connection:=datamod.adoquery1.connection;
  aqy2.connection:=datamod.adoquery1.connection;
  aqy3.connection:=datamod.adoquery1.connection;
  with treeview1.Items do
    begin
      clear;
      with datamod.adoquery1 do
      begin
      close;
      sql.clear;
      sql.add('delete rom02010  where  workno in (select workno from per24010 where leave=1)');
      execsql;
      close;
      mynode:=add(nil,'现有宿舍');
      mynode1:=addchild(mynode,'已有人住宿');
      sql.Clear;
      SQL.Add('select distinct(roomno) from rom02010 ');
      open;
      while not eof do
      begin
        aqy2.SQL.clear;   //选出这个宿舍有多少床位住人,多少床位没人住
        aqy2.sql.add('select count(*) from Vrom02010 where roomno='''+fields[0].asstring+''' ');
        aqy2.open;
        aqy3.sql.clear;   //该宿舍可住多少人
        aqy3.sql.add('select * from rom03010 where roomno='''+fields[0].asstring+''' ');
        aqy3.open;
        roomin:=aqy2.fields[0].AsString;  //巳住进多少人
        roomcan:=aqy3.fieldbyname('roomcan').asstring;  //最多可住多少人
        roomno:=inttostr(aqy3.fieldbyname('roomcan').asinteger-aqy2.fields[0].asinteger);  //还剩下多少张床位
        //roomin.Color:=[clred];roomno.Color:=clblue;
        mynode2:=addchild(mynode1,trim(Fields[0].asstring)+'    '+roomcan+'    '+roomin+'    '+roomno+'    '+aqy3.fieldbyname('roomkind').asstring);
        aqy1.sql.clear;
        aqy1.sql.add('select * from Vrom02010 where roomno='''+fields[0].asstring+''' ');
        aqy1.open;
        while not aqy1.eof do
        begin
          addchild(mynode2,aqy1.fieldbyname('bedno').asstring+'     '+aqy1.FieldByName('workno').asstring+'  '+aqy1.fieldbyname('name').asstring);
          aqy1.next;
        end;
        aqy1.close;
        aqy2.close;
        aqy3.close;
        Next;
      end;
      close;
      end;

      with datamod.ADOQuery1 do
      begin
       mynode1:=addchild(mynode,'还无人住宿');
       SQL.clear;
       SQL.Add('select roomno,roomcan,roomkind from rom03010 where roomno not in (select distinct(roomno) from rom02010) ');
       open;
       while not eof do
       begin
         addchild(mynode1,trim(fields[0].asstring)+'    '+fieldbyname('roomcan').asstring+'    '+'0'+'    '+'0'+'    '+fieldbyname('roomkind').asstring);
         Next;
       end;
       close;
      end;
      mynode:=add(nil,'没安排宿舍的员工');
      mynode:=addchild(mynode,'没有宿舍');
      aqy1.SQL.Clear;
      aqy1.SQL.Add('select count(*) from per24010 where workno not in (select workno from rom02010) and leave<>1 ');
      aqy1.Open;
      if not aqy1.eof then
        roomno:=aqy1.fields[0].AsString
      else
        roomno:='0';
      mynode:=addchild(mynode, '000       '+roomno);
      aqy1.Close;
      aqy1.sql.clear;
      aqy1.sql.add('select workno,name,sexname from per24010 where workno not in (select workno from rom02010) and leave<>1 order by dept,workno');
      aqy1.open;
      while not aqy1.eof do
        begin
          addchild(mynode,aqy1.fields[0].asstring+'    '+aqy1.fields[1].asstring+'    '+aqy1.fields[2].asstring);
          aqy1.next;
        end;
      aqy1.close;
      //向combobox1,2中加入宿舍编号
      combobox1.Clear;
      combobox2.Clear;
      aqy1.SQL.Clear;
      aqy1.SQL.Add('select roomno from rom03010');
      aqy1.Open;
      while not aqy1.eof do
      begin
        combobox1.Items.Add(aqy1.fields[0].AsString);
        combobox2.Items.Add(aqy1.fields[0].AsString);
        aqy1.Next;
      end;
      aqy1.close;
    end;
end;

procedure Tformroom.ToolButton4Click(Sender: TObject);
begin
  close;
end;

procedure tformroom.list(comb:tcombobox;list:Tlistbox);
begin
  list.clear;
  with datamod.ADOQuery1 do
    begin
      sql.Clear;
      sql.Add('select * from rom03010 where roomno='+comb.text+' ');
      open;
      if eof then
        begin
          Application.messagebox('没有此宿舍编号','提示',mb_ok+mb_iconinformation);
          close;
          exit;
        end;
      close;
      SQL.Clear;
      sql.add('select * from rom02010 where roomno='+comb.text+' order by workno');
      open;
      while not datamod.ADOQuery1.eof do
      begin
        list.items.Add(fieldbyname('workno').asstring+' '+fieldbyname('name').asstring);
        datamod.adoquery1.Next;
      end;
      close;
   end;
end;

procedure Tformroom.oKeyPress(Sender: TObject; var Key: Char);
begin
  if (activecontrol=edit1) then exit;
  if key=#13 then
    begin
      key:=#0;
      with (sender as twincontrol) do
        postmessage(handle,Wm_keydown,vk_tab,0);
    end;
end;

function TFormroom.AddNotDup (List: TCustomListBox; Text: string): Boolean;
begin
   // return if the string was not already in the list
  Result := List.Items.IndexOf (Text) < 0;
  if Result then
    List.Items.Add (Text);
end;

procedure Tformroom.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if key=VK_return  then
     combxkeydown(combobox1);
end;

procedure Tformroom.combxkeydown(sender:Tobject);
var i:integer;
begin
   for i:=1 to treeview1.Items.Count-1 do
   if (treeview1.items[i].parent<>nil) and ((treeview1.items[i].Parent).parent<>nil) and ((((treeview1.items[i].parent).parent).parent)=nil) then
     if (pos('000',treeview1.items[i].Text)=0) and (pos(trim((sender as Tcombobox).text),treeview1.items[i].Text)>0) then
      begin
       treeview1.Items[i].Selected:=true;
       treeview1.Selected.Expand(true);  //放开该节点
       yedit:=strtoint(trim(copy(treeview1.Selected.Text,pos(' ',treeview1.selected.text),6)));
       if sender=combobox1 then
         treeview1.OnDblClick(combobox1)     //让其实现和双击选取节点时一样的功能
       else if sender=combobox2 then
         treeview1.OnDblClick(combobox2);
       exit;
      end;
end;

procedure Tformroom.ComboBox2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if key=VK_return  then
     combxkeydown(combobox2); 
end;

procedure Tformroom.ComboBox1Change(Sender: TObject);
//var st:TshiftState;
//    k:word;
begin
//  st:=[ssShift];
//  k:=Vk_return;
  if trim(combobox1.text)=trim(combobox2.text) then
  begin
    edit1.Visible:=false;edit2.Visible:=false;edit3.Visible:=false;edit4.Visible:=false;
    edit5.Visible:=false;edit6.Visible:=false;edit7.Visible:=false;edit8.Visible:=false;
    edit9.Visible:=false;edit10.Visible:=false;edit11.Visible:=false;edit12.Visible:=false;
    edit13.Visible:=false;edit14.Visible:=false;edit15.Visible:=false;edit16.Visible:=false;
    edit17.Visible:=false;edit18.Visible:=false;edit19.Visible:=false;edit20.Visible:=false;
    edit21.Visible:=false;edit22.Visible:=false;edit23.Visible:=false;edit24.Visible:=false;
    edit25.Visible:=false;edit26.Visible:=false;edit27.Visible:=false;edit28.Visible:=false;
    Application.messagebox('不能选择相同的宿舍','提示',mb_ok+mb_iconwarning);
    combobox1.Text:='';
    exit;
  end;
  if length(trim(combobox1.text))=length(trim(combobox1.Items[0])) then
     combxkeydown(combobox1);
    //combobox1.onKeyDown(Sender,k,st);
end;

procedure Tformroom.ComboBox2Change(Sender: TObject);
begin
  if trim(combobox1.text)=trim(combobox2.text) then
  begin
    edit29.Visible:=false;edit30.Visible:=false;edit31.Visible:=false;edit32.Visible:=false;
    edit33.Visible:=false;edit34.Visible:=false;edit35.Visible:=false;edit36.Visible:=false;
    edit37.Visible:=false;edit38.Visible:=false;edit39.Visible:=false;edit40.Visible:=false;
    edit41.Visible:=false;edit42.Visible:=false;edit43.Visible:=false;edit44.Visible:=false;
    edit45.Visible:=false;edit46.Visible:=false;edit47.Visible:=false;edit48.Visible:=false;
    edit49.Visible:=false;edit50.Visible:=false;edit51.Visible:=false;edit52.Visible:=false;
    edit53.Visible:=false;edit54.Visible:=false;edit55.Visible:=false;edit56.Visible:=false;
    Application.messagebox('不能选择相同的宿舍','提示',mb_ok+mb_iconwarning);
    combobox2.Text:='';
    exit;
  end;

  if length(trim(combobox2.text))=length(trim(combobox2.Items[0])) then
    combxkeydown(combobox2);
end;

//这段代码是从treeview1.dblclick中copy的,只是把combobox1下面的黄色的edit
//换成combobox2下面的白色的edit,功能一样

procedure Tformroom.TreeView1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  TargetNode, SourceNode: TTreeNode;
begin
  if source=treeview1 then
  begin
    TargetNode := TreeView1.GetNodeAt (X, Y);
    if TargetNode <> nil then
    begin
      SourceNode := TreeView1.Selected;
      SourceNode.MoveTo (TargetNode, naAddChildFirst);
      TargetNode.Expand (False);
      TreeView1.Selected := TargetNode;
    end;
  end;  
end;

//*****************************************************************
//当拖放的节点放在此节点上触发此事件
procedure Tformroom.TreeView1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
//var  TargetNode, SourceNode: TTreeNode;
begin
 { TargetNode := TreeView1.GetNodeAt (X, Y);
  if (Source = Sender) and (TargetNode <> nil) then
  begin
    Accept := false;
    SourceNode := TreeView1.Selected;
    if ((targetnode.Parent)<>nil) and (((targetnode.parent).parent)<>nil) and ((((targetnode.parent).parent).parent)=nil) then
      begin
        accept:=true;       //判断该节点是否可以存放员工进去
        exit;
      end
    else
      accept:=false;
    while (TargetNode.Parent <> nil) and
        (TargetNode <> SourceNode) do
      TargetNode := TargetNode.Parent;
    if TargetNode = SourceNode then    //如果目标节点和选取的节点相同,则不移动
      Accept := False;
  end
  else
    Accept := False;}
  accept:=false;  
end;

procedure Tformroom.Label1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  accept:=true;
end;

//当双击节点时,在listbox中显示该宿舍员工的资料,并以图示表示
procedure Tformroom.TreeView1DblClick(Sender: TObject);
var listitem:tlistitem;
    roomcan,roomin,roomno,selecttext:string;
    i,s:integer;
    et,bed:Tedit;
    clr:Tcolor;
begin
  s:=0;
  clr:=rgb(0,0,0);
  if (treeview1.selected.parent<>nil) and ((treeview1.Selected.Parent).parent<>nil) and ((((treeview1.selected.parent).parent).parent)=nil) then
    if pos('000',treeview1.selected.text)=0 then
     begin
         if sender<>combobox2 then
           begin
            sender:=combobox1;
            combobox1.text:=trim(copy(selecttext,pos(' ',treeview1.selected.text),6));
           end;
         if sender=combobox1 then
          begin
           s:=0;
           clr:=clyellow;
          end
         else if sender=combobox2 then
          begin
           s:=28;
           clr:=clwhite;
          end;
         for i:=1 to 28 do
         begin                   //初始化黄色的28个edit控件
           //TEdit.Create(Self).Name := 'edit' + IntToStr(i);
           bed:=Tedit(findcomponent('edit'+inttostr(i+s)));
           with bed do
           begin
             bed.text:=inttostr(i);
             bed.hint:=inttostr(i);
             bed.BorderStyle:=bsSingle;
             bed.Color:=clr;
             bed.visible:=false;
           end;
         end;

       listview1.Items.Clear;
       with datamod.adoquery1 do
       begin
         sql.clear;
         sql.Add('select * from Vrom02010 where roomno='''+copy(treeview1.Selected.Text,1,pos(' ',treeview1.selected.text)-1)+''' ');
         open;
          while not eof do
          begin
           listitem:=listview1.Items.add;
           listitem.Caption :=fieldbyname('roomno').asstring;
           listitem.SubItems.Add(fieldbyname('bedno').asstring);
           listitem.SubItems.Add(fieldbyname('workno').asstring);
           listitem.SubItems.Add(fieldbyname('name').asstring);
           listitem.SubItems.Add(fieldbyname('sexname').asstring);
           listitem.SubItems.Add(fieldbyname('deptno').asstring);
           listitem.SubItems.Add(fieldbyname('prof').asstring);
           listitem.SubItems.Add(fieldbyname('roomer').asstring);
           next;
         end;
         first;
       end;// 这是with adoquery1的end; 因为下面的et不能在with--end;中
         selecttext:=treeview1.Selected.Text;
         roomcan:=trim(copy(selecttext,pos(' ',treeview1.selected.text),6));
         roomin:=trim(copy(selecttext,length(copy(treeview1.Selected.Text,1,pos(' ',treeview1.selected.text)-1))+4+1+4,3));
         roomno:=trim(copy(selecttext,length(copy(treeview1.Selected.Text,1,pos(' ',treeview1.selected.text)-1))+4+1+4+3,6));

         for i:=1 to strtoint(roomcan) do
         begin
           et:=Tedit(findcomponent('edit'+inttostr(i+s)));
           with et do
           begin
            if datamod.adoquery1.locate('bedno',inttostr(i),[]) then
             begin
               et.Hint:=datamod.adoquery1.fieldbyname('workno').asstring;
               et.text:=datamod.adoquery1.fieldbyname('name').asstring;

⌨️ 快捷键说明

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