GRIDB的数据源为一QUERY
内容大体是这样的:
Code Name
1001 abc
2202 dfdf
2303 dfsda要求是这样的, 在EDIT中输入1,DBGRID的记录移到1开头的第一条记录,再输入0,移到10开头的记录。若输入2,移到2开头的记录。
就是移动到'select * from tcode where code like ''%'+edit1.text+''''对应的记录。(注意,是移到到该记录,而不是查询出那条记录)这样怎么实现??!在线等!!!

解决方案 »

  1.   

    procedure TYWSForm.Edit10Change(Sender: TObject);
    begin
       DM.gongdanADOQuery.Active := False;
       DM.gongdanADOQuery.SQL.Clear;
       if sCheckBox.Checked then
          DM.gongdanADOQuery.SQL.Add('select * from gongdan where username like '+''''+'%'+Edit10.Text+'%'+'''')
       else
          DM.gongdanADOQuery.SQL.Add('select * from gongdan where username like '+''''+Edit10.Text+'%'+'''');
       DM.gongdanADOQuery.Prepared;
       DM.gongdanADOQuery.Active := True;
       ClearEdit(Sender);
       if not DM.gongdanADOQuery.IsEmpty then
          EditToDataSource(Sender);
    end;
    procedure TYWSForm.EditToDataSource(Sender: TObject);
    begin
       if DM.gongdanADOQuery['id']<>Null then
          Edit0.Text := DM.gongdanADOQuery['id'];
       if DM.gongdanADOQuery['waterno']<>null then
          Edit1.Text := DM.gongdanADOQuery['waterno'];
       if DM.gongdanADOQuery['username']<>Null then
          Edit2.Text := DM.gongdanADOQuery['username'];
       if DM.gongdanADOQuery['py']<>Null then
          EditPY.Text := DM.gongdanADOQuery['py'];
    end;
      

  2.   

    不好意思,搞错了。
    试试下面的代码吧:
    procedure TYWSForm.Edit10Change(Sender: TObject);
    var
       i:integer;
    begin
       i:=length(Edit10.Text);
       Query1.First;
       while not Query1.Eof do
       begin
           if Copy(Query1['code'],1,i)=Edit10.Text then
              ShowMessage('OK')
            else
               Query1.Next;
       end;
    end;
      

  3.   

    你试试findnearest函数吧,举个例子
    procedure TForm1.Button1Click(Sender:Tobject);
    begin 
       with Query1 do
        IndexFieldName:='Name';
        FindNearest([Edit1.Text]);
    end;
      

  4.   

    你用Locate好了,很快的例如:
    if not Locate('nian;yue',VarArrayOf([aYear,aMonth]),[loCaseInsensitive])
      

  5.   

    用两个Query:1)'select * from tcode where code like ''%'+edit1.text+''''
    //Query1选出符合的记录,并指向第一条记录2)query2.lacate('code,name',VarArrayof([Query1['code'],Query1['name']]),[])/
    //Query2来定位
      

  6.   

    谢谢大家。
     duncankof说的indexfieldnam好像只有table有,我的是QUERY.
    还有其他人说的,如果只用一个的话不能实现模糊查找,我要的是在文本框onchage的时候才找!所以得用两个QUERY.不知大家还有没有什么好办法.
      

  7.   

    为什么要用两个呢?在Edit1的OnChange中Query.locate...就可以呀。Options中得包括loCaseInsensitive, loPartialKey才行。
      

  8.   

    function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; override;
      

  9.   

    Locate('nian;yue',VarArrayOf([aYear,aMonth]),[loCaseInsensitive])