📄 data.pas
字号:
unit data;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables;
type
Tds_data = class(TDataModule)
DS_sbgl: TDataSource;
Qu_sbsys: TQuery;
Qu_sbgl: TQuery;
Qu_yhgl: TQuery;
DS_yhgl: TDataSource;
Qu_yhsys: TQuery;
Qu_temp_1: TQuery;
Qu_zwb: TQuery;
Qu_temp_2: TQuery;
Qu_yhsj: TQuery;
ds_yhsj: TDataSource;
Qu_sjjl: TQuery;
Qu_yhsj_ref: TQuery;
Qu_sbzt: TQuery;
Qu_yhzt: TQuery;
Qu_jckj: TQuery;
Qu_sjzt: TQuery;
Qu_jlzt: TQuery;
Qu_jlztx: TQuery;
Qu_yhztx: TQuery;
Qu_sjztx: TQuery;
Qu_temp_3: TQuery;
Qu_sbdp: TQuery;
Qu_yhdp: TQuery;
Qu_jckjx: TQuery;
Qu_jlztx1: TQuery;
Qu_yyse: TQuery;
Qu_yysb: TQuery;
Qu_yypd: TQuery;
Qu_upf: TQuery;
Qu_yyold: TQuery;
Qu_sjold: TQuery;
Qu_pass: TQuery;
Qu_chpw: TQuery;
Qu_chqx: TQuery;
Qu_qxcount: TQuery;
Qu_yyjlup: TQuery;
Qu_yysbup: TQuery;
Qu_yygetsjd: TQuery;
Qu_getsjd: TQuery;
Qu_sjgetsjd: TQuery;
procedure Qu_sbglPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
procedure Qu_yhglPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
procedure Qu_sbglBeforeDelete(DataSet: TDataSet);
procedure Qu_yhglBeforeDelete(DataSet: TDataSet);
procedure Qu_sbglBeforeEdit(DataSet: TDataSet);
procedure Qu_yhglBeforeEdit(DataSet: TDataSet);
procedure Qu_sbglBeforePost(DataSet: TDataSet);
function Get_sbgl_num : string;
function Get_yhgl_num : string;
function Get_sbgl_setnum : string;
function Get_yhgl_sjnum : string;
procedure Qu_yhglBeforePost(DataSet: TDataSet);
Function search_old : Boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
ds_data: Tds_data;
EditNum : string; //编辑时的编号内容
Editsetnum,Editsjnum : string; //编辑时的座位号、上机证内容
i : integer;
implementation
uses gbv, yhgl;
{$R *.DFM}
procedure Tds_data.Qu_sbglPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
//编号重复错误
Application.MessageBox('此编号已存在,请更改编号。', '错误', Mb_OK);
Action:=daAbort;
end;
procedure Tds_data.Qu_yhglPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
//学号重复错误
Application.MessageBox('此学号已存在,请更改学号。', '错误', Mb_OK);
Action:=daAbort;
end;
function Tds_data.Get_sbgl_num() : string;
begin //得到设备字段num的显示名字
with ds_data.Qu_temp_3 do
begin
close;
sql.clear;
sql.add('select ch2 From sbsys Where ch1=''num''');
open;
result:=FieldByName('ch2').AsString;
close;
end;
end;
function Tds_data.Get_sbgl_setnum() : string;
begin //得到设备字段setnum的显示名字
with ds_data.Qu_temp_3 do
begin
close;
sql.clear;
sql.add('select ch2 From sbsys Where ch1=''setnum''');
open;
result:=FieldByName('ch2').AsString;
close;
end;
end;
function Tds_data.Get_yhgl_sjnum() : string;
begin //得到用户字段sjnum的显示名字
with ds_data.Qu_temp_3 do
begin
close;
sql.clear;
sql.add('select ch2 From yhsys Where ch1=''sjnum''');
open;
result:=FieldByName('ch2').AsString;
close;
end;
end;
function Tds_data.Get_yhgl_num() : string;
begin //得到用户字段num的显示名字
with ds_data.Qu_temp_3 do
begin
close;
sql.clear;
sql.add('select ch2 From yhsys Where ch1=''num''');
open;
result:=FieldByName('ch2').AsString;
close;
end;
end;
procedure Tds_data.Qu_sbglBeforeEdit(DataSet: TDataSet);
var used,fused : string;
begin //修改判断
//保存编号内容
EditNum:=ds_data.Qu_sbgl.FieldByName(Get_sbgl_num).AsString;
//得到used和fused的内容
with ds_data.Qu_temp_1 do
begin
Close;
Sql.Clear;
Sql.Add('Select used,fused From sbgl Where num=:delnum');
ParamByName('delnum').value:=EditNum;
Open;
used:=FieldByName('used').AsString;
fused:=FieldByName('fused').AsString;
Close;
end;
//判断是否使用
if used='True' then
Application.MessageBox('该设备正在使用,不能修改。', '提示', Mb_Ok)
else
if fused='True' then
Application.MessageBox('该设备将被使用,不能修改。', '提示', Mb_Ok);
if (used='True') or (fused='True') then Abort; //放弃修改
end;
procedure Tds_data.Qu_yhglBeforeEdit(DataSet: TDataSet);
var used,fused : string;
begin //修改判断
//保存学号内容
EditNum:=ds_data.Qu_yhgl.FieldByName(Get_yhgl_num).AsString;
//得到used和fused的内容
with ds_data.Qu_temp_2 do
begin
Close;
Sql.Clear;
Sql.Add('Select used,fused From yhgl Where num=:delnum');
ParamByName('delnum').value:=EditNum;
Open;
used:=FieldByName('used').AsString;
fused:=FieldByName('fused').AsString;
Close;
end;
//判断是否使用
if used='True' then
Application.MessageBox('该用户正在使用设备,不能修改。', '提示', Mb_Ok)
else
if fused='True' then
Application.MessageBox('该用户将使用设备,不能修改。', '提示', Mb_Ok);
if (used='True') or (fused='True') then Abort; //放弃修改
end;
procedure Tds_data.Qu_sbglBeforeDelete(DataSet: TDataSet);
var used,fused : string;
begin //删除判断
if Application.MessageBox('删除该设备?', '询问', Mb_OKCancel)=Id_Ok then
begin
//得到used和fused的内容
with ds_data.Qu_temp_1 do
begin
Close;
Sql.Clear;
Sql.Add('Select used,fused From sbgl Where num=:delnum');
ParamByName('delnum').value:=ds_data.Qu_sbgl.FieldByName(Get_sbgl_num).AsString;
Open;
used:=FieldByName('used').AsString;
fused:=FieldByName('fused').AsString;
Close;
end;
//判断是否使用
if used='True' then
Application.MessageBox('该设备正在使用,不能删除。', '提示', Mb_Ok)
else
if fused='True' then
Application.MessageBox('该设备将被使用,不能删除。', '提示', Mb_Ok);
if (used='True') or (fused='True') then Abort; //放弃删除
end
else
Abort; //放弃删除
end;
procedure Tds_data.Qu_yhglBeforeDelete(DataSet: TDataSet);
var used,fused : string;
begin //删除判断
if Application.MessageBox('删除该用户?', '询问', Mb_OKCancel)=Id_Ok then
begin
//得到used和fused的内容
with ds_data.Qu_temp_2 do
begin
Close;
Sql.Clear;
Sql.Add('Select used,fused From yhgl Where num=:delnum');
ParamByName('delnum').value:=ds_data.Qu_yhgl.FieldByName(Get_yhgl_num).AsString;
Open;
used:=FieldByName('used').AsString;
fused:=FieldByName('fused').AsString;
Close;
end;
//判断是否使用
if used='True' then
Application.MessageBox('该用户正在使用设备,不能删除。', '提示', Mb_Ok)
else
if fused='True' then
Application.MessageBox('该用户将使用设备,不能删除。', '提示', Mb_Ok);
if (used='True') or (fused='True') then Abort; //放弃删除
end
else
Abort; //放弃删除
end;
procedure Tds_data.Qu_sbglBeforePost(DataSet: TDataSet);
var sncount : integer;
begin
if f_gbv.setnum.Checked then
begin //若setnum显示则
Editsetnum:=ds_data.Qu_sbgl.FieldByName(Get_sbgl_setnum).AsString;
//寻找相同内容的setnum
if EditSetnum<>'' then
begin
//得到记录数
with ds_data.Qu_temp_1 do
begin
Close;
Sql.Clear;
Sql.Add('Select num,setnum From sbgl Where setnum=:postsetnum and num<>:postnum');
ParamByName('postnum').value:=EditNum;
ParamByName('postsetnum').value:=Editsetnum;
Open;
sncount:=RecordCount;
Close;
end;
if sncount>0 then //有冲突
begin
Application.MessageBox('此座位号已存在,请更改座位号。', '错误', Mb_OK);
Abort;
end;
end;
end;
end;
procedure Tds_data.Qu_yhglBeforePost(DataSet: TDataSet);
var sncount : integer;
begin
if f_gbv.sjnum.Checked then
begin //若sjnum显示则
Editsjnum:=ds_data.Qu_yhgl.FieldByName(Get_yhgl_sjnum).AsString;
//寻找相同内容的sjnum
if EditSjnum<>'' then
begin
//得到记录数
with ds_data.Qu_temp_2 do
begin
Close;
Sql.Clear;
Sql.Add('Select num,sjnum From yhgl Where sjnum=:postsjnum and num<>:postnum');
ParamByName('postnum').value:=EditNum;
ParamByName('postsjnum').value:=Editsjnum;
Open;
sncount:=RecordCount;
Close;
end;
if sncount>0 then //有冲突
begin
Application.MessageBox('此上机证号已存在,请更改上机证号。', '错误', Mb_OK);
Abort;
end;
end;
end;
end;
Function Tds_data.search_old() : Boolean;
var wdate,wtime : TDateTime;
sjd : string; //时间段
setnum,sjnum,sjname : string; //座位号、上机证号、上机姓名
begin
Result:=False;
//得到时间
wdate:=Date;
wtime:=Time;
//得到当前时间段
with ds_data.Qu_getsjd do
begin
Close;
ParamByName('dqtime').AsTime:=Time;
Open;
sjd:=IntToStr(4-RecordCount);
Close;
end;
//检测预约过期
with Qu_yyold do
begin
Close;
ParamByName('sjdate').value:=wdate;
ParamByName('sjd').value:=sjd;
Open;
for i:=1 to RecordCount do
begin
//更改上机记录
Result:=True;
Application.MessageBox(PChar('第'+FieldByName('setnum').AsString+'号座位预约过期,'+#13+#10+'被强制取消预约。'),'过期', Mb_OK);
edit;
FieldByName('xjdate').AsString:=DateToStr(wdate);
FieldByName('xjtime').AsString:=TimeToStr(wtime);
FieldByName('qzxj').AsBoolean:=True;
Post;
//下一条预约过期记录
Next;
end;
Close;
end;
//检测上机过期
with Qu_sjold do
begin
Close;
ParamByName('sjdate').value:=wdate;
ParamByName('sjd').value:=sjd;
Open;
for i:=1 to RecordCount do
begin
Result:=True;
setnum:=FieldByName('setnum').AsString;
sjnum:=FieldByName('sjnum').AsString;
sjname:=FieldByName('name').AsString;
Application.MessageBox(PChar(sjname+'用户在第'+setnum+'号座位上机过期,'+#13+#10+'被强制下机。'),'过期', Mb_OK);
//更改设备
with Qu_sbzt do
begin
Close;
ParamByName('setnum').value:=setnum;
Open;
Edit;
FieldByName('used').AsString:='False';
Post;
Close;
end;
//更改用户
with Qu_yhzt do
begin
Close;
ParamByName('sjnum').value:=sjnum;
Open;
Edit;
FieldByName('used').AsString:='False';
Post;
Close;
end;
//更改上机记录
edit;
FieldByName('xjdate').AsString:=DateToStr(wdate);
FieldByName('xjtime').AsString:=TimeToStr(wtime);
FieldByName('qzxj').AsBoolean:=True;
Post;
//下一条上机过期记录
Next;
end;
Close; //关闭上机过期数据库
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -