uclasstosubject.~pas

来自「一.录入学生信息(预计有81个学生」· ~PAS 代码 · 共 218 行

~PAS
218
字号
unit uClassToSubject;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, Grids, DBGridEh, ComCtrls, DB,
  ADODB, ImgList;

type
  TfrmClassToSubject = class(TForm)
    GroupBox1: TGroupBox;
    Panel1: TPanel;
    GroupBox2: TGroupBox;
    Panel2: TPanel;
    GroupBox3: TGroupBox;
    sbDown: TSpeedButton;
    sbUp: TSpeedButton;
    DBGridEh1: TDBGridEh;
    DBGridEh2: TDBGridEh;
    Tree: TTreeView;
    dsQuery: TADODataSet;
    ImageList1: TImageList;
    dsSubject: TADODataSet;
    dsSubjectMain: TADODataSet;
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    ADOCommand1: TADOCommand;
    Function ReadyData():Boolean;
    Function ReadyList():Boolean;
    procedure TreeClick(Sender: TObject);
    procedure sbUpClick(Sender: TObject);
    procedure DBGridEh2DblClick(Sender: TObject);
    procedure sbDownClick(Sender: TObject);
    procedure DBGridEh1DblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


Function ShowClassToSubject():Boolean;

implementation

uses uPub,uDM;

{$R *.dfm}

Function ShowClassToSubject():Boolean;
var
  frmClassToSubject: TfrmClassToSubject;
begin
  Result:=False;
  frmClassToSubject:=TfrmClassToSubject.Create(nil);
  if Not frmClassToSubject.ReadyData then
  begin
    frmClassToSubject.Free;
    Exit;
  end;
  frmClassToSubject.ShowModal;
  frmClassToSubject.Free;
  Result:=True;
end;


Function TfrmClassToSubject.ReadyData():Boolean;
var TmpSQL:String;
    OldTerm:String;
    TmpData:PNodeData;
    TmpItem,LastPar:TTreeNode;
begin
  Result:=False;
  TmpSQL:='select TTermToClass.*,TTerm.TermName,TClass.ClassName from TTermToClass,TTerm,TClass'+
    ' where TTermToClass.TermCode=TTerm.TermCode And TTermToClass.ClassCode=TClass.ClassCode'+
    ' Order by TTermToClass.TermCode,TTermToClass.ClassCode';
  dsQuery.Close;
  dsQuery.CommandText:=TmpSQL;
  Try
    dsQuery.Open;
  Except
    ShowMessage('读取本地数据文件发生错误!');
    Exit;
  End;
  dsQuery.First;
  LastPar:=nil;
  While Not dsQuery.Eof Do
  begin
    if OldTerm<>dsQuery.FieldByName('TermCode').AsString then
    begin
      new(TmpData);
      TmpItem:=Tree.Items.Add(nil,dsQuery.FieldByName('TermName').AsString);
      TmpItem.ImageIndex:=0;
      TmpItem.SelectedIndex:=0;
      TmpData.Code:=dsQuery.FieldByName('TermCode').AsString;
      TmpData.Name:=dsQuery.FieldByName('TermName').AsString;
      TmpItem.Data:=TmpData;
      OldTerm:=dsQuery.FieldByName('TermCode').AsString;
      LastPar:=TmpItem;
    end;
    new(TmpData);
    TmpItem:=Tree.Items.AddChild(LastPar,dsQuery.FieldByName('ClassName').AsString);
    TmpItem.ImageIndex:=1;
    TmpItem.SelectedIndex:=1;
    TmpData.Code:=dsQuery.FieldByName('ClassCode').AsString;
    TmpData.Name:=dsQuery.FieldByName('ClassName').AsString;
    TmpItem.Data:=TmpData;
    dsQuery.Next;
  end;
  Result:=True;
end;

Function TfrmClassToSubject.ReadyList():Boolean;
var TmpSQL:String;
begin
  Result:=False;
  if Tree.Selected=nil then
  begin
    dsSubject.Close;
    dsSubjectMain.Close;
    Exit;
  end;
  if Tree.Selected.Level=0 then
  begin
    dsSubject.Close;
    dsSubjectMain.Close;
    Exit;
  end;
  TmpSQL:='SELECT TClassToSubject.*,TSubject.SubjName from TClassToSubject,TSubject Where'+
    ' TClassToSubject.SubjCode= TSubject.SubjCode'+
    ' And TClassToSubject.TermCode='+PNodeData(Tree.Selected.Parent.Data)^.Code+
    ' And TClassToSubject.ClassCode='+''''+PNodeData(Tree.Selected.Data)^.Code+'''';
  dsSubject.Close;
  dsSubject.CommandText:=TmpSQL;
  Try
    dsSubject.Open;
  Except
    ShowMessage('打开数据文件发生错误!');
    Exit;
  End;

  GroupBox2.Caption:='学期['+PNodeData(Tree.Selected.Parent.Data)^.Name+']班级['+
    PNodeData(Tree.Selected.Data)^.Name+']开设的课程科目!';

  TmpSQL:='select * from TSubject Where 1=1 '+
    ' and Not SubjCode in (Select SubjCode from TClassToSubject Where 1=1 '+
    ' And TermCode='+PNodeData(Tree.Selected.Parent.Data)^.Code+
    ' And ClassCode='+''''+PNodeData(Tree.Selected.Data)^.Code+''''+
    ')'+' Order by SubjCode';
  dsSubjectMain.Close;
  dsSubjectMain.CommandText:=TmpSQL;
  Try
    dsSubjectMain.Open;
  Except
    ShowMessage('读取本地数据文件发生错误!');
    Exit;
  End;
  Result:=True;
  
end;

procedure TfrmClassToSubject.TreeClick(Sender: TObject);
begin
  ReadyList;
end;

procedure TfrmClassToSubject.sbUpClick(Sender: TObject);
var TmpSQL:String;
begin
  if Tree.Selected=nil then Exit;
  if Tree.Selected.Level=0 then Exit;
  if dsSubjectMain.IsEmpty then Exit;
  TmpSQL:='Insert into TClassToSubject (TermCode,ClassCode,SubjCode) Values('+
    PNodeData(Tree.Selected.Parent.Data)^.Code+','+''''+PNodeData(Tree.Selected.Data)^.Code+''''+','+
    ''''+dsSubjectMain.fieldByName('SubjCode').AsString+''''+')';
  ADOCommand1.CommandText:=TmpSQL;
  Try
    ADOCommand1.Execute;
  Except
    ShowMessage('增加数据发生错误!');
    Exit;
  end;
  ReadyList;
end;

procedure TfrmClassToSubject.DBGridEh2DblClick(Sender: TObject);
begin
  sbUpClick(nil);
end;

procedure TfrmClassToSubject.sbDownClick(Sender: TObject);
var TmpSQL:String;
begin
  if Tree.Selected=nil then Exit;
  if Tree.Selected.Level=0 then Exit;
  if dsSubject.IsEmpty then Exit;
  TmpSQL:='Delete From TClassToSubject where TermCode='+
    PNodeData(Tree.Selected.Parent.Data)^.Code+' And ClassCode='+''''+
    PNodeData(Tree.Selected.Data)^.Code+''''+
    ' And SubjCode='+''''+dsSubject.fieldByName('SubjCode').AsString+'''';
  ADOCommand1.CommandText:=TmpSQL;
  Try
    ADOCommand1.Execute;
  Except
    ShowMessage('删除数据发生错误,可能该对应班级记录已经进入使用!');
    Exit;  
  End;
  ReadyList;  
end;

procedure TfrmClassToSubject.DBGridEh1DblClick(Sender: TObject);
begin
  sbDownClick(nil);
end;

end.

⌨️ 快捷键说明

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