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

📄 project.pas

📁 这是一个正式的项目工程
💻 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 + -