📄 room.pas
字号:
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 + -