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

📄 maindata.~pas

📁 我的小程序 是人事管理系统 很好的 并且有可执行文件 但是没有实验的好
💻 ~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 + -