今天碰到一个怪现象:设置ClientDataSet的Filter属性时如果用下面这样语句的话:
ClientDataSet1.Filter:='CustName like '+#39+'%泉%'+#39时查找不到任何内容,
而用
ClientDataSet1.Filter:='CustName like '#39+'%泉州%'+#39时可查找到符合的内容经反复试验,发现:
如果用一个汉字的话,如 %泉% 的Filter查不到任何内容,但数字和英文都没有问题。
如果用两个汉字的话,如 %泉州% 的Filter可以查到符合的内容
如果去掉开始的通配符的话,如 泉% 也可查到符合的内容怪,怪,如何解决,看各位的了此贴曾发过,但未获得需要的答案,参见:http://expert.csdn.net/Expert/topic/1361/1361289.xml?temp=.6720087
ClientDataSet1.Filter:='CustName like '+#39+'%泉%'+#39时查找不到任何内容,
而用
ClientDataSet1.Filter:='CustName like '#39+'%泉州%'+#39时可查找到符合的内容经反复试验,发现:
如果用一个汉字的话,如 %泉% 的Filter查不到任何内容,但数字和英文都没有问题。
如果用两个汉字的话,如 %泉州% 的Filter可以查到符合的内容
如果去掉开始的通配符的话,如 泉% 也可查到符合的内容怪,怪,如何解决,看各位的了此贴曾发过,但未获得需要的答案,参见:http://expert.csdn.net/Expert/topic/1361/1361289.xml?temp=.6720087
<<<
如果去掉开始的通配符的话,如 泉% 也可查到符合的内容
>>>
<<<
如果去掉开始的通配符的话,如 泉% 也可查到符合的内容
>>>
具体修改方法如下:
1:双击adotable,在出来的东西里面右键,“add all fields”;
2:在form或moudle(即你放adotable的地方)右键,“vies as text”,把里面的所有的TWideStringField更改成TStringField,然后你再试试过滤中文,一定可以的了。哈哈哈,开心,我又帮助别人了。
frmBldcMain->ClientDataSet2->Filtered=false;
frmBldcMain->ClientDataSet2->Filter="";
frmBldcMain->ClientDataSet2->Filtered=true;void __fastcall TfrmBldcMain::ClientDataSet2FilterRecord(TDataSet *DataSet,
bool &Accept)
{
TStringList *sList=new TStringList();
AnsiString tmpStr; tmpStr=frmFindTag->txtEdit2->Text; //多条件过滤中间用,号分隔
//分隔过滤条件
while(tmpStr.Pos(",")>0)
{
if(tmpStr.Pos(",")!=1)
{
sList->Add(tmpStr.SubString(1,tmpStr.Pos(",")-1));
}
tmpStr=tmpStr.SubString(tmpStr.Pos(",")+1,tmpStr.Length());
}
if(tmpStr.Length()!=0)
{
sList->Add(tmpStr);
} //参数名称
for (int i=0;i<sList->Count;i++)
{
Accept=DataSet->FieldByName("参数名称")->AsString.Pos(sList->Strings[i])>=1;
// Accept is true 表示当前记录是符合过滤条件的
if (!Accept)
break;
} //参数描述
// if (!Accept)
// {
// for (int i=0;i<sList->Count;i++)
// {
// Accept=DataSet->FieldByName("参数描述")->AsString.Pos(sList->Strings[i])>=1;
// if (!Accept)
// break;
// }
// }sList->Free();}
//---------------------------------------------------------------------------
你自己改成delphi的吧,改不了再找我。
http://snpack.fykj.com
case DataSet.Fieldbyname(fieldname).DataType of
ftString,ftWideString:
begin
if not checkbox1.Checked then
begin
dataset.Filtered:=false;
dataset.Filter:='';
end;
dataset.OnFilterRecord:=FilterRecord;
dataset.Filtered:=true;
end;
ftSmallint,ftInteger,ftWord,ftLargeint,ftFloat,ftBCD:
begin
if not checkbox1.Checked then
dataset.Filtered:=false;
dataset.Filter:=fieldname+'='+trim(edit1.text);
dataset.Filtered:=true;
end;
else
begin
raise exception.Create('该字段类型不可识别!');
end;
end;
procedure TFilterForm.FilterRecord(DataSet: TDataSet;var Accept: Boolean);
begin
if pos(StrLower(pchar(trim(edit1.text))),StrLower(pchar(dataset.FieldByName(fieldname).asstring)))>0 then
accept:=true
else
accept:=false;
end;