📄 project.pas
字号:
unit Project;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, ImgList, ActnList, StdCtrls, Buttons, ComCtrls, ExtCtrls,
wsTypes,wsCores,MainDB;
type
TfrmProject = class(TForm)
PanelSecond: TPanel;
Splitter1: TSplitter;
Panel2: TPanel;
TreeViewSelect: TTreeView;
Panel3: TPanel;
Panel4: TPanel;
PanelBottom: TPanel;
ActionList1: TActionList;
ActionReturn: TAction;
ImageListTreeView: TImageList;
Panel1: TPanel;
Panel5: TPanel;
ListBoxExtension: TListBox;
BitBtnReturn: TBitBtn;
Splitter2: TSplitter;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
ListBoxCandiate: TListBox;
BitBtnRight: TBitBtn;
BitBtnLeft: TBitBtn;
ActionLeft: TAction;
ActionRight: TAction;
procedure FormCreate(Sender: TObject);
procedure ActionList1Update(Action: TBasicAction;
var Handled: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TreeViewSelectChange(Sender: TObject; Node: TTreeNode);
procedure ActionLeftExecute(Sender: TObject);
procedure ActionRightExecute(Sender: TObject);
procedure ActionReturnExecute(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
//ProjectInfo :TProject;
Procedure ShowLeft();
Function HasGrouped():Boolean;
public
strProjectID:String;
{ Public declarations }
end;
var
frmProject: TfrmProject;
implementation
uses Group;
{$R *.DFM}
Procedure TfrmProject.ShowLeft();
begin
ListBoxExtension.Items.Clear;
with dmMainDB.qryPublic do
begin
Close;
SQL.Clear;
Sql.Add('Select HourseID,CodeMeaning from PH,CodeDetail Where (ProjectID=:ProjectID) and (HourseID=ACode) and (Class=:strClass)');
ParamByName('ProjectID').AsString:=StrProjectID;
ParamByName('StrClass').AsString:='H';
Prepare;
try
Open;
except
ExecSql;
end;
While Not Eof do
begin
ListBoxExtension.Items.Append(FieldByName('CodeMeaning').AsString+' ['+FieldByName('HourseID').AsString+']');
Next;
end;
Close;
end;
end;
Function TfrmProject.HasGrouped():Boolean;
begin
with dmMainDB.qryPublic do
begin
Close;
SQL.Clear;
Sql.Add('Select HourseID from PH Where (HourseID=:HourseID)');
ParamByName('HourseID').AsString:=GetID(ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]);
Prepare;
try
Open;
except
ExecSql;
end;
if Not IsEmpty then
Result:=True
else
Result:=False;
Close;
end;
end;
procedure TfrmProject.FormCreate(Sender: TObject);
var
CurrentNode:TTreeNode;
begin
With dmMainDB do
begin
if ViewProjectID.State=dsInactive then
ViewProjectID.Open
else
ViewProjectID.First;
if ViewHourseID.State=dsInactive then
ViewHourseID.Open
else
ViewHourseID.First;
if tbPH.State=dsInactive then
tbPH.Open
else
tbPH.First;
end;
strProjectID:='';
With dmMainDB do
begin
try
TreeViewSelect.Items.BeginUpdate;
while not ViewProjectID.Eof do
begin
CurrentNode:=TreeViewSelect.Items.Add(nil,ViewProjectID['CodeMeaning']+' ['+ViewProjectID['ACode']+']');
CurrentNode.ImageIndex:=2;
CurrentNode.SelectedIndex:=3;
ViewProjectID.Next;
end;
finally
TreeViewSelect.Items.EndUpdate;
end;
end;
if (TreeViewSelect.TopItem<>nil) then
begin
strProjectID:=GetID(TreeViewSelect.TopItem.Text);
TreeViewSelect.TopItem.Selected:=True;
end;
ShowLeft();
ListBoxCandiate.Items.Clear;
with dmMainDB.qryPublic do
begin
Close;
SQL.Clear;
Sql.Add('Select ACode,CodeMeaning from CodeDetail Where (Class=:strClass)');
ParamByName('StrClass').AsString:='H';
Prepare;
try
Open;
except
ExecSql;
end;
While Not Eof do
begin
ListBoxCandiate.Items.Append(FieldByName('CodeMeaning').AsString+' ['+FieldByName('ACode').AsString+']');
Next;
end;
Close;
end;
end;
procedure TfrmProject.ActionList1Update(Action: TBasicAction;
var Handled: Boolean);
begin
ActionLeft.Enabled:=((ListBoxCandiate.ItemIndex>=0) and (strProjectID<>''));
ActionRight.Enabled:=((ListBoxExtension.ItemIndex>=0) and (strProjectID<>''));
end;
procedure TfrmProject.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TfrmProject.TreeViewSelectChange(Sender: TObject; Node: TTreeNode);
begin
strProjectID:=GetID(Node.Text);
ShowLeft();
end;
procedure TfrmProject.ActionLeftExecute(Sender: TObject);
begin
if not HasGrouped() then
begin
With dmMainDB.tbPH do
begin
Append;
FieldByName('ProjectID').asString:=strProjectID;
FieldByName('HourseID').AsString:=GetID(ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]);
Post;
end;
ShowLeft();
end
else
begin
ListBoxExtension.Hint:=ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]+'已经分配这栋楼房了';
ShowMessage(ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]+'已经分配这栋楼房了');
end;
end;
procedure TfrmProject.ActionRightExecute(Sender: TObject);
var
i:Integer;
StrHourseID:String;
TableName:Array[1..4] of String;
begin
StrHourseID:=GetID(ListBoxExtension.Items.Strings[ListBoxExtension.ItemIndex]);
With dmMainDB do
begin
try
MainDB.TransIsolation:=tiDirtyRead;
try
MainDB.StartTransaction;
tbPH.First;
if tbPH.Locate('ProjectID;HourseID',VarArrayof([strProjectID,strHourseID]),[loCaseInsensitive]) then
begin
tbPH.Delete;
for i:=1 to 4 do
TableName[i]:='';
TableName[1]:= 'PHG';
TableName[2]:= 'GE';
TableName[3]:= '';
TableName[4]:= '';
i:=1;
while TableName[i]<>'' do
begin
qryPublic.Close;
qryPublic.SQL.CLear;
qryPublic.SQL.Add('Delete from '+TableName[i] +' Where (ProjectID=:ProjectID) and (HourseID=:HourseID)');
qryPublic.ParamByName('ProjectID').AsString:=StrProjectID;
qryPublic.ParamByName('HourseID').AsString:=StrHourseID;
qryPublic.Prepare;
qryPublic.ExecSQL;
i:=i+1;
end;
qryPublic.Close;
end;
MainDB.Commit;
except
MainDB.Rollback;
end;
finally
MainDB.TransIsolation:=tiReadCommitted;
ShowLeft();
end;
end;
end;
procedure TfrmProject.ActionReturnExecute(Sender: TObject);
begin
Close;
end;
procedure TfrmProject.FormDestroy(Sender: TObject);
begin
With dmMainDB do
begin
if ViewProjectID.State<>dsInactive then
ViewProjectID.Close;
if tbPH.State<>dsInactive then
tbPH.Close;
if ViewHourseID.State<>dsInactive then
ViewHourseID.Close;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -