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

📄 hourse.pas

📁 这是一个正式的项目工程
💻 PAS
字号:
unit Hourse;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, ImgList, ActnList, StdCtrls, Buttons, ComCtrls, ExtCtrls,
  wsTypes,wsCores,MainDB;

type
  TfrmHourse = class(TForm)
    PanelSecond: TPanel;
    Splitter1: TSplitter;
    Panel2: TPanel;
    TreeViewSelect: TTreeView;
    Panel3: TPanel;
    Panel4: TPanel;
    PanelBottom: TPanel;
    ActionList1: TActionList;
    ActionReturn: TAction;
    ImageListTreeView: TImageList;
    PanelFirst: TPanel;
    Label7: TLabel;
    LabelProject: TLabel;
    BitBtn1: TBitBtn;
    ListBoxProject: TListBox;
    ActionOK: TAction;
    Label9: TLabel;
    LabelCurrentProject: TLabel;
    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 ActionOKExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ActionList1Update(Action: TBasicAction;
      var Handled: Boolean);
    procedure ListBoxProjectClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TreeViewSelectChanging(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    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
    strHourseID:String;
    { Public declarations }
  end;

var
  frmHourse: TfrmHourse;

implementation

uses Group;

{$R *.DFM}
Procedure TfrmHourse.ShowLeft();
begin
   ListBoxExtension.Items.Clear;
   with dmMainDB.qryPublic do
   begin
     Close;
     SQL.Clear;
     Sql.Add('Select GroupID,CodeMeaning from PHG,CodeDetail Where (ProjectID=:ProjectID) and (HourseID=:HourseID) and (GroupID=ACode) and (Class=:strClass)');
     ParamByName('ProjectID').AsString:=ProjectInfo.ProjectID;
     ParamByName('HourseID').AsString:=strHourseID;
     ParamByName('StrClass').AsString:='G';
     Prepare;
     try
       Open;
     except
       ExecSql;
     end;
     While Not Eof do
     begin
       ListBoxExtension.Items.Append(FieldByName('CodeMeaning').AsString+' ['+FieldByName('GroupID').AsString+']');
       Next;
     end;
     Close;
   end;
end;

Function  TfrmHourse.HasGrouped():Boolean;
begin
   with dmMainDB.qryPublic do
   begin
     Close;
     SQL.Clear;
     Sql.Add('Select GroupID from PHG Where (ProjectID=:ProjectID) and (HourseID=:HourseID) and (GroupID=:GroupID)');
     ParamByName('ProjectID').AsString:=ProjectInfo.ProjectID;
     ParamByName('HourseID').AsString:=strHourseID;
     ParamByName('GroupID').AsString:=GetID(ListBoxCandiate.Items.Strings[ListBoxCandiate.ItemIndex]);
     Prepare;
     try
       Open;
     except
       ExecSql;
     end;
     if Not IsEmpty then
       Result:=True
     else
       Result:=False;
   end;

end;

procedure TfrmHourse.ActionOKExecute(Sender: TObject);
var
  CurrentNode,RootNode:TTreeNode;
begin
  PanelFirst.Visible:=False;
  PanelSecond.Visible:=True;
  LabelCurrentProject.Caption:=LabelProject.Caption;
  With frmHourse do
  begin
    ProjectInfo.ProjectName:=GetName(LabelProject.Caption);
    ProjectInfo.ProjectID:=GetID(LabelProject.Caption);
    ProjectInfo.HourseName:='';
    ProjectInfo.HourseID:='';
  end;
 //
  With dmMainDB do
  begin
    ViewProjectID.Close;
    ViewGroupID.Open;
    if ViewPH.State=dsInactive then
       ViewPH.Open;
    ViewPH.Filter:='ProjectID='+''''+ProjectInfo.ProjectID+'''';
    ViewPH.Filtered:=True;

    try
      TreeViewSelect.Items.BeginUpdate;
      RootNode:=TreeViewSelect.Items.Add(nil,ProjectInfo.ProjectName +' ['+ProjectInfo.ProjectID+']');
      RootNode.ImageIndex:=0;
      RootNode.StateIndex:=1;
      RootNode.SelectedIndex:=3;

      ViewPH.First;
      while not ViewPH.Eof do
      begin
        CurrentNode:=TreeViewSelect.Items.AddChild(RootNode,ViewPH['HourseIDLookup']+' ['+ViewPH['HourseID']+']');
        CurrentNode.ImageIndex:=0;
        CurrentNode.SelectedIndex:=3;
        ViewPH.Next;
      end;
    finally
      TreeViewSelect.FullExpand;
      TreeViewSelect.Items.EndUpdate;
    end;
  end;
  if (TreeViewSelect.TopItem<>nil) and  (TreeViewSelect.TopItem.getFirstChild<>nil) then
  begin
    strHourseID:=GetID(TreeViewSelect.TopItem.getFirstChild.Text);
    TreeViewSelect.TopItem.getFirstChild.Selected:=True;
  end;
  ShowLeft();

   ListBoxCandiate.Items.Clear;
   with dmMainDB.ViewGroupID do
   begin
     if State=dsInactive then
       Open
     else
       First;
     While Not Eof do
     begin
       ListBoxCandiate.Items.Append(FieldByName('CodeMeaning').AsString+' ['+FieldByName('ACode').AsString+']');
       Next;
     end;
   end;
   dmMainDB.ViewProjectID.Open;

end;

procedure TfrmHourse.FormCreate(Sender: TObject);
begin
  with dmMainDB  do
  begin
    if ViewProjectID.State=dsInactive then
       ViewProjectID.Open
    else
       ViewProjectID.First;
    if ViewGroupID.State=dsInactive then
       ViewGroupID.Open
    else
       ViewGroupID.First;
    if ViewPH.State=dsInactive then
       ViewPH.Open
    else
       ViewPH.First;
    if tbPHG.State=dsInactive then
       tbPHG.Open
    else
       tbPHG.First;
  end;

  PanelFirst.Align:=alClient;
  PanelSecond.Align:=alClient;
  PanelFirst.Visible:=True;
  PanelSecond.Visible:=False;
  LabelProject.Caption:='';
  strHourseID:='';
  with dmMainDB.ViewProjectID  do
  begin
    First;
    try
      ListBoxProject.Items.BeginUpdate;
      ListBoxProject.Items.Clear;
      While Not Eof do
      begin
        ListBoxProject.Items.Append(FieldByName('CodeMeaning').AsString+' ['+FieldByName('ACode').AsString+']');
        Next;
      end;
      if ListBoxProject.Items.Count<>0 then
      begin
        ListBoxProject.ItemIndex:=0;
        LabelProject.Caption:=ListBoxProject.Items.Strings[ListBoxProject.ItemIndex];
      end;

    finally

     ListBoxProject.Items.EndUpdate;
   end;
 end;


end;

procedure TfrmHourse.ActionList1Update(Action: TBasicAction;
  var Handled: Boolean);
begin
  ActionOK.Enabled:=(LabelProject.Caption<>'') ;
  ActionLeft.Enabled:=((ListBoxCandiate.ItemIndex>=0) and (strHourseID<>''));
  ActionRight.Enabled:=((ListBoxExtension.ItemIndex>=0) and (strHourseID<>''));

end;

procedure TfrmHourse.ListBoxProjectClick(Sender: TObject);
begin
  LabelProject.Caption:=ListBoxProject.Items.Strings[ListBoxProject.ItemIndex];
//  LabelProject.Caption:=ListBoxProject.Items.Strings[ListBoxProject.ItemIndex];
end;

procedure TfrmHourse.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TfrmHourse.TreeViewSelectChanging(Sender: TObject;
  Node: TTreeNode; var AllowChange: Boolean);
begin
  if Node.Level=1 then
  begin
    AllowChange:=True;
  end
  else
  begin
    AllowChange:=False;
  end;
end;

procedure TfrmHourse.TreeViewSelectChange(Sender: TObject; Node: TTreeNode);
begin
  strHourseID:=GetID(Node.Text);
  ShowLeft();
end;

procedure TfrmHourse.ActionLeftExecute(Sender: TObject);
begin
if not HasGrouped() then
begin
  With dmMainDB.tbPHG do
  begin
    Append;
    FieldByName('ProjectID').asString:=ProjectInfo.ProjectID;
    FieldByName('HourseID').AsString:=strHourseID;
    FieldByName('GroupID').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 TfrmHourse.ActionRightExecute(Sender: TObject);
var
  i:Integer;
  StrGroupID:String;
  TableName:Array[1..4] of String;
begin
  StrGroupID:=GetID(ListBoxExtension.Items.Strings[ListBoxExtension.ItemIndex]);
  With dmMainDB do
  begin
    try
      MainDB.TransIsolation:=tiDirtyRead;
      try
        MainDB.StartTransaction;
        tbPHG.First;
        if tbPHG.Locate('ProjectID;HourseID;GroupID',VarArrayof([ProjectInfo.ProjectID,strHourseID,StrGroupID]),[loCaseInsensitive]) then
        begin
          tbPHG.Delete;
          for i:=1 to 4 do
            TableName[i]:='';
          TableName[1]:= 'GE';
          TableName[2]:= '';
          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) and (GroupID=:GroupID)');
            qryPublic.ParamByName('ProjectID').AsString:=ProjectInfo.ProjectID;
            qryPublic.ParamByName('HourseID').AsString:=StrHourseID;
            qryPublic.ParamByName('GroupID').AsString:=StrGroupID;
            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 TfrmHourse.ActionReturnExecute(Sender: TObject);
begin
  Close;
end;

procedure TfrmHourse.FormDestroy(Sender: TObject);
begin
  with dmMainDB  do
  begin
    if ViewProjectID.State<>dsInactive then
       ViewProjectID.Close;
    if ViewGroupID.State<>dsInactive then
       ViewGroupID.Close;
    if tbGE.State<>dsInactive then
       tbGE.Close;
    if ViewPH.State<>dsInactive then
       ViewPH.Close;
  end;

end;

end.

⌨️ 快捷键说明

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