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

📄 studentmain1.pas

📁 学籍管理
💻 PAS
字号:
{**********************************************************************}
{                    ==================                                }
{                      服务端主程序                                    }
{                   ==================                                 }
{                                    《学籍管理系统》--作者:贺广兵    }
{                                                                      }
{   应用程序服务器的主程序单元,提供了数据源更改跟踪、日志定时和手动   }
{  备份、后台数据库检查三个模块。 使用 INI 文件并定义了六个读写 INI    }
{  文件的重载方法(在客户端我把读写 INI 文件和注册表放在了一个单独的   }
{  单元,以利于维护)。本单元基本上没有涉及到和客户端的交互,数据变    }
{  动检测是通过 REMOTE DAGAMODULE 里的 TPROVIDER 实现的。              }
{  通过实际测试,发现 TCLIENTDATASET 是否有 DATA 与其是否打开无关,但  }
{  要想通过其编辑数据,则必须将其置 EDIT 状态。                        }
{                                                                      }
{**********************************************************************}
unit StudentMain1;

interface

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

type
  TServerMainForm = class(TForm)
    PageControl1: TPageControl;
    ghj: TTabSheet;
    TabSheet2: TTabSheet;
    Panel1: TPanel;
    Memo1: TMemo;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N5: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    ImageList1: TImageList;
    Panel2: TPanel;
    Panel3: TPanel;
    DBGrid2: TDBGrid;
    Splitter1: TSplitter;
    Panel4: TPanel;
    Panel5: TPanel;
    N9: TMenuItem;
    TabSheet1: TTabSheet;
    ClientDataSet1: TClientDataSet;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    ListDataSourceTables: TListBox;
    DataSource1: TDataSource;
    Panel6: TPanel;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    Memo3: TMemo;
    ControlBar1: TControlBar;
    ToolBar2: TToolBar;
    ToolButton7: TToolButton;
    ToolButton6: TToolButton;
    ToolButton11: TToolButton;
    ToolButton12: TToolButton;
    ToolButton10: TToolButton;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    Panel7: TPanel;
    DBGrid1: TDBGrid;
    Panel8: TPanel;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    N6: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    procedure ToolButton6Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure ListDataSourceTablesDblClick(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure ClientDataSet1NewRecord(DataSet: TDataSet);
    procedure ToolButton4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
  private
    procedure GetAllSourceTables;
    function MakeSQLForServerSource:String; //根据数据源信息自动组成SQL语句!
    { Private declarations }
  public
    { Public declarations }
  end;                                    //写ini文件公用方法
function CreateIniFile:TIniFile;
procedure WriteIniFile(SectionName:String;ItemName:String;ItemResult:String);Overload;
procedure WriteIniFile(SectionName:String;ItemName:String;ItemResult:Integer);Overload;
procedure WriteIniFile(SectionName:String;ItemName:String;ItemResult:Boolean);Overload;
function ReadIniFile(SectionName:String;ItemName:String;ItemResult:String):String;overload;
function ReadIniFile(SectionName:String;ItemName:String;ItemResult:Integer):Integer;overload;
function ReadIniFile(SectionName:String;ItemName:String;ItemResult:Boolean):Boolean;overload;
function GetBackupFileName:String;
var
  ServerMainForm: TServerMainForm;
  DataSourceLinked:Boolean=False;  //数据源连接状况
  SysIniFile:TIniFile;
  iCountRecord:Integer;
  BackupFileName:String;   //此应包含路径 的文件名可进一步修改
implementation

uses SchoolManager_TLB, StudentMain, UseManager, DataModuleLocate,ADOConED,
  SystemDisgnUnit, fmAboutServer;//MultiThreadPrintUnit;

{$R *.DFM}
function GetBackupFileName:String;//根据日期得到以当前
var                                               //日期作为备份名
  icount:Integer;
  TimeStr:String;
begin
  TimeStr:=DateTimeToStr(Now);
  for icount:=1 to Length(TimeStr) do
  begin
    if (TimeStr[icount]=':') or (TimeStr[icount]=' ') then
    TimeStr[icount]:='-';
  end;
  Result:=TimeStr;
end;
procedure WriteIniFile(SectionName:String;ItemName:String;ItemResult:String);
begin                                  //定义三个写INI方法
  SysIniFile:=CreateIniFile;
  SysIniFile.WriteString(SectionName,ItemName,ItemResult);
  SysIniFile.Free;
end;
procedure WriteIniFile(SectionName:String;ItemName:String;ItemResult:Integer);
begin
  SysIniFile:=CreateIniFile;
  SysIniFile.WriteInteger(SectionName,ItemName,ItemResult);
  SysIniFile.Free;
end;
procedure WriteIniFile(SectionName:String;ItemName:String;ItemResult:Boolean);
begin
  SysIniFile:=CreateIniFile;
  SysIniFile.WriteBool(SectionName,ItemName,ItemResult);
  SysIniFile.Free;
end;

function ReadIniFile(SectionName:String;ItemName:String;ItemResult:String):String;
begin                               //定义三个读INI文件方法
  SysIniFile:=CreateIniFile;
  Result:=SysIniFile.ReadString(SectionName,ItemName,ItemResult);
  SysIniFile.Free;
end;
function ReadIniFile(SectionName:String;ItemName:String;ItemResult:Integer):Integer;
begin
  SysIniFile:=CreateIniFile;
  Result:=SysIniFile.ReadInteger(SectionName,ItemName,ItemResult);
  SysIniFile.Free;
end;
function ReadIniFile(SectionName:String;ItemName:String;ItemResult:Boolean):Boolean;
begin
  SysIniFile:=CreateIniFile;
  Result:=SysIniFile.ReadBool(SectionName,ItemName,ItemResult);
  SysIniFile.Free;
end;

procedure TServerMainForm.ToolButton6Click(Sender: TObject);
var
  icount:Integer;
begin
  try
  if ClientDataSet1.RecordCount>0 then
  begin
    ClientDataSet1.Edit;  //必须打开,否则报错
    for icount:=0 to ClientDataSet1.RecordCount do
    ClientDataSet1.ClearFields;
    Memo1.Lines.Clear;
    ClientDataset1.Close;
  end;
  except on E:Exception do
  MessageDlg('无更新的记录可以清除!',mtInformation,[mbOK],0);
  end;
end;

procedure TServerMainForm.N4Click(Sender: TObject);
begin
   //SChoolMTS.LinkDataBase;
  //fmUserManagerfm.ShowModal;
end;

procedure TServerMainForm.GetAllSourceTables;    //获得数据源所有表
var
  tbList:TStringList;
  icount:Integer;
begin
  tbList:=TStringList.Create;
  try
    LocateData.ADOConnectionDataSource.GetTableNames(tbList);
    //TablesNames:=VarArrayCreate([0,tblist.Count-1],VarVariant);
    for icount:=0 to tbList.Count-1 do
    begin
      ListDataSourceTables.Items[icount]:=tbList.Strings[icount];
    end;
  finally
    tbList.Free;
  end;
end;
procedure TServerMainForm.SpeedButton2Click(Sender: TObject);
begin
  try
    with LocateData do
    begin
      ADOConnectionDataSource.Close;
      EditConnectionString(ADOConnectionDataSource);
      ADOConnectionDataSource.Open;
      DataSourceLinked:=True;
      GetAllSourceTables;
      Application.MessageBox('连接成功!!!','成功信息',MB_DEFBUTTON1);
    end;
  except on E:Exception do
    begin
     with LocateData do ADOConnectionDataSource.Close;
     DataSourceLinked:=False;
     Application.MessageBox('连接失败,请检查设置!','错误信息',MB_DEFBUTTON1);
    end;
  end;
end;

function TServerMainForm.MakeSQLForServerSource:String;
begin               //根据数据源信息自动组成SQL语句!  (实现代码)
  if DataSourceLinked then
  begin
    Result:='SELECT * FROM '+
       ListDataSourceTables.Items[ListDataSourceTables.ItemIndex];
  end;
end;
procedure TServerMainForm.ListDataSourceTablesDblClick(Sender: TObject);
begin
  try
   with LocateData do
   begin
     ADODataSetDataSource.Close;
     ADODataSetDataSource.CommandText:=MakeSQLForServerSource;
     ADODataSetDataSource.Open;
     Memo3.Lines.Clear;
     Memo3.Lines.Add('记录总计有:'+
        IntToStr(ADODataSetDataSource.RecordCount)+' 笔');
   end;
  except on E:Exception do
  begin
     with LocateData do
     ADODataSetDataSource.Close;
     Application.MessageBox('打开数据表失败,请检查数据库连接!','错误信息',MB_DEFBUTTON1)
  end;
  end;
end;

procedure TServerMainForm.ToolButton1Click(Sender: TObject);
begin
  fmSystemDisgn.ShowModal;
end;

procedure TServerMainForm.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  if OpenDialog1.FileName<>''then
  Memo2.Lines.LoadFromFile(OpenDialog1.FileName);
end;

procedure TServerMainForm.Button2Click(Sender: TObject);
begin
  Memo2.Lines.Clear;
end;

function CreateIniFile: TIniFile; //建立INI文件
var
  FileName:String;
  FilePath:String;
begin
  FilePath:=ExtractFilePath(Application.ExeName);
  if FilePath[Length(FilePath)-1]<>'\' then
  FileName:=FilePath+'\Sys.ini'
  else
  FileName:=FilePath+'Sys.ini';
  Result:=TIniFile.Create(FileName);
end;

procedure TServerMainForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if MessageBox(ServerMainForm.Handle,'应用程序正在运行,真的关闭吗?','关闭程序',MB_OKCANCEL)<>IDOK then
  CanClose:=False;
end;

procedure TServerMainForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
   WriteIniFile('MainFormSize','top',top);
   WriteIniFile('MainFormSize','left',left);
   WriteIniFile('MainFormSize','width',width);
   WriteIniFile('MainFormSize','height',height);
end;

procedure TServerMainForm.FormCreate(Sender: TObject);
begin
   top:=ReadIniFile('MainFormSize','top',top);
   left:=ReadIniFile('MainFormSize','left',left);
   width:=ReadIniFile('MainFormSize','width',width);
   height:=ReadIniFile('MainFormSize','height',height);
   iCountRecord:=ReadIniFile('系统选项设置','数据笔数',0);
end;

procedure TServerMainForm.N9Click(Sender: TObject);
begin
  PageControl1.ActivePageIndex:=2;
end;

procedure TServerMainForm.ClientDataSet1NewRecord(DataSet: TDataSet);
begin
  if ClientDataSet1.RecordCount>iCountRecord-1 then
  begin
    BackupFileName:=GetBackupFileName+'.txt';
    ClientDataSet1.SaveToFile(BackupFileName);
  end;
end;

procedure TServerMainForm.ToolButton4Click(Sender: TObject);
begin
   BackupFileName:=GetBackupFileName+'.txt';
   ClientDataSet1.SaveToFile(BackupFileName);
   MessageBox(ServerMainForm.Handle,'成功保存','当前记录成功保存!',MB_ICONASTERISK);
end;

procedure TServerMainForm.Button3Click(Sender: TObject);
begin
  //try
   // with SchoolMTS do
   // begin
      //ADOConnection1.Close;
     // EditConnectionString(ADOConnection1);
     // ADOConnection1.Open;
     // Application.MessageBox('连接成功!!!','成功信息',MB_DEFBUTTON1);
    //end;
  //except on E:Exception do
   // begin
    // with SchoolMTS do ADOConnection1.Close;
    // Application.MessageBox('连接失败,请检查设置!','错误信息',MB_DEFBUTTON1);
   // end;
 // end;
end;

procedure TServerMainForm.Button5Click(Sender: TObject);
begin
  //with SchoolMTS do
  //if not ADOConnection1.Connected then
  //begin
  // try
   // ADOConnection1.Connected:=True;
  // finally
   // ADOConnection1.Connected:=False;
  // end;
 // end;

end;

procedure TServerMainForm.SpeedButton1Click(Sender: TObject);
begin
  with LocateData do
  if ADOConnectionDataSource.Connected then
  ADOConnectionDataSource.Close;
end;

procedure TServerMainForm.Button4Click(Sender: TObject);
begin
  with SchoolMTS do
  if ADOConnection1.Connected and (ADODataSetXiB.Active=True) then
  begin
    ADOConnection1.Close;
    ADODataSetXiB.Close;
  end;
end;

procedure TServerMainForm.N8Click(Sender: TObject);
begin
  fmAbout.ShowModal;
end;

end.

⌨️ 快捷键说明

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