首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 在DBGrideh中新增记录之前查看来记录的字段是否有空,没有就新增,有就不能新增。 [已结贴,结贴人:i54]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • i54
    • 等级:
    发表于:2008-06-30 10:33:07 楼主
    在DBGrideh中新增记录之前查看来记录的字段是否有空,没有就新增,有就不能新增。
    代码如下:注:Ddetail  LOCKTYPE 为 ltBatchOptimistic

    procedure TG11Form.QdetailBeforePost(DataSet: TDataSet);
    var
      tempNum:double;

      bk:TBookMark;
      tempstr:string;


    begin
      inherited;
      try

      //showmessage(self.Ddetail.DataSet.FieldValues['GOODID']);

      if self.Ddetail.DataSet.FieldByName('GoodID').IsNull then
      begin
        showmessage('请选择好商品!');
        self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('GoodID');
        self.Ddetail.DataSet.Cancel;
        abort;

      end;

      if self.Ddetail.DataSet.FieldByName('GoodID').AsString='' then
      begin
        showmessage('请选择好商品!');
        self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('GoodID');
        self.Ddetail.DataSet.Cancel;
        exit;
      end;

      if self.Ddetail.DataSet.FieldByName('depotID').IsNull then
      begin
        showmessage('请选择好仓库!');
        self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('depotID');
        self.Ddetail.DataSet.Cancel;
        exit;
      end;

      if self.Ddetail.DataSet.FieldByName('depotID').AsString='' then
      begin
        showmessage('请选择好仓库!');
        self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('depotID');
        self.Ddetail.DataSet.Cancel;
        exit;
      end;

      tempNum:=(self.Ddetail.DataSet.FieldValues['OrderNum']*self.Ddetail.DataSet.FieldValues['price'])*self.Ddetail.DataSet.FieldValues['discount'];
      self.Ddetail.DataSet.FieldByName('totalMoney').AsString:=formatfloat('0.000',tempNum);

      except
        self.Ddetail.DataSet.Cancel;
        self.Ddetail.DataSet.Refresh;
      end;

      try
        tempstr:=self.Ddetail.DataSet.FieldValues['GoodID'];
        bk:=self.Ddetail.DataSet.GetBookmark;
        self.Ddetail.DataSet.First;
        tempNum:=0;

        while not self.Ddetail.DataSet.Eof do
        begin
            if trim(self.Ddetail.DataSet.FieldValues['GoodID'])=tempstr then
            begin
              tempNum:=tempNum+1;
            end;
            self.Ddetail.DataSet.Next;
        end;

        if tempNum>1 then
        begin
            showmessage('有相同记录!');
            self.Ddetail.DataSet.GotoBookmark(bk);
            self.Ddetail.DataSet.FreeBookmark(bk);
            self.Ddetail.DataSet.Edit;
            self.DBGridEh1.SelectedField:=self.Ddetail.DataSet.FieldByName('GoodID');
            exit;
        end;

            self.Ddetail.DataSet.GotoBookmark(bk);
            self.Ddetail.DataSet.FreeBookmark(bk);


      except
        exit;
      end;

    测试结果:程序有提示要“选好商品”,但是还是新增了一条空白的记录。
    程序中有二种新增记录的方式:1、菜单中的“新增”。2、按向下键,DBGRIDEH自动新增。
    想要的效果:上面二利“新增”记录的方法,每当新增时程序会检测是否为空,如果是空不能增新,不是空则新增一条空白记录。

    在线等待,情各位高手帮忙。。。。
    OK马上给分。。
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • i54
    • 等级:
    发表于:2008-06-30 10:55:041楼 得分:0
    各位大侠。。。帮帮忙。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gyk120
    • 等级:
    发表于:2008-06-30 11:08:332楼 得分:50

      procedure  TForm1.DBGrid1ColExit(Sender:  TObject); 
      begin 
      if  DBGrid1.SelectedField.DisplayLabel  =  'a'  then             
            begin 
            if  DBGrid1.SelectedField.AsString  =  ''  then 
                    showmessage('不能为空!'); 
            end; 
      end;
    试试吧……我极度不擅长数据库……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gyk120
    • 等级:
    发表于:2008-06-30 11:17:233楼 得分:50
    procedure  TForm1.Table1BeforePost(DataSet:  TDataSet); 
      var 
          i:  Integer; 
      begin 
          for  i:=0  to  Form1.DBGrid1.Columns.Count-1  do 
              if  Form1.DBGrid1.Columns[i].Field.AsString  =  ''  then  begin 
                  Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR  +  MB_OK); 
                  Abort; 
              end; 
      end; 
    或者这样试试?……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • i54
    • 等级:
    发表于:2008-06-30 11:33:124楼 得分:0
    TO:gyk120
    我试过你这样了,还是不行。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gyk120
    • 等级:
    发表于:2008-06-30 11:37:135楼 得分:0
    这个要在DBGrid的OnColExit里面写的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • i54
    • 等级:
    发表于:2008-06-30 11:42:086楼 得分:0
    搞定了。
    谢谢二位。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • i54
    • 等级:
    发表于:2008-06-30 11:42:537楼 得分:0
    我自己搞定了。
    送分吧。。。,
    每人50分。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • i54
    • 等级:
    发表于:2008-06-30 11:44:598楼 得分:0
    看错拉。。
    都是你一个人在回。。
    一百分全给你。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved