📄 maindata.~pas
字号:
unit MainData;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DB, DBTables, ADODB;
type
TDatarenshi = class(TDataModule)
ADOTable1: TADOTable;
DataSource1: TDataSource;
ADOTable1BH: TAutoIncField;
ADOTable1XM: TWideStringField;
ADOTable1XB: TWideStringField;
ADOTable1MZ: TWideStringField;
ADOTable1CSNY: TDateTimeField;
ADOTable1SFZ: TWideStringField;
ADOTable1DH: TWideStringField;
ADOTable1XX: TWideStringField;
ADOConnection1: TADOConnection;
ADOTable1JG: TWideStringField;
ADOTable1BMBH: TWideStringField;
ADOTable1ZZ: TWideStringField;
ADOTable1BZ: TMemoField;
DataSource2: TDataSource;
ADOTable2: TADOTable;
ADOTable3: TADOTable;
ADOTable4: TADOTable;
DataSource3: TDataSource;
DataSource4: TDataSource;
ADOQuery1: TADOQuery;
DataSource5: TDataSource;
ADOTable1XLMC: TWideStringField;
ADOTable1zcbh: TWideStringField;
{procedure ADOTable1BeforeDelete(DataSet: TDataSet);
procedure ADOTable1BeforeInsert(DataSet: TDataSet);
procedure ADOTable1NewRecord(DataSet: TDataSet);
procedure ADOTableCYBeforeDelete(DataSet: TDataSet);
procedure ADOTable1AfterPost(DataSet: TDataSet);
procedure ADOTable1CSNYValidate(Sender: TField);
procedure ADOTableCYAfterPost(DataSet: TDataSet);
procedure ADOTableCYNewRecord(DataSet: TDataSet);
procedure ADOTable1CalcFields(DataSet: TDataSet);
procedure ADOTableCYCalcFields(DataSet: TDataSet);
procedure ADOTableCYCSNYValidate(Sender: TField);
procedure ADOTable1RSValidate(Sender: TField);
procedure ADOTable1SFZValidate(Sender: TField);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
procedure ADOTable1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
procedure ADOTableCYPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
procedure ADOTable1XMChange(Sender: TField);
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//function Confirm(Msg: string): Boolean; //信息确认
var
Datarenshi: TDatarenshi;
IsAddNewHZ:Boolean; //记录新增标记
IsAddNewCY:Boolean;
IsXMChanged:Boolean; //修改姓名
OldXM : string; //原姓名
implementation
{$R *.dfm}
{const
DatasetStates: array[TDataSetState] of string =
('Not active', 'Browsing', 'Editing', 'Inserting',
'', '', '', '', '','', '', '', ''); //13个,一个都不能少
function Confirm(Msg: string): Boolean;
begin
Result := MessageDlg(Msg, mtConfirmation, mbYesNoCancel, 0) = mrYes;
end;
procedure TDataHJZL.ADOTable1BeforeDelete(DataSet: TDataSet);
var
msg:string;
begin
msg:='如果删除户主,与该户主相关的所有资料将被全部删除!';
msg:=msg+#13#10+#13#10+' 确定要删除['+AdoTableHZXM.Value+']吗?' ;
If (Application.MessageBox(pchar(MSG),'删除确认',MB_OKCANCEL+MB_ICONQUESTION+MB_DEFBUTTON2)=2)
then SysUtils.Abort
//if not Confirm(msg) then Abort
else Begin //删除XMPY表相关记录,成员表因已与户主表相关联,可不处理
With ADOTableXMPY DO
begin
DisableControls ; //解除组件绑定,加快执行速度
try
While Locate('BH',ADOTableHZBH.Value,[]) do DELETE;
finally
EnableControls;
end;
end;
end;
end;
procedure TDataHJZL.ADOTable1BeforeInsert(DataSet: TDataSet);
begin
if AdotableHZ.State in dsEditModes then
begin
if Confirm('正在编辑记录,保存修改后新增记录吗?') then
ADOTableHZ.Post
else
Abort;
end;
end;
procedure TDataHJZL.ADOTable1NewRecord(DataSet: TDataSet);
begin
IsAddNewHZ:=True;//设定增加记录标记,存盘后复位
with ADOTableBH do
begin
Open;
AdoTableHZBH.Value := ADOTableBHnextbh.Value; //户主新编号
Close;
end;
//设定初始值
ADOTableHZJTH.Value:=True;
AdoTableHZXB.Value:='男';
AdoTableHZMZ.Value:='汉族';
AdoTableHZCSNY.Value:=Date-30*365 ;
AdoTableHZWH.Value:='高中';
AdoTableHZRS.Value:=1;
end;
procedure TDataHJZL.ADOTableCYBeforeDelete(DataSet: TDataSet);
var
msg:string;
begin
//msg:=' 确定要删除家庭成员['+AdoTableCYXM.Value+']吗?' ;
if not Confirm(msg) then Abort ;
end;
procedure TDataHJZL.ADOTable1AfterPost(DataSet: TDataSet);
begin
//IF AdoTableCY.State in dsEditModes THEN
// AdoTableCY.Post; //成员数据存盘
If IsXMChanged and not IsAddNewHZ then //修改户主姓名时修改XMPY中相应姓名
with DataHJZL do
BEGIN
ADOCommandTMP.CommandText:='update xmpy set XM=ADOTableHZXM.Value where xm=oldxm and BH=ADOTableHZBH.Value';
ADOCommandTMP.Execute;
IsXMChanged:=False;
end;
IF IsAddNewHZ THEN BEGIN //新增户主时在XMPY表中增加相应记录
//SQL操纵语句 不能应用于表
WITH AdoTableXMPY DO
BEGIN
Open;
Append;
FieldByName('BH').AsInteger:= ADOTableHZBH.Value;
FieldByName('xm').AsString:= ADOTableHZXM.Value;
FieldByName('py').AsString:= GetPY(ADOTableHZXM.Value);
FieldByName('hz').AsBoolean:=True;
Post;
END;
// 户主编号递增1
with ADOTableBH do
begin
try
Open;
Edit;
ADOTableBHnextbh.Value := ADOTableBHnextbh.Value + 1; //设定下一编号
Post;
finally
Close;
//showmessage('编号已增加');
end;
end;//with ADOTableBH do
IsAddNewHZ:=False; //增加标记复位
END;//IF IsAddNewHZ THEN BEGIN
end;
{procedure TDataHJZL.ADOTableHZCSNYValidate(Sender: TField);
begin
If ADOTableHZCSNY.Value>Date-16*365 Then
Raise Exception.Create('户主的年龄不能小于16岁!');
end;
procedure TDataHJZL.ADOTableCYAfterPost(DataSet: TDataSet);
begin
if IsAddNewCY THEN BEGIN //成员新增时在XMPY表中增加相应记录
WITH AdoTableXMPY DO
BEGIN
Append;
FieldByName('BH').AsInteger:= ADOTableCYBH.Value;
FieldByName('xm').AsString:= ADOTableCYXM.Value;
FieldByName('py').AsString:= GetPY(ADOTableCYXM.Value);
FieldByName('hz').AsBoolean:=False;
Post;
END;
IsAddNewCY:=False;//恢复新增标记
END; //IF
END;
procedure TDataHJZL.ADOTableCYNewRecord(DataSet: TDataSet);
begin
IsAddNewCY:=True; //新增标记为真,存盘完成后复位
//设定初始值
AdoTableCYXB.Value:='男';
AdoTableCYMZ.Value:='汉族';
AdoTableCYCSNY.Value:=Date-16*365 ;
AdoTableCYWH.Value:='高中';
end;
procedure TDataHJZL.ADOTable1CalcFields(DataSet: TDataSet);
var
dCSNY: TDateTime;
Year, Month, Day: Word;
Year2, Month2, Day2: Word;
begin
dCSNY:=ADOTableHZCSNY.Value;
DecodeDate(date,year,month,day);
DecodeDate(dCSNY,year2,month2,day2);
if NOT datahjzl.ADOTableHZCSNY.IsNull then
ADOTableHZNL.Value:=year-year2; //计算户主年龄
end;
procedure TDataHJZL.ADOTableCYCalcFields(DataSet: TDataSet);
var
dCSNY: TDateTime;
Year, Month, Day: Word;
Year2, Month2, Day2: Word;
begin
dCSNY:=ADOTableCYCSNY.Value;
DecodeDate(date,year,month,day); //分解时间,要先定义变量
DecodeDate(dCSNY,year2,month2,day2);
if NOT datahjzl.ADOTableCYCSNY.IsNull then
ADOTableCYNL.Value:=year-year2; //计算成员年龄
end;
procedure TDataHJZL.ADOTableCYCSNYValidate(Sender: TField);
begin
If ADOTableCYCSNY.Value>=Date Then
Raise Exception.Create('当前家庭成员的出生年月不能是当前日期或未来的日期!');
end;
procedure TDataHJZL.ADOTable1RSValidate(Sender: TField);
begin
If ADOTableHZRS.Value>10 Then
Raise Exception.Create('家庭成员过多!(不能多于10人)');
end;
procedure TDataHJZL.ADOTable1SFZValidate(Sender: TField);
var L:Integer;
begin
L:=Length(ADOTableHZSFZ.Value);
IF L<>15 THEN
if L<>18 THEN
Raise Exception.Create('身份证号码的长度只能是15位或18位数字!');
end;
procedure TDataHJZL.DataSource1DataChange(Sender: TObject; Field: TField);
begin
FrmMain.StatusBar1.Panels[0].Text:=
Format('当前数据表:%S 记录总数:%d 当前记录号: %d 当前状态:%S]',
[DataHJZL.AdoTableHZ.TableName,DataHJZL.AdoTableHZ.RecordCount,
DataHJZL.AdoTableHZ.RecNo, AdoTableHZ.State);
end;
procedure TDataHJZL.ADOTable1PostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
Raise Exception.Create('户主表中的姓名、性别、住户页号、现居住地等不能空白,请检查是否已输入?'
+#13+#13+'如果不是,可能是其它错误,请仔细检查!'
+#13+#13+'再不能存盘,你可取消所作的修改!') ;
end;
procedure TDataHJZL.ADOTableCYPostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
Raise Exception.Create('家庭成员表中的姓名、关系、性别等不能空白,请检查是否已输入?'
+#13+#13+'如果不是,可能是其它错误,请仔细检查!或取消修改') ;
end;
procedure TDataHJZL.ADOTable1XMChange(Sender: TField);
begin
//IsXMChanged:=True;
// OldXM:=ADOTableHZXM.OldValue
end;
procedure TDataHJZL.DataModuleCreate(Sender: TObject);
begin
LongDateFormat := 'yyyy.mm.dd';
ShortDateFormat := 'yyyy.mm.dd';
DateSeparator := '.';
end; }
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -