📄 mainfrm.~pas
字号:
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, ExtCtrls, StdCtrls, DBCtrls, Grids, DBGrids, DBTables, Db,
ToolWin, ComCtrls,iniFiles;
const
DbAlias='StudentScore';
iniFileName='user\DBDSCore.ini';
ShiTiShuMax=40;
type
TMainForm = class(TForm)
dsTable: TDataSource;
Table1: TTable;
Query1: TQuery;
dsQuery: TDataSource;
DBGrid: TDBGrid;
Navigator: TDBNavigator;
bbtnState: TBitBtn;
Label1: TLabel;
EdtStuno: TEdit;
CoolBar1: TCoolBar;
sbADD: TSpeedButton;
sbQuery: TSpeedButton;
sbChart: TSpeedButton;
sbAbout: TSpeedButton;
sbClose: TSpeedButton;
Database1: TDatabase;
sbOption: TSpeedButton;
procedure bbtnStateClick(Sender: TObject);
procedure EdtStunoKeyPress(Sender: TObject; var Key: Char);
procedure sbQueryClick(Sender: TObject);
procedure sbChartClick(Sender: TObject);
procedure sbADDClick(Sender: TObject);
procedure sbOptionClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure sbAboutClick(Sender: TObject);
procedure sbCloseClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure DBGridColExit(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
procedure UniformState();
{ Private declarations }
public
procedure GetFieldMax(var FieldMax:array of integer);
{ Public declarations }
end;
var
MainForm: TMainForm;
AFieldCount:0..40;
SQLCond:string;
implementation
uses QueryFrm, CharFrm, AddNewFrm, ParamFrm, AboutFrm;
{$R *.DFM}
procedure TMainForm.bbtnStateClick(Sender: TObject);
begin
MainForm.Tag:=(MainForm.Tag+1) Mod 2;
UniFormState;
end;
procedure TMainForm.UniformState;
begin
if MainForm.Tag=0 then //编辑状态
begin
DBGrid.DataSource:=dsTable;
Navigator.DataSource:=dsTable;
EdtStuno.Enabled:=True;
Table1.Active:=true;
//Table.Filter
DbGrid.ReadOnly:=False;
bbtnState.Caption:='浏览数据';
end
else begin
DbGrid.DataSource:=dsQuery;
Navigator.DataSource:=dsQuery;
EdtStuno.Enabled:=False;
Query1.Active:=True;
//Query1.Sql
DbGrid.ReadOnly:=True;
bbtnState.Caption:='编辑数据';
end;
end;
procedure TMainForm.EdtStunoKeyPress(Sender: TObject; var Key: Char);
begin
if Key in [#13,#9] then
begin
if Table1.Locate('学号',Trim(EdtStuno.Text),[loPartialKey]) then
DbGrid.SetFocus;
end;
end;
procedure TMainForm.GetFieldMax(var FieldMax:array of integer);
// FieldMax is Array from 0 to 39
var
IniFile:TIniFile;
FieldName:string;
i,FieldValue:integer;
begin
IniFile:=TIniFile.Create(MainFrm.IniFileName);
for i:=4 to MainForm.Query1.FieldCount-1 do
begin
FieldName:=MainForm.Query1.Fields[i].FieldName;
FieldValue:=Inifile.ReadInteger('DBStructure',FieldName,0);
FieldMax[i-4]:=FieldValue;
end;
IniFile.Free;
end;
procedure TMainForm.sbQueryClick(Sender: TObject);
begin
MainForm.Tag:=1;
UniFormState;
QueryForm:=TQueryForm.Create(Self);
MainForm.Hide;
QueryForm.Show;
end;
procedure TMainForm.sbChartClick(Sender: TObject);
begin
MainForm.Hide;
ChartForm.DecisionQuery1.Close;
ChartForm.DecisionQuery1.SQL.Text:='SELECT 学号, 姓名, 缺考, 总成绩, 第一题,'+
' 第二题, 第三题, 第四题, 第五题, 第六题, 第七题, 第八题,'+
'COUNT( 学号 ), COUNT( 缺考 ), SUM( 总成绩 )'+
'FROM StudentScore'+SQlCond+' GROUP BY 学号, 姓名, 缺考, 总成绩, 第一题,'+
' 第二题, 第三题, 第四题, 第五题, 第六题, 第七题, 第八题';
ChartForm.DecisionQuery1.open;
ChartForm.Show;
end;
procedure TMainForm.sbADDClick(Sender: TObject);
begin
AddNewForm:=TAddNewForm.Create(self);
MainForm.Hide;
AddNewForm.Show;
end;
procedure TMainForm.sbOptionClick(Sender: TObject);
begin
ParamForm:=TParamForm.Create(self);
MainForm.Hide;
ParamForm.Show;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var
IniFile:TIniFile;
FieldName:string;
i,j:integer;
FieldVisible:Boolean;
begin
SQLCond:='';
IniFile:=TIniFile.Create(IniFileName);
AFieldCount:=Inifile.ReadInteger('DBStructure','试题数',1);
for i:=0 to Query1.FieldCount-1 do
begin
FieldName:=Query1.Fields[i].FieldName;
if i>AFieldCount+3 then //如果大于试题总数则不显示
FieldVisible:=False
else //否则从配置文件中取值
FieldVisible:=Inifile.ReadBool('Display',FieldName,False);
DbGrid.Columns[i].Visible:=FieldVisible;
// Table1.Fields[0].Visible:=FieldVisible;
end;
IniFile.Free;
end;
procedure TMainForm.sbAboutClick(Sender: TObject);
begin
AboutForm:=TAboutForm.Create(self);
MainForm.Hide;
AboutForm.Show;
end;
procedure TMainForm.sbCloseClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin
ParamForm:=TParamForm.Create(self);
MainForm.Hide;
ParamForm.Show;
end;
procedure TMainForm.DBGridColExit(Sender: TObject);
var
FieldMax:array[0..40] of integer;
begin
{ GetFieldMax(FieldMax);
if DBGrid.SelectedField<>nil then
with DBGrid.SelectedField do
begin
if asFloat>FieldMax[index] then
begin
Showmessage('输入数据大于该题分数上限!');
asFloat:=FieldMax[index];
end;
end;}
end;
procedure TMainForm.FormPaint(Sender: TObject);
begin
sbQuery.Hint:=sbQuery.Hint+' '+SQLCond;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -