select ...where 字段 like '%...%'like 是用来模糊查询的 %是通用匹配符,具体看SQL帮助
模糊定位你应该说清楚具体定义.不要以为模糊就是没定义. 我认为两步 1.WHERE 条件语句联合你的模糊的定义的条件,比如满足条件的第三条.得到主键的值. select keyid from ( select keyid from table where cri..... ) where monotonic()=3; 2.再以主键值进行定位. LOCATE语句我不熟,你自己写了.
晕!我是要模糊定位!不是模糊查询! ///////////////// 可以这样 Filter:=false; Filter='字段 like ''%值%'''; Filtered:=true;
我是想实现这个功能。 例:在一个表格中有1000条记录,指定条件后,光标就跳到该记录上,而我不想过滤掉不符合条件的记录。用filter,select .. where ... like '%..%'都会将不符合条件的记录过滤掉。 而locate就可以直接定位,但有一问题是,locate在模糊定位时,只能从内容的开始部分进行模糊,如'12345abcd',对该内容进行模糊定位的话,locate('123',...)可以定位到该条记录,但用locate('abc'...)就不能定位到该条记录了。 我想要问的就是如何实现locate('abc'...)也可以定位到该条记录,而不是用filter,like等过滤方式。还请各位大侠指点!谢谢 !
用loacate不能實現,我跟你說,要實現你自己寫一個過程
举个例子:procedure LoacteRecord(aDataSet:TDataSet,Values); var tmpstr:string; begin with aDataSet do begin DisableControls; Filtered:=false; Filter:='字段1 like ''%'+'abc'+'%'''; Filtered:=true; str:=FieldByName('字段1').AsString; Filtered:=false; Locate('字段1',str,[loCaseInsensitive]); EnableControls; end; end;
这好办哪, 例如你要定位到 "字段1" 中包含 "abc" 的记录上:with dataset do begin First; DisableControls; while not Eof do begin if pos('abc', FieldByName('字段1').AsString) <= 0 then Next else Break; end; EnableControls; end;大概是这个意思,我没调试这段代码。 你调试一下,执行起来了就达到你的目的了。
我认为两步
1.WHERE 条件语句联合你的模糊的定义的条件,比如满足条件的第三条.得到主键的值.
select keyid
from
(
select keyid
from table
where cri.....
)
where monotonic()=3;
2.再以主键值进行定位.
LOCATE语句我不熟,你自己写了.
/////////////////
可以这样
Filter:=false;
Filter='字段 like ''%值%''';
Filtered:=true;
例:在一个表格中有1000条记录,指定条件后,光标就跳到该记录上,而我不想过滤掉不符合条件的记录。用filter,select .. where ... like '%..%'都会将不符合条件的记录过滤掉。
而locate就可以直接定位,但有一问题是,locate在模糊定位时,只能从内容的开始部分进行模糊,如'12345abcd',对该内容进行模糊定位的话,locate('123',...)可以定位到该条记录,但用locate('abc'...)就不能定位到该条记录了。
我想要问的就是如何实现locate('abc'...)也可以定位到该条记录,而不是用filter,like等过滤方式。还请各位大侠指点!谢谢 !
var
tmpstr:string;
begin
with aDataSet do
begin
DisableControls;
Filtered:=false;
Filter:='字段1 like ''%'+'abc'+'%''';
Filtered:=true;
str:=FieldByName('字段1').AsString;
Filtered:=false;
Locate('字段1',str,[loCaseInsensitive]);
EnableControls;
end;
end;
...........
第一你该早点说清楚你的要求.不过要求还算写得清晰.
第二,看看我的思路吧.只是要分两步走.
begin
First;
DisableControls;
while not Eof do
begin
if pos('abc', FieldByName('字段1').AsString) <= 0 then
Next
else Break;
end;
EnableControls;
end;大概是这个意思,我没调试这段代码。
你调试一下,执行起来了就达到你的目的了。