📄 unitdata.~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 + -