📄 studentmain1.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 + -