我想实现的是,在添加新的记录前检索库表中是否有重复的客存证号,如果有则提示重新填写,如果没有则把这条记录填到库里。以上代码基本上可以实现,但是没有出错处理,还有的就是我在界面上加了个DBGRID,当我进行检索查询的时候DBGRID也跟着变,很不美观,我想让他保持原来的状态。
大家明白我的意思吗?应该怎么做呀?

解决方案 »

  1.   

    kczh='+''''+edit1.text+''''改成
    kczh='+chr(39)+edit1.text+chr(39)
      

  2.   

    哥们,我给你发消息了。
    不以用联着dbgrid的那个查。要容错的话加上try...except...end就可以了。
      

  3.   

    小弟太菜,不知道上面的保护语句用try...except...end怎么写啊?
      

  4.   

    try
      你要做的事
    except
      错误处理
    end;
      

  5.   

    if edit1.Text<>'' then
        begin
        try
          adoquery1.Close;
          adoquery1.SQL.Clear;
          adoquery1.SQL.Add('select kczh from kcgl..yhxx where kczh='+''''+edit1.text+'''');
          adoquery1.Open;
           if adoquery1.RecordCount=0 then
            begin
              adoquery1.InsertRecord([edit1.text,edit2.text,edit3.text,edit4.text,edit5.text,edit6.text,memo1.text]);
                edit1.Clear;
                edit2.Clear;
                edit3.Clear;
                edit4.Clear;
                edit5.Clear;
                edit6.Clear;
                memo1.Clear;
             end
             else
               showmessage('客存证号重复,请重新填写');
               edit1.Clear;
               edit1.SetFocus
            except
                  showmessage('error');
            end;
        end;
      

  6.   

    dbgrid1.datasource := nil  // 断开DBGrid与ADOQuery,这样在下面用ADOQuery时dbgrid不会改变try if edit1.Text<>'' then
        begin
          adoquery1.Close;
          adoquery1.SQL.Clear;
          adoquery1.SQL.Add('select kczh from kcgl..yhxx where kczh='+''''+edit1.text+'''');
          adoquery1.Open;
          if adoquery1.RecordCount=0 then
            begin
              adoquery1.InsertRecord([edit1.text,edit2.text,edit3.text,edit4.text,edit5.text,edit6.text,memo1.text]);
                edit1.Clear;
                edit2.Clear;
                edit3.Clear;
                edit4.Clear;
                edit5.Clear;
                edit6.Clear;
                memo1.Clear;
             end
             else
               showmessage('客存证号重复,请重新填写');
               edit1.Clear;
               edit1.SetFocus;
    except
      // 发生错误是这里面的代码,否则不执行
        showmessage('发生错误');
    end;    // 再用adoquery1连接dbgrid;
        adoquery1.Close;
          adoquery1.SQL.Clear;
          adoquery1.SQL.Add('select * from kcgl);
          adoquery1.Open;
          dbgrid.datasource := dataset;