导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2003/12/4 21:13:12
标题:
加入我的收藏
楼主:
各位高手: 大家好! 使用“Table1.Append” 或者 “Table1.Insert”可以在数据表中新增一笔数据。在新增时会触发两个事件:OnNewRecord 和 OnBeforePost。 OnNewRecord事件发生在调用“TDataSet.Append” 或者“TDataSet.Insert”方法时。(我这样理解对吗?) 现在有这样两段代码: procedure TForm1.Table1BeforePost(DataSet: TDataSet); begin if (Table1.State = dsInsert) and (Table2.FindKey([Table1.FieldByName('CustNo').AsInteger])) then begin MessageDlg('客户编号有重复!',mtWarning,[mbok],0); edit1.setFocus; Abort; //终止保存操作 end; end; procedure TForm1.Table1NewRecord(DataSet:TDataSet); begin Table2.Last; Table1.FieldByName('CustNo').AsInteger := Table2.FieldByName('CustNo').AsInteger + 1; end; 代码的作用: Table1NewRecord事件的意图是:当单击“新增”按钮调用“Table1.Insert”方法时,使“数据表”中“CustNo”字段的值自动加1,以此来避免“客户编号”(即“CustNo”)中的值产生重复; Table1BeforePost事件的意图是:调用“Table1.Insert”方法后,输入一些必需的信息并保存时,“Table”组件在保存以前检测“客户编号”(即“CustNo”)中的值是否有重复发生,如有则提示用户并且终止保存操作。 我的疑问: 在向表中的某个字段添加数据时,Table1的操作步骤(就以这两个事件来说)是:首先触发OnNewRecord事件,然后触发OnBeforePost事件。 如按以上的顺序,那么在“新增”数据时,当触发OnNewRecord事件后,就已经为“CustNo”字段的值自动加“1”了。这时,我认为在“客户编号”(即“CustNo”)中的值就已经不会再出现“重复”的状况了。因此,我觉得已经没有必要再去编写OnBeforePost事件中的代码,我不知道这样认为是否正确?请大家告诉我!!! 另外还有一个问题: 在“商品资料”表中的“商品编号”字段中,我们往往把一些物品按类区分。比如说:“电器类”的“商品编号”我们以“DQ”开头、“日常用品类”的“商品编号”我们以“RCYP”开头,而某一件商品的“商品编号”便以“类别号码”+“数字”来表示。如:“电视机”的“商品编号”是“DQ001”、“洗衣粉”的“商品编号”是“RCYP108”等。 当添加数据时,“商品编号”字段将产生一个默认值:“该字段中的最大值+1”。那么,当商品的数量超过“DQ999”或“RCYP999”时,我们怎样在目前的基础上将“商品编号”的值自动添加“一位数字”,使其成为“DQ1000”或“RCYP1000”。然后当添加数据时,在“DQ1000”或“RCYP1000”的基础上再来自动加“1”? smallmouse 2003年12月4日 smallmice1111@tom.com
----------------------------------------------
-
作者:
bryan (bao)
★☆☆☆☆
-
盒子活跃会员
2003/12/4 22:08:12
1楼:
第一个问题,你的理解没错,但要在Table1的afterpost事件中刷新table2, 而且也要保证table2是以custno排序的,否则你无法获得正确的custno. 第二个问题,因为你需要进位,所以你本来就需要将后三位数字截出来, 转换成整数加一,当最后数字是999时,加一已经是1000了, 加在原来的字头后面便是,当然你程序中要考虑取后面几位的问题.
----------------------------------------------
-