DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: x00153976
今日帖子: 37
在线用户: 9
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 smallmouse (小老鼠) ★☆☆☆☆ -
普通会员
2003/12/4 21:13:12
标题:
这样做有没有必要? 浏览:1500
加入我的收藏
楼主: 各位高手:
  大家好!
  使用“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了,
     加在原来的字头后面便是,当然你程序中要考虑取后面几位的问题.


----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS