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

📄 unitdata.~pas

📁 社区服务系统
💻 ~PAS
字号:
unit UnitData;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, StdCtrls, ExtCtrls, Buttons, DB, ADODB;

type
  TfrmData = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    DBGrid1: TDBGrid;
    GroupBox3: TGroupBox;
    bbtnAdd: TBitBtn;
    bbtnModify: TBitBtn;
    bbtnSave: TBitBtn;
    bbtnCancel: TBitBtn;
    bbtnExit: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    edtDId: TEdit;
    edtDName: TEdit;
    cbxDtypeName: TComboBox;
    MemData: TMemo;
    adolist: TADOQuery;
    DataSource1: TDataSource;
    procedure bbtnAddClick(Sender: TObject);
    procedure bbtnModifyClick(Sender: TObject);
    procedure bbtnCancelClick(Sender: TObject);
    procedure bbtnExitClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure adolistAfterScroll(DataSet: TDataSet);
    procedure bbtnSaveClick(Sender: TObject);
  private
    { Private declarations }
    procedure ButtonState(btag : integer);                                //按钮状态
    procedure showlist;                                                   //显示列表
    procedure iniCombox;                                                  //初始化Combox
  public
    { Public declarations }
  end;

var
  frmData: TfrmData;
  iflag : integer;                                                        //操作标志,如添加为1,修改为2
  strDId : string;                                                        //数据编号
const DOADD = 1;
const DOMODIFY = 2;
const DOCANCEL = 3;
const DOSHOW = 4;

implementation
uses UnitADOConn;
{$R *.dfm}
procedure TfrmData.ButtonState(btag : integer);
begin
  case btag of
  1 :                                                        //添加时按钮状态
    begin
      bbtnModify.Enabled := false;
      bbtnSave.Enabled := true;
      bbtnCancel.Enabled := true;
    end;
  2:                                                         //修改
    begin
      bbtnAdd.Enabled := false;
      bbtnSave.Enabled := true;
      bbtnCancel.Enabled := true;
    end;
  3:                                                         //取消
    begin
      bbtnadd.Enabled := true;
      bbtnModify.Enabled := true;
      bbtnSave.Enabled := false;
    end;
  4:                                                        //显示状态  
    begin
      bbtnadd.Enabled := true;
      bbtnModify.Enabled := true;
      bbtnSave.Enabled := false;
    end;
  end;
end;

procedure TfrmData.bbtnAddClick(Sender: TObject);
var
  strTmp : string;
begin
  iflag := DOADD;
  buttonState(DOADD);
try
  adopub.SQL.Text := 'select max(DId) from TDataParam';    //取数据库中最大的编号,新添加的编号即为最大编号+1
  adopub.Open;
  if adopub.RecordCount<>0 then
  begin
    strTmp := inttostr(strtoint(adopub.Fields[0].text)+1);
    if length(strTmp)=1 then
      strTmp :='00'+strTmp
    else if length(strTmp)=2 then
           strTmp :='0'+strTmp;
    edtDId.Text := strTmp;
    edtDId.ReadOnly := true;
  end;
  adopub.Close;
  cbxDTypeName.Text := '';
  edtDName.Text := '';
  edtDName.ReadOnly := false;
  memData.Text := '';
  memData.ReadOnly := false;
except
  on e:exception do
  showmessage(e.Message);
end;
end;

procedure TfrmData.bbtnModifyClick(Sender: TObject);
begin
  iflag := DOMODIFY;
  ButtonState(DOMODIFY);
  edtDId.ReadOnly := true;
  edtDName.ReadOnly := false;
  memData.ReadOnly := false;
end;

procedure TfrmData.bbtnCancelClick(Sender: TObject);
begin
  ButtonState(DOCANCEL);
  if iflag = 1 then                                                       //按添加后按取消
  begin
  edtDId.Text := adolist.fieldbyname('DId').AsString;
  strDId := edtDId.Text;
  cbxDtypeName.Text := adolist.fieldbyname('DTypeId').AsString+'['+adolist.fieldbyname('DTypeName').AsString+']';
  edtDName.Text := adolist.fieldbyname('DName').AsString;
  memData.Text := adolist.fieldbyname('DMemo').AsString;
  edtDID.ReadOnly := true;
  edtDName.ReadOnly := true;
  memData.ReadOnly := true;
  end;
end;

procedure TfrmData.bbtnExitClick(Sender: TObject);
begin
  close;
end;

procedure TfrmData.FormShow(Sender: TObject);
begin
   ButtonState(4);
   iniCombox;                                                              //初始化Combox
   showlist;
end;                                                                       //列表显示


{
*************************************************************************************
函数名称:显示DBGrid列表
功能描述:将数据库表中的数据字典在DBGrid列表中显示出来
输入参数: 无
输出参数: 无
返回 值:  无
说   明:  添加、修改操作要调用该函数以达到显示更新后的数据显示目的
*************************************************************************************
}

procedure TfrmData.showlist;                                           
begin
try
  adolist.Connection := adoconn;
  adolist.SQL.Text := 'select a.DId,a.DTypeId,b.DTypeName,a.DName,a.DMemo from TDataParam a,TDataType b where b.DTypeId=a.DTypeId order by  a.DId';
  adolist.Open;

  edtDId.Text := adolist.fieldbyname('DId').AsString;
  strDId := edtDId.Text;
  cbxDtypeName.Text := adolist.fieldbyname('DTypeId').AsString+'['+adolist.fieldbyname('DTypeName').AsString+']';
  edtDName.Text := adolist.fieldbyname('DName').AsString;
  memData.Text := adolist.fieldbyname('DMemo').AsString;
  edtDID.ReadOnly := true;
  edtDName.ReadOnly := true;
  memData.ReadOnly := true;
