连接好sqlserver数据库后 ,在Edit中输入某个字段的值,按下button来显示该字段值为Edit.text的所有记录,现在是如果输入edit中的text为空或在表中本来都有相对应的值的话,可以很容易的执行 
  ...
  if Eidt1.text='' then showmessage('请输入相对应的字段名称’)
  else
  begin
   with ADOQuery1 do
    begin
     close;
     SQl.clear;
     SQL.add('select * from table where Project='+Edit1.text)
     open;
   end;
 end;如果输入到Edit中的值非空且在DBgrid表中没有与之相等的 就要出现一个对话框提示
问题是怎样逐个的判断DBgrid中的字段project的值与Edit.text是否相等,也就是说怎样判断输入的Edit.text的值是否在Dbgrid中
是不是要用一个循环语句,具体怎样做,恳请各位好手指点。
谢谢

解决方案 »

  1.   

    连接到表格中的数据集FILTER一下.看下有没有记录...而不是从数据库表中查询.......
      

  2.   

    To :mdejtod,非常感谢阿
    能不能详细一点啊
      

  3.   

    比如你连接到表格中的数据集是 adoquery1.
    那你可以这样写代码:
    var s:string;
      begin
         s:='Project='''+edit1.text+''''; 
         adoquery1.filter:=s;
         adoquery1.filtered:=true; 
      end;
    就是在你现有的数据集中过滤你要的数据,而不是在数据库表中查询这样的...
      

  4.   

    是不是将 S 赋给ADOquery1.filter 之后 ,看看ADOquery1.filtered返回怎样的值 ,如果返回一个True 说明数据集中有与Edit1.text中的内容相同的值,若返回false则没有这样就可以作为if 语句的判断条件了  然后再 then。。 我这样理解是是对,还是错的?请您指点 谢谢。。 
      

  5.   

    是这样啊 是不是直接通过改变ADOquery1.filtered 属性值来显示DBgrid中的记录,也不用再用if 来判断了这样显示的是不是符合条件的所有的字段的值啊 我来试试
      

  6.   

    begin
       with ADOQuery1 do
        begin
         close;
         SQl.clear;
         SQL.add('select * from table where Project='+Edit1.text)
         open;
         if RecordCount > 0 then
         showmessage('有纪录')
         else showmessage('没纪录');
       end;
      

  7.   

    楼上诸位朋友的解决办法都是挺不错的,但是都会影响了DBgrid的显示,
    为什么不采用locate呢?
     if Locate('Project',(Edit1.text),[loCaseInsensitive]) then 
     表示有,并且定位到这个记录上,
    else 没找到
      

  8.   

    真是非常感谢楼上各位大侠的指点和帮助啊,
    元旦马上到了,祝愿楼上各位朋友在新的一年里 工作取得更大的成绩 学习取得更大的进步 健康永远相伴。。
    谢谢 to : Rocx007(),非常感谢啊 有一些问题还要向您请教,对Locate(),还不了解 参数[loCaseInsensitive]含义是?
    谢谢
      

  9.   

    我来回答,记得给我一点分:这是不分大小写匹配,还有一个参数loPartialKey是表示模糊匹配