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

📄 mainform.pas

📁 学籍管理
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{**********************************************************************}
{                    ==================                                }
{                      客户端主程序                                    }
{                   ==================                                 }
{                                    《学籍管理系统》--作者:贺广兵    }
{                                                                      }
{    本单元是客户端应用程序的核心单元,程序的大部分功能都是由本单元    }
{    或本单元配合 ClientDataModule 模块完成的。程序开发中的体会和心    }
{    得 :                                                             }
{      1。查询模块:由于 ADOExpress 的局限(BDE中无此现象),当客户端  }
{    把查询语句传递给服务器 ADODataSet 的 COMMANDTEXT ,并执行时,如   }
{    果,查询数据不为空,则执行正常,而若得到的记录数为 0 时,第二次   }
{    查询时就会发生错误。这可能是由于 ADOEXPRESS 不能恰当的处理        }
{    SQlserver 传回的结果集而使执行错误。                              }
{         经解决办法如下:                                             }
{    程序发出查询请求时,服务端接受后,如果查询记录为空,则标记,下次  }
{    处理查询请求时,先切断 ADOCONNECTION 与数据库的连接,然后重新连   }
{    接,为防止用户在检索数据为空时,即关闭程序而使数据库异常,在程序  }
{    发出关闭请求时,检查本次搜索到的数据记录数,不为空则允许关闭,否  }
{    则向应用程序服务器发出关闭 ADOCONNECTION 请求,在其关闭后中止客   }
{    户端程序。                                                        }
{     2。登陆窗口:考虑实际情况,用户第一次登陆时,口令为空,程序自动  }
{    跳过登陆窗口。在用户设置口令后,把用户名和密码加密后写入注册表,  }
{    并保存相关信息,以决定用户下次登陆是否打开登陆窗口。              }
{        创建原则:如用户使用自动登陆(禁用密码),则创建客户端主程序  }
{    为主窗体。否则创建登陆窗口为主窗体,并在用户口令正确后自动隐藏。  }
{        隐藏窗口的时机:应用程序的 OnCanResize 事件。                 }
{                                                                      }
{                                                                      }
{                                                                      }
{**********************************************************************}
unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ToolWin, ExtCtrls, Menus, StdCtrls, DBLookup, Buttons, ImgList,
  Grids, Db,DBCtrls, DBGrids;

type
  TClientMainForm = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    ControlBar1: TControlBar;
    ToolBar1: TToolBar;
    Panel1: TPanel;
    SpeedButton1: TSpeedButton;
    Label1: TLabel;
    Splitter2: TSplitter;
    StatusBar1: TStatusBar;
    Splitter1: TSplitter;
    ContainDatacrols: TPanel;
    DBGrid1: TDBGrid;
    Panel3: TPanel;
    ContainInformation: TPanel;
    Panel2: TPanel;
    GroupBox1: TGroupBox;
    ServerTableListBox: TListBox;
    Panel4: TPanel;
    Panel5: TPanel;
    GroupBox2: TGroupBox;
    Panel6: TPanel;
    Panel7: TPanel;
    mbSystem: TMemo;
    SpeedButton4: TSpeedButton;
    sbUpdates: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton6: TSpeedButton;
    sbGetServerInformation: TSpeedButton;
    sbShutdown: TSpeedButton;
    sbGetupServer: TSpeedButton;
    ToolButton1: TToolButton;
    sbSave: TSpeedButton;
    SpeedButton11: TSpeedButton;
    ToolButton2: TToolButton;
    UseManager: TSpeedButton;
    sbHelpAndTegetherHintShow: TSpeedButton;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N16: TMenuItem;
    N17: TMenuItem;
    N18: TMenuItem;
    N19: TMenuItem;
    N20: TMenuItem;
    N21: TMenuItem;
    N22: TMenuItem;
    N23: TMenuItem;
    edtInput: TEdit;
    ComboBox1: TComboBox;
    N7: TMenuItem;
    N24: TMenuItem;
    SaveDlgSaveRecord: TSaveDialog;
    spFirst: TSpeedButton;
    spPrior: TSpeedButton;
    spNext: TSpeedButton;
    spNP: TSpeedButton;
    N26: TMenuItem;
    N27: TMenuItem;
    SpeedButton5: TSpeedButton;
    Timer1: TTimer;
    N15: TMenuItem;
    PopupMenu1: TPopupMenu;
    N14: TMenuItem;
    N25: TMenuItem;
    N28: TMenuItem;
    N29: TMenuItem;
    N30: TMenuItem;
    N31: TMenuItem;
    N32: TMenuItem;
    N33: TMenuItem;
    N34: TMenuItem;
    N35: TMenuItem;
    N36: TMenuItem;
    N37: TMenuItem;
    N38: TMenuItem;
    N39: TMenuItem;
    N40: TMenuItem;
    N41: TMenuItem;
    N42: TMenuItem;
    N43: TMenuItem;
    N44: TMenuItem;
    procedure sbUpdatesClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure sbShutdownClick(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure sbSaveClick(Sender: TObject);
    procedure sbGetServerInformationClick(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton13Click(Sender: TObject);
    procedure sbHelpAndTegetherHintShowMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure SpeedButton1Click(Sender: TObject);
    procedure spFirstClick(Sender: TObject);
    procedure spPriorClick(Sender: TObject);
    procedure spNextClick(Sender: TObject);
    procedure spNPClick(Sender: TObject);
    procedure UseManagerClick(Sender: TObject);
    procedure SpeedButton11Click(Sender: TObject);
    procedure ServerTableListBoxDblClick(Sender: TObject);
    procedure ServerTableListBoxMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    procedure mbSystemMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure N13Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N26Click(Sender: TObject);
    procedure N23Click(Sender: TObject);
    procedure edtInputEnter(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure N15Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCanResize(Sender: TObject; var NewWidth,
      NewHeight: Integer; var Resize: Boolean);
    procedure edtInputKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ComboBox1Click(Sender: TObject);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }

  public
    { Public declarations }
  end;
procedure GetupServer;     //定义常用的调用方法
procedure Updates;
procedure ShutdownLation;
procedure GetServerTime;
procedure NewRecord;
procedure DeleteRecord;
procedure ShowInformationInStatusBar(Information:String);
procedure HideInformationInStatusBar;
procedure GetAllTables;
procedure GetAllFields;
procedure GetHostName;

function MakeSearchStr:String;  //定义常用函数
function GetTableForQuery:String;
function GetFieldForQuery:String;

var
  ClientMainForm: TClientMainForm;
  ServerLinked:Boolean=False; //全局变量,注意保护**************
  TrueEOF:Boolean=False;
  VOwnerData:String;        //全局变量,小心访问***************
implementation

uses
  SchoolManager_TLB,DataMoudle, fmDesignUnit, HinForm, PasswordUnit,
  DataBringUnit, UseIniFile,{ QReportPrint,} fmAout, MultiThreadPrintUnit,
  MidasMake, fmLoginUnit, SinglePrintUnit;

const                        //信息常量
  BusyMessage='  正在登陆....';
  CompleteMessage='==>>已成功的连接上服务器!';
  NoGetupMessage='==>>尚未连接服务器!';
  ChangeGrid=#13#10;
  PacketSize=10;
{$R *.DFM}
procedure CreateUseMethod;
//var
 // UseMethod:TMethodUnit;
begin
  //UseMethod.Create;
 
end;
procedure TClientMainForm.sbUpdatesClick(Sender: TObject);
begin                       //更新数据
  //CreateuseMeythod;
  //UseMethod.
  Updates;
end;

procedure TClientMainForm.FormDestroy(Sender: TObject);
begin
  //UseMethod.Free;
end;

procedure TClientMainForm.N4Click(Sender: TObject);
begin
  if (not ServerLinked) then
  GetupServer;
  if ServerLinked then
  begin
    GetHostName;
    GetServerTime;
    GetAllTables;
    GetAllFields;
    ServerTableListBox.SetFocus;
  end;
end;

function MakeSearchStr:String;
begin
  Result:='select * from '+GetTableForQuery+' where '
    +GetFieldForQuery+'='+ClientMainForm.edtInput.Text;// 如何给字符串加上 ' 号?
end;

function GetTableForQuery:String;
begin
  if ServerLinked then
  with ClientMainForm do
   Result:=ServerTableListBox.Items[ServerTableListBox.ItemIndex];
end;

function GetFieldForQuery:String;
//var
  //icount:Integer;      //DELPHI5.0的遗憾:有动态数组,但却没有动态集合
  //TextInList:Boolean;  //用起来真是不爽
begin
  //TextInList:=True;
  DataModule1.ClientDataSet1.GetFieldNames(ClientMainForm.ComboBox1.Items);
  with ClientMainForm do
  begin
    //Result:=ComboBox1.Items[ComboBox1.ItemIndex];
    if ComboBox1.Text<>'' then
    Result:=ComboBox1.Text;
  end;
end;

procedure Updates;
begin
  if ServerLinked  then
  begin
    try                       //更新数据
    With DataModule1 do
    begin
      ClientDataSet1.ApplyUpdates(0);
      MessageDlg('成功把数据更新回数据库!',mtInformation,[mbOK],0);
    end;
    Except on E:Exception do
    begin
      MessageDlg(E.Message,mtInformation,[mbOK],0);
    end;
    end;
  end;  
end;
procedure GetupServer;
begin
  with DataModule1 do      //登陆服务器
  begin
    try
      with ClientMainForm do
      begin
        StatusBar1.Panels[0].Text:=BusyMessage;
        //DCOMConnection1.Connected:=True;
        SocketConnection1.Connected:=True;
        //SocketConnection1.Connected:=True;
        ServerLinked:=True;
        MessageDlg(CompleteMessage+#13#10+'请在数据表栏里双击您要查看的表!',mtInformation,[mbOK],0);
        StatusBar1.Panels[0].Text:=CompleteMessage;
      end;
    except on E:Exception do
     with ClientMainForm do
     begin
      //ClientDataSet1.Active:=False;
      //DCOMConnection1.Connected:=False;
      SocketConnection1.Connected:=False;
      ServerLinked:=False;
     end;
    end;
  end;
end;

procedure ShutdownLation;
begin
  with DataModule1 do
  begin
    ClientDataset1.Active:=False;
    //DCOMConnection1.Connected:=False;
    SocketConnection1.Connected:=False;
    ServerLinked:=False;
  end;
end;
procedure GetServerTime;   //获得系统时间
var
  SystemTime:oleVariant;
  IGetSystemTime:ISchoolMTSDisp;
begin
  if ServerLinked then
  begin
  try
    with DataModule1 do
    begin
      IGetSystemTime:=ISchoolMTSDisp(IDisPatch(SocketConnection1.Appserver));
      IGetSystemTime.GetSystemTime(SystemTime);
    end;
    //ClientMainForm.mbSystem.Lines.Clear;
    ClientMainForm.mbSystem.Lines.Add('服务器时间:'+SystemTime);
  except on E:exception do
   begin
     MessageDlg('请确定您是否有足够的权限'+#13#10+'及是否已成功的登陆到服务器!',
     mtInformation,[mbOK],0);
   end;
  end;
end
else
  MessageDlg(NoGetupMessage,mtInformation,[mbOK],0);
end;

procedure GetAllTables;   //获得服务器数据表
var
  IGetAllTables:ISchoolMTSDisp;
  ClientTbList:OleVariant;
  icount:Integer;
begin
  ClientMainForm.ServerTableListBox.Items.Clear;
  if ServerLinked then              //判断连接状态
  begin
  IGetAllTables:=ISchoolMTSDisp
    (IDispatch(DataModule1.SocketConnection1.AppServer));
  IGetAllTables.GetAllTables(ClientTbList);
  if (VarIsArray(ClientTbList))then
  begin
    for icount:=VarArrayLowBound(ClientTbList,1)
       to VarArrayHighBound(ClientTbList,1) do
    begin
      with ClientMainForm do
      begin
        ServerTableListBox.Items.Add(ClientTbList[icount]);
      end;
    end;

  end;
end;
end;

procedure GetAllFields;
begin
  with ClientMainForm do
  ComboBox1.Items.Clear;
  if ServerLinked then
  begin
    with DataModule1 do
    begin
      ClientDataSet1.GetFieldNames(ClientMainForm.ComboBox1.Items);
    end;
  end;
end;
procedure GetHostName;
begin
  ClientMainForm.mbSystem.Lines.Add
    ('主机名:'+DataModule1.SocketConnection1.Host);
end;
procedure TClientMainForm.sbShutdownClick(Sender: TObject);
begin
  ShutdownLation;
  StatusBar1.Panels[0].Text:=NoGetupMessage;
  mbSystem.Lines.Clear;
  ServerTableListBox.Items.Clear;
end;

procedure TClientMainForm.SpeedButton4Click(Sender: TObject);
begin
  if ServerLinked then
  with DataModule1 do
  begin
    ClientDataSet1.CancelUpdates;
  end;
end;

//数据库操纵模块

procedure TClientMainForm.sbSaveClick(Sender: TObject);

⌨️ 快捷键说明

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