您在本站的位置:主 页 >> 站长专区 >> 站长作品:《利用数据描述表巧妙编写编码表程序》
《站长作品》】               利用数据描述表巧妙编写编码表程序

    在信息管理系统的开发过程中,不可避免地会用到许多编码表,用来存放字典数据。这些编码表的表结构一般只有两个字段:“编码”和“编码字符串”。由于编码表的数量比较多(中小型的MIS系统一般都有几十个),如果分别对它们编程进行维护,那代码量是非常大的。
    为了编写通用的编码表维护程序,可以建立编码表的数据描述表,用来存放这些编码表的表结构及其描述信息,为编程提供一些基础信息。
    数据描述表的表结构为:
     xh 自动编号 主索引字段
     TableName 文本 编码表表名(在代码中引用)
     TableName_c 文本 编码表汉字名称
     fd1 文本 编码字段
     fd1_c 文本 编码字段汉字名称
     fd2 文本 编码字符串字段
     fd2_c 文本 编码字符串字段汉字名称
    然后在窗体上拖拉两个数据表格:DBGrid1 和 DBGrid2。拖放四个按钮 btnAdd、btnDel、btnModi 和 btnClose,分别对应于“增加”“删除”“修改”和“关闭”。然后放置一个 ADOConnect 控件,与数据库连接。再放置 ADODataSet1 和 DataSource1 对应于 DBGrid1,ADODataSet2 和 DataSource2 对应于 DBGrid2。
    以上控件在设计阶段的关键属性为:
    ADODataSet1:Connection=ADOConnection1,
     CommandText='select fd1, fd1_c, fd2, fd2_c, TableName, TableName_c, xh
     from BaseTables order by xh'
     Active=True;
    DataSource1:DataSet=ADODataSet1
    DBGrid1:DataSource=DataSource1
    ADODataSet2:Connection=ADOConnection1,CommandText为空,Active=False
    DataSource2:DataSet=ADODataSet2
    DBGrid2:DataSource=DataSource2
    其中 ADODataSet1 与编码表的数据描述表绑定,ADODataSet2 作为临时数据集,用代码控制分别与各编码表动态绑定。

程序的代码如下(窗体名为 frmBaseTables): procedure TfrmBaseTables.FormActivate(Sender: TObject); begin DBGrid1CellClick(DBGrid1.Columns[0]); end; procedure TfrmBaseTables.DBGrid1CellClick(Column: TColumn); var strTmp :string; begin //更换 DBGrid2 的数据集的内容: ADODataSet2.Active :=False; strTmp :='select ' +ADODataSet1.FieldByName('fd1').AsString + ',' +ADODataSet1.FieldByName('fd2').AsString + ' from ' +ADODataSet1.FieldByName('TableName').AsString +' order by '+ADODataSet1.FieldByName('fd1').AsString; ADODataSet2.CommandText :=strTmp; ADODataSet2.Active :=True; //更换 DBGrid2 表头显示的字符串: DBGrid2.Fields[0].DisplayLabel :=ADODataSet1.FieldByName('fd1_c').AsString; DBGrid2.Fields[1].DisplayLabel :=ADODataSet1.FieldByName('fd2_c').AsString; end; //增加记录: procedure TfrmBaseTables.btnAddClick(Sender: TObject); begin frmAddbaseTable.ShowModal; end; //删除记录: procedure TfrmBaseTables.btnDelClick(Sender: TObject); begin if (Application.MessageBox(#10+'确定删除该记录吗?','删除提示',MB_OKCANCEL)=1) then begin ADODataSet2.Edit; ADODataSet2.Delete; end; end; //修改记录: procedure TfrmBaseTables.btnModiClick(Sender: TObject); begin frmModiBaseTable.ShowModal; end; //关闭窗体: procedure TfrmBaseTables.btnCloseClick(Sender: TObject); begin self.close; end; 其中添加和修改记录分别调用了 frmAddbaseTable 和 frmModibaseTable 窗体。 两个窗体的代码非常相似,以添加记录窗体 frmAddbaseTable 为例,其上放置两个 DBEdit 框 DBEditBm 和 DBEditBmString,分别对应于各编码表的编码和编码字符串, 两个按钮 btnSave 和 btnCancel 分别用于保存和取消。以上控件的事件过程如下: implementation uses BaseTables; {$R *.dfm} procedure TfrmAddbaseTable.FormActivate(Sender: TObject); begin //通过代码使 DBEditBm 和 DBEditBmString 与各编码表的字段联系起来: DBEditBm.DataField :=frmBaseTables.ADODataSet2.Fields[0].FieldName; DBEditBmString.DataField :=frmBaseTables.ADODataSet2.Fields[1].FieldName; frmBaseTables.ADODataSet2.Edit; frmBaseTables.ADODataSet2.Append; DBEditBm.SetFocus; //编码框获得焦点 end; //保存: procedure TfrmAddbaseTable.btnSaveClick(Sender: TObject); begin frmBaseTables.ADODataSet2.Post; close; end; //取消: procedure TfrmAddbaseTable.btnCancelClick(Sender: TObject); begin frmBaseTables.ADODataSet2.Cancel; close; end; procedure TfrmAddbaseTable.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin DBEditBm.DataField :=''; DBEditBmString.DataField :=''; end;     西安市雁塔区慈恩路南段 8 号电达公司 710061
    张庆 zhangking@263.net 029-5213755, 13892819730
    http://100000.home.sohu.com QQ:9365822 2001.11.10
返回“站长专区”
Copyright(C) By ZhangQing 张庆 返回主页
站长邮箱:zhangking@263.net  Bp:029-95808 呼 822686