except
  on e:exception do
  begin
    showmessage('读取数据字典的数据到列表中失败!');
  end;
end;
  //cbxDtypeName.Style := csOwnerDrawFixed;
end;

procedure TfrmData.adolistAfterScroll(DataSet: TDataSet);
begin
  edtDId.Text := adolist.fieldbyname('DId').AsString;
  strDId := edtDId.Text;
  cbxDtypeName.Text := adolist.fieldbyname('DTypeId').AsString+'['+adolist.fieldbyname('DTypeName').AsString+']';
  edtDName.Text := adolist.fieldbyname('DName').AsString;
  memData.Text := adolist.fieldbyname('DMemo').AsString;
  edtDID.ReadOnly := true;
  edtDName.ReadOnly := true;
  memData.ReadOnly := true;
end;

procedure TfrmData.bbtnSaveClick(Sender: TObject);
var
  icount : integer;
  strTmp : string;
  strNew : string;                      //新添加的数据类型名称
  strCompare   : string;
  strTId : string;                      //新添加的数据类型编号
begin
  icount := 0;
  case iflag of
  1:
    begin
      //cbxDtypeName.Style := csOwnerDrawFixed;
      {if (cbxDtypeName.Text = '') or (edtDName.Text = '') then
      begin
        showmessage('带*号的项不能为空');
        exit;
      end;}
    try
      if (pos('[',cbxDTypeName.Text)>0) then                              //若是“类型编号[类型名称]”类型的,取类型名称赋给strCompare
        strCompare := copy(cbxDTypeName.Text,pos('[',cbxDTypeName.Text)+1,length(cbxDTypeName.Text)-pos('[',cbxDTypeName.Text)-1)
      else
        strCompare := cbxDTypeName.Text;
      adoshare.Close;
      adoshare.SQL.Text := 'select DTypeName from TDataType';
      adoshare.Open;
      while not adoshare.Eof do
      begin
        if strCompare <> adoshare.FieldByName('DTypeName').AsString then
        begin
          icount := icount+1;
          if icount = adoshare.RecordCount then
          begin
            if application.MessageBox('该数据类型名称不存在'+char(13)+char(10)+'请先添加,是否添加?','提示',MB_YESNO+MB_ICONQUESTION)=6 then
            begin
              adopub.Close;
              adopub.SQL.Text := 'select max(DTypeId) from TDataType';
              adopub.Open;
              if adopub.RecordCount<>0 then
              begin
                strTmp := inttostr(strtoint(adopub.Fields[0].text)+1);
                if length(strTmp)=1 then
                  strTmp :='00'+strTmp
                else if length(strTmp)=2 then
                       strTmp :='0'+strTmp;
              end;
              adopub.Close;

              adopub.SQL.Text := 'insert into TDataType (DTypeId,DTypeName) values ('''+strTmp+''','''+cbxDTypeName.Text+''')';
              adopub.ExecSQL;
              adopub.Close;
              showmessage('添加数据类型名称成功');
              strNew := strTmp+'['+cbxDTypeName.Text+']';
              iniCombox;
              cbxDTypeName.Text := strNew;

            end
            else
            begin
              exit;
            end;
          end;
        end;
        adoshare.Next;
      end;
      adoshare.close;
    except
      on e:exception do
      begin
        showmessage('添加数据类型名称失败!');
      end;
    end;

    try
      strTId := copy(cbxDTypeName.Text,1,pos('[',cbxDTypeName.Text)-1);
      adopub.Close;
      adopub.SQL.Text := 'insert into TDataParam (DId,DTypeId,DName,DMemo) values ('''+edtDId.Text+''','''+strTId+''','''+edtDName.Text+''','''+MemData.Text+''')';
      adopub.ExecSQL;
      showmessage('添加数据字典成功!');
      adopub.Close;
      showlist;
    except
      on e:exception do
      begin
        showmessage('添加数据字典失败');
      end;
    end;
    end;
  2:
    begin
      if application.MessageBox('不可随意修改数据,当真要修改?','提示',MB_YESNO+MB_ICONQUESTION)=6 then
      begin
        try
          strTmp := copy(cbxDTypeName.Text,1,pos('[',cbxDTypeName.Text)-1);
          adopub.Close;
          adopub.SQL.Text := 'update TDataParam set DTypeId='''+strTmp+''',DName='''+edtDName.Text+''',DMemo='''+MemData.Text+''' where DId='''+edtDId.Text+'''';
          adopub.ExecSQL;
          adopub.close;
          showmessage('修改成功');
          showlist;
        except
          on e:exception do
            showmessage('修改失败');
        end;
      end
      else
        exit;
    end
    else
      exit;
    end;
    ButtonState(DOCANCEL);
end;

procedure TfrmData.iniCombox;
begin
try
  cbxDTypeName.Clear;
  adopub.SQL.Text := 'select DTypeId,DTypeName from TDataType';         //初始化Combox,在Combox下拉列表中载入数据
  adopub.Open;
  while not adopub.Eof do
  begin
    cbxDTypeName.Items.Add(adopub.fieldbyname('DTypeId').AsString+'['+adopub.fieldbyname('DTypeName').AsString+']');
    adopub.Next;
  end;
  adopub.Close;
except
  on e:exception do
  begin
    showmessage('数据初始化失败!');
  end;
end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -