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

📄 u_studentsearch.pas

📁 一个简单的学籍管理软件
💻 PAS
字号:
unit U_StudentSearch;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  HGrids, HDBGrids, TB97Tlbr, TB97Ctls, TB97, DBTables, Db, Menus,
  ComCtrls, ExtCtrls, ImgList;

type
  TFm_StudentSearch = class(TForm)
    MDS: TDataSource;
    Dock: TDock97;
    Tb97_Func: TToolbar97;
    TbBtn_Code: TToolbarButton97;
    TbBtn_Name: TToolbarButton97;
    TbBtn_Help: TToolbarButton97;                      
    TbBtn_Exit: TToolbarButton97;
    TbSep02: TToolbarSep97;
    MQuery: TQuery;
    MUpSQL: TUpdateSQL;
    PPM: TPopupMenu;
    PM_Name: TMenuItem;
    PM_Code: TMenuItem;
    PM_Z01: TMenuItem;
    PM_Table: TMenuItem;
    PM_Help: TMenuItem;
    PM_Exit: TMenuItem;
    PM_Z02: TMenuItem;
    MTrView: TTreeView;
    Spl_Main: TSplitter;
    Pnl_DAn: TPanel;
    MGrid: THDBGrid;
    Spl_Fu: TSplitter;
    TbCtrl_Detail: TTabControl;
    TbBtn_Table: TToolbarButton97;
    ToolbarSep971: TToolbarSep97;
    DtQuery: TQuery;
    DtDS: TDataSource;
    DtGrid: THDBGrid;
    ImageList: TImageList;
    MQueryS_XHAO: TStringField;
    MQueryS_XMING: TStringField;
    MQuerySI_XBIE: TSmallintField;
    MQuerySI_MZU: TSmallintField;
    MQueryD_CSRQI: TDateField;
    MQueryS_ZPWJIAN: TStringField;
    MQueryS_JGUAN: TStringField;
    MQueryS_XXZZHI: TStringField;
    MQueryS_LXFSHI: TStringField;
    MQueryD_RDSJIAN: TDateField;
    MQueryD_RTSJIAN: TDateField;
    MQueryD_RXSJIAN: TDateField;
    MQueryS_BYXXIAO: TStringField;
    MQueryS_BJHAO: TStringField;
    TbBtn_Result: TToolbarButton97;
    PM_Result: TMenuItem;
    TbBtn_Print: TToolbarButton97;
    TbSp01: TToolbarSep97;
    PM_Print: TMenuItem;
    PM_Z03: TMenuItem;
    procedure TbBtn_ExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Spl_MainCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure Spl_FuCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure MTrViewGetImageIndex(Sender: TObject; Node: TTreeNode);
    procedure MTrViewGetSelectedIndex(Sender: TObject; Node: TTreeNode);
    procedure MTrViewChange(Sender: TObject; Node: TTreeNode);
    procedure MQuerySI_XBIEGetText(Sender: TField; var Text: string;
      DisplayText: Boolean);
    procedure MQuerySI_XBIESetText(Sender: TField; const Text: string);
    procedure TbCtrl_DetailChange(Sender: TObject);
    procedure QueryGetText(Sender: TField; var Text: String; DisplayText: Boolean);
    procedure QuerySetText(Sender: TField; const Text: string);
    procedure MQueryAfterScroll(DataSet: TDataSet);
    procedure TbBtn_TableClick(Sender: TObject);
    procedure TbBtn_HelpClick(Sender: TObject);
    procedure MQueryAfterOpen(DataSet: TDataSet);
    procedure TbBtn_NameClick(Sender: TObject);
    procedure MQueryD_CSRQIGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    procedure TbBtn_PrintClick(Sender: TObject);
  private
  public
  end;

var
  Fm_StudentSearch: TFm_StudentSearch;

procedure Show_StudentSearch;

implementation

uses U_Main, U_GlobalProc, U_GlobalVar, U_DM, U_SingleSearch, U_Print;

{$R *.DFM}

procedure Show_StudentSearch;
var
  i: integer;
begin
  for i := Fm_Main.MDIChildCount - 1 downto 0 do
  begin
    if (Fm_Main.MDIChildren[i].Name <> 'Fm_Wizard') and
      (Fm_Main.MDIChildren[i].Name <> 'Fm_StudentSearch') then
      Fm_Main.MDIChildren[i].Close;
  end;
  if not Assigned(Fm_StudentSearch) then
  begin
    Fm_StudentSearch := TFm_StudentSearch.Create(Application);
    with Fm_StudentSearch do
    begin
      MQuery.Open;
      ReSetGridColumns(MGrid, 'XSJBXX',
        MQuerySI_XBIEGetText, MQuerySI_XBIESetText);
      RefreshGridStyle(MGrid);
      RefreshGridStyle(DtGrid);
      MakeGradeTree(MTrView, 1, True);
      MTrView.Items[0].Selected := True;
      TbCtrl_Detail.TabIndex := 0;
      TbCtrl_DetailChange(nil);
    end;
  end;
  with Fm_StudentSearch do
  begin
    if WindowState <> wsMaximized then
      WindowState := wsMaximized;
    Show;
    SetFocus;
  end;
end;

procedure TFm_StudentSearch.TbBtn_ExitClick(Sender: TObject);
begin
  Close;
end;

procedure TFm_StudentSearch.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  MQuery.Close;
  Action := caFree;
  Fm_StudentSearch := nil;
end;

procedure TFm_StudentSearch.Spl_MainCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if NewSize < 8 then
    Accept := False;
end;

procedure TFm_StudentSearch.Spl_FuCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if NewSize < 8 then
    Accept := False;
end;

procedure TFm_StudentSearch.MTrViewGetImageIndex(Sender: TObject;
  Node: TTreeNode);
begin //
  if Node.HasChildren then
  begin
    if Node.Expanded then
      Node.ImageIndex := 2
    else
      Node.ImageIndex := 1;
  end
  else
  begin
    if Node.Level = 0 then
      Node.ImageIndex := 1
    else
      Node.ImageIndex := 0;
  end;
end;

procedure TFm_StudentSearch.MTrViewGetSelectedIndex(Sender: TObject;
  Node: TTreeNode);
begin
  if Node.HasChildren then
  begin
    if Node.Expanded then
      Node.SelectedIndex := 5
    else
      Node.SelectedIndex := 4;
  end
  else
  begin
    if Node.Level = 0 then
      Node.SelectedIndex := 4
    else
      Node.SelectedIndex := 3;
  end;
end;

procedure TFm_StudentSearch.MTrViewChange(Sender: TObject;
  Node: TTreeNode);
var
  tmS: string;
begin
  with MQuery do
  try
    DisableControls;
    Close;
    SQL.Text := 'SELECT * FROM xsjbxx';
    if (Integer(Node.Data) > 0) then
    begin
      if (Integer(Node.Data) < 9999) then
      begin //  年级
        tmS := S_SchoolCode + IntToStr(Integer(Node.Data)) + '%';
        SQL.Text := SQL.Text + 'WHERE s_xhao LIKE ''' + tmS + '''';
      end
      else
      begin //  班级
        tmS := IntFormatStr(Integer(Node.Data), 9);
        SQL.Text := SQL.Text + 'WHERE s_bjhao = ''' + tmS + '''';
      end;
    end;
    Open;
    if IsEmpty then
      MQueryAfterScroll(nil);
    if (Integer(Node.Data) = 1) and (w_curTerm = 1) and
      (not MQuery.IsEmpty) then
    begin
      TbBtn_Table.Enabled := True;
      PM_Table.Enabled := True;
      TbBtn_Result.Enabled := True;
      PM_Result.Enabled := True;
    end
    else
    begin
      TbBtn_Table.Enabled := False;
      PM_Table.Enabled := False;
      TbBtn_Result.Enabled := False;
      PM_Result.Enabled := False;
    end;

  finally
    EnableControls;
  end;
end;

procedure TFm_StudentSearch.MQuerySI_XBIEGetText(Sender: TField;
  var Text: string; DisplayText: Boolean);
var
  aList: TStrings;
  i: integer;
begin
  aList := nil;
  for i := 0 to MGrid.Columns.Count - 1 do
  begin
    if MGrid.Columns[i].FieldName = Sender.FieldName then
    begin
      aList := MGrid.Columns[i].PickList;
      Break;
    end;
  end;
  if Assigned(aList) then
  begin
    for i := 0 to aList.Count - 1 do
      if Sender.AsInteger = Integer(aList.Objects[i]) then
      begin
        Text := aList.Strings[i];
        break;
      end;
  end;
end;

procedure TFm_StudentSearch.MQuerySI_XBIESetText(Sender: TField;
  const Text: string);
var
  aList: TStrings;
  i: integer;
begin
  aList := nil;
  for i := 0 to MGrid.Columns.Count - 1 do
  begin
    if MGrid.Columns[i].FieldName = Sender.FieldName then
    begin
      aList := MGrid.Columns[i].PickList;
      Break;
    end;
  end;
  if Assigned(aList) then
  begin
    for i := 0 to aList.Count - 1 do
      if Text = aList.Strings[i] then
      begin
        Sender.AsInteger := Integer(aList.Objects[i]);
        break;
      end;
  end;
end;

procedure TFm_StudentSearch.TbCtrl_DetailChange(Sender: TObject);
Label RepeatHere;
var
  DataSetName, StdCode: string;
  aQuery: TQuery;
  aColumn: THColumn;
  tmSQL, tmColName, tmStrName, tmValueName: string;
begin //
  StdCode := Trim(MQuery.FieldByName('s_xhao').AsString);
  case TbCtrl_Detail.TabIndex of
    0: DataSetName := 'XSJTCY';
    1: DataSetName := 'XSRXCJ';
    2: DataSetName := 'XSXJBH';
    3: DataSetName := 'XSJCQK';
    4: DataSetName := 'XSKQTJ';
    5: DataSetName := 'XSPXBX';
    6: DataSetName := 'XSSTZK';
    7: DataSetName := 'XSGXFZ';
    8: DataSetName := 'XSCJHD';
    9: DataSetName := 'XSQMPY';
   10: DataSetName := 'XSYBPJ';
   11: DataSetName := 'XSSZFQK';
  end;
  with DtQuery do
  try
    DisableControls;
    Close;
    SQL.Text := 'SELECT * FROM ' + DataSetName + ' WHERE s_xhao = ''' +
      StdCode + '''';
    Open;
    RefreshGridColumns(DtGrid, DataSetName, QueryGetText, QuerySetText);
    tmSQL := '';
    case TbCtrl_Detail.TabIndex of
      1:
      begin
        tmSQL := 'SELECT * FROM xsrxkm WHERE  s_kmhao LIKE ''' +
            IntFormatStr(W_CurYear, 2) + '%''';
        tmColName := 's_kmhao';
        tmStrName := 's_rxkmu';
        tmValueName := 's_kmhao';
      end;
      5:
      begin
        tmSQL := 'SELECT * FROM pxbxzb';
        tmColName := 'i_pjdhao';
        tmStrName := 's_pjnrong';
        tmValueName := 'i_pjdhao';
      end;
      7:
      begin
        tmSQL := 'SELECT * FROM gxfznr';
        tmColName := 'i_pjdhao';
        tmStrName := 's_pjnrong';
        tmValueName := 'i_pjdhao';
      end;
      9:
      begin
        tmSQL := 'SELECT * FROM pyctnr';
        tmColName := 'i_pydhao';
        tmStrName := 's_pynr';
        tmValueName := 'i_pydhao';
      end;
      10:
      begin
        tmSQL := 'SELECT * FROM kc';
        tmColName := 's_bqjhkmu';
        tmStrName := 's_kcmcheng';
        tmValueName := 's_kcdhao';
      end;
    end;
    if tmSQL <> '' then
    begin
      aQuery := TQuery.Create(Application);
      with aQuery do
      try
        DataBaseName := DataDBase;
RepeatHere:
        SQL.Text := tmSQL;
        Open;
        aColumn := DtGrid.FindFirstColumn(tmColName);
        if Assigned(aColumn) then
        begin
          while not Eof do
          begin
            aColumn.PickList.AddObject(FieldByName(tmStrName).AsString,
              Pointer(FieldByName(tmValueName).AsInteger));
            Next;
          end;
          aColumn.Alignment := taLeftJustify;
          aColumn.Field.OnGetText := QueryGetText;
          aColumn.Field.OnSetText := QuerySetText;
          if (TbCtrl_Detail.TabIndex = 10) and
            (tmColName = 's_bqjhkmu') then
          begin
            tmSQL := 'SELECT * FROM kc';
            tmColName := 's_jbjdkmu';
            tmStrName := 's_kcmcheng';
            tmValueName := 's_kcdhao';
            Close;
            Goto RepeatHere;
          end;
        end;
        Close;
      finally
        Close;
        Free;
      end;
    end;
  finally
    while ControlsDisabled do
      EnableControls;
  end;
end;

procedure TFm_StudentSearch.QueryGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  DataSetGetText(DtGrid, Sender, Text, DisplayText);
end;

procedure TFm_StudentSearch.QuerySetText(Sender: TField;
  const Text: string);
begin
  DataSetSetText(DtGrid, Sender, Text);
end;

procedure TFm_StudentSearch.MQueryAfterScroll(DataSet: TDataSet);
var
  DataSetName, StdCode: string;
begin //
  //TbCtrl_DetailChange(nil);
  StdCode := Trim(MQuery.FieldByName('s_xhao').AsString);
  case TbCtrl_Detail.TabIndex of
    0: DataSetName := 'XSJTCY';
    1: DataSetName := 'XSRXCJ';
    2: DataSetName := 'XSXJBH';
    3: DataSetName := 'XSJCQK';
    4: DataSetName := 'XSKQTJ';
    5: DataSetName := 'XSPXBX';
    6: DataSetName := 'XSSTZK';
    7: DataSetName := 'XSGXFZ';
    8: DataSetName := 'XSCJHD';
    9: DataSetName := 'XSQMPY';
   10: DataSetName := 'XSYBPJ';
   11: DataSetName := 'XSSZFQK';
  end;
  with DtQuery do
  try
    DisableControls;
    Close;
    SQL.Text := 'SELECT * FROM ' + DataSetName + ' WHERE s_xhao = ''' +
      StdCode + '''';
    Open;
    RefreshDataSetField(DtGrid, QueryGetText, QuerySetText);
  finally
    while ControlsDisabled do
      EnableControls;
  end;
end;

procedure TFm_StudentSearch.TbBtn_TableClick(Sender: TObject);
begin //

end;

procedure TFm_StudentSearch.TbBtn_HelpClick(Sender: TObject);
begin //

end;

procedure TFm_StudentSearch.MQueryAfterOpen(DataSet: TDataSet);
begin
  if MQuery.IsEmpty then
  begin
    TbBtn_Code.Enabled := False;
    TbBtn_Table.Enabled := False;
    PM_Code.Enabled := False;
    PM_Table.Enabled := False;
  end
  else
  begin
    TbBtn_Code.Enabled := True;
    TbBtn_Table.Enabled := True;
    PM_Code.Enabled := True;
    PM_Table.Enabled := True;
  end;
end;

procedure TFm_StudentSearch.TbBtn_NameClick(Sender: TObject);
var
  pName: string;
  pBlur: Boolean;
  aMode: integer;
begin
  MTrView.OnChange := nil;
  MTrView.Selected := MTrView.Items[0];
  MTrView.OnChange := MTrViewChange;
  if Sender = TbBtn_Name then
    aMode := 1
  else
    aMode := 2;
  if U_SingleSearch.Show_SingleSearch(pName, pBlur, aMode) then
  begin
    with MQuery do
    try
      DisableControls;
      Close;
      SQL.Text := 'SELECT * FROM xsjbxx';
      if aMode = 1 then
      begin
        if pBlur then
          SQL.Add('WHERE s_xming LIKE ''%' + pName + '%'' ORDER BY s_xming')
        else
          SQL.Add('WHERE s_xming = ''' + pName + '%''');
      end else
        SQL.Add('WHERE s_xhao = ''' + pName + '%''');
      Open;
      if IsEmpty then
        MQueryAfterScroll(nil);
      if (not MQuery.IsEmpty) then
      begin
        TbBtn_Table.Enabled := True;
        PM_Table.Enabled := True;
        TbBtn_Result.Enabled := True;
        PM_Result.Enabled := True;
      end
      else
      begin
        TbBtn_Table.Enabled := False;
        PM_Table.Enabled := False;
        TbBtn_Result.Enabled := False;
        PM_Result.Enabled := False;
      end;
    finally
      EnableControls;
    end;
  end;
end;

procedure TFm_StudentSearch.MQueryD_CSRQIGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  if Sender.AsFloat < 10959 then
    Text := ''
  else
    Text := FormatDateTime('ddddd', Sender.AsDateTime);
end;

procedure TFm_StudentSearch.TbBtn_PrintClick(Sender: TObject);
begin//
  Show_Print(MGrid);
end;

end.

⌨️ 快捷键说明

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