现在我用ADOstoredproc查询出一张表!
品名        完工支数 折算系数 件数 单价 总金额
G-2101红          10368 6912 1.5 0.3 0.45
G-2101红          10368 6912 1.5 0.3 0.45
G-737针管乌 8640 1728 5 0.3 1.5
MINI针管乌 784512 1728 454 0.3 136.2
MINI针管兰 153792 1728 89 0.3 26.7
MINI针管红 248832 1728 144 0.3 43.2
MINI针管乌 784512 1728 454 0.3 136.2
MINI针管兰 153792 1728 89 0.3 26.7
MINI针管红 248832 1728 144 0.3 43.2
MINI大头乌 335232 1728 194 0.3 58.2
MINI大头兰 190080 1728 110 0.3 33
MINI大头红 103680 1728 60 0.3 18
现在我想模糊查询定位,即:做一个编辑框:Edit,当输入‘大头’时,记录集自动指到符合的第一条记录!我知道用local可以,但是它只能实现输入记录的前面的字符:比如输入‘M’,‘Mi’,‘MINI’,……,不能实现:输入后面或中间字符!注意:这里只是对ADOstoredproc取出的数据集定位,不要重新去取数据!!!

解决方案 »

  1.   

    可以实现,不要用locate. 
    用数据集控件本身带的filter功能,
    就是要写控件的 onFilterRecord事件 
    在事件代码中用一些技巧, 比如说要实现你的功能. 可以这样实现procedure TForm1.ADOStoredProc1FilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    begin
      if edit1.text = '' then
      begin
        Accept := true;
        exit;
      end;  if pos(edit1.text, dataSet.fieldByName('品名').asString) > 0 then
        Accept = true
      else
        Accept = false;
    end;procedure TForm1.Edit1Change(Sender: TObject);
    begin
      ADOStoredProc1.Filtered := false;
      ADOStoredProc1.Filtered := true;
    end;edit1就可你输入'大头'的地方
      

  2.   

    大哥这个是过滤亚!!!输入后就剩下:
    MINI大头乌 335232 1728 194 0.3 58.2
    MINI大头兰 190080 1728 110 0.3 33
    MINI大头红 103680 1728 60 0.3 18
    了!!其他数据都屏蔽了
      

  3.   

    SELECT *
    FROM cumm7000
    WHERE (Company_Name_native_Code_M LIKE '%大头%')
      

  4.   

    注意:这里只是对ADOstoredproc取出的数据集定位,不要重新去取数据!!!
      

  5.   

    那这样子的话,你就只能自已写一个函数了,while not ADOstoredproc.eof do
    begin
      判断是否符合你的条件;  ADOstoredproc.next;
    end;然后在你输入了 "大头" 后要调用这个函数
      

  6.   

    楼上的不错,
    呵呵,我完善一下
    在输入框的KEYPRESS里大概写如下:
    if key=#13//如果是回车,则查找
    then
    begin
    while not ADOstoredproc.eof do
    begin
      if pos(Trim(Edit1.text),ADOstoredproc.FieldByName('品名'1).asstring)>0 then Break
      else
      ADOstoredproc.next;
    end;
    差不多改改应该符合你了
      

  7.   

    我只是想问一问可不可以实现! /////////////////////////////////呵呵,完全可以实现!你用的DBGrid显示的数据集信息吗?那东东不爽呀,还有如用ListView,我想我已经说得很明确了。
      

  8.   

    用中间表来操作就好了
    select……into……where……只是每次操作前记得要drop
      

  9.   

    谢谢 nyf1220(我是党员--不过听说最近风声紧,打算换名字) (