数据集怎么样才能过滤memo类型字段呢,求指教

wangwei244157887 2014-04-22 04:17:33
我使用ClientDataSet查询了一个表,我想对其中一个字段进行过滤,字段的类型是memo,表中的数据如下图所示,当对“工程名称”字段进行过滤的时候,提示类型不匹配,我该怎么解决呢


数据库是SQLITE 没有字符类型啊,
...全文
230 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
金卯刀 2014-04-24
  • 打赏
  • 举报
回复
建议你跟踪一下控件内部的处理逻辑,会更清楚。
「已注销」 2014-04-23
  • 打赏
  • 举报
回复
你好,这是原程序的代码地址http://download.csdn.net/detail/wangwei244157887/7237619 试验用的是ACCESS,实际是Sqlite,用你的方法试验没成功
「已注销」 2014-04-23
  • 打赏
  • 举报
回复

procedure TForm1.RzButton5Click(Sender: TObject);
begin
// ClientDtSet_1.Filter:='工程名称='+quotedstr('data_block_1');
ClientDtSet_1.Filtered :=true;
end;

procedure TForm1.ClientDtSet_1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
if (DataSet.FieldByName('工程名称').AsString=quotedstr('data_block_1')) then
Accept :=true
else
Accept :=false;
end;



执行上面的代码,我发现在该事件,跳转到的是Accept=false;
执行的结果是

这是MEMO字段的显示方法

procedure TForm1.ClientDtSet_1Field2GetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
Text:=Sender.AsString;
DisplayText :=true;
end;

procedure TForm1.ClientDtSet_1Field2SetText(Sender: TField;
const Text: String);
begin
Sender.AsString :=Text;
end;
金卯刀 2014-04-23
  • 打赏
  • 举报
回复
引用 4 楼 wangwei244157887 的回复:
[quote=引用 3 楼 Avan_Lau 的回复:] 可以在OnFilterRecord事件里处理

begin    
  if DataSet.FieldByName('工程名称').AsString=Edit1.Text then  
     Accept:=true  
  else 
     Accept:=false; 
end;
你这个Edit1.text是我过滤的字符吗?关键一设置过滤字段,就报类型不匹配啊,还没到你这个事件里面啊[/quote] 前提当然是去除原先的过滤写法了
「已注销」 2014-04-23
  • 打赏
  • 举报
回复
引用 10 楼 Avan_Lau 的回复:
[quote=引用 9 楼 wangwei244157887 的回复:] [quote=引用 8 楼 Avan_Lau 的回复:] [quote=引用 7 楼 wangwei244157887 的回复:] 你好,这是原程序的代码地址http://download.csdn.net/detail/wangwei244157887/7237619 试验用的是ACCESS,实际是Sqlite,用你的方法试验没成功
看你的程序,既然Sender.AsString都能显示,没理由有问题。 为什么不trace一下这行代码??DataSet.FieldByName('工程名称').AsString=quotedstr('data_block_1') 为什么需要quotedstr??其实这里已经不需要了...[/quote] 恩,太谢谢了,为什么用你这种方法可以,而直接写Filter属性却不可以呢?求指教[/quote] 因为Memo字段,控件无法确定存储的内容,无法统一像AsString来使用;所以控件内部会提示类型匹配问题。[/quote] 虽然不怎么明白,但是感觉有点类似于一个字段设置为Integer类型,但是我们也可以像是用ASString方法一样,进行强制转换,对吗?
金卯刀 2014-04-23
  • 打赏
  • 举报
回复
引用 9 楼 wangwei244157887 的回复:
[quote=引用 8 楼 Avan_Lau 的回复:] [quote=引用 7 楼 wangwei244157887 的回复:] 你好,这是原程序的代码地址http://download.csdn.net/detail/wangwei244157887/7237619 试验用的是ACCESS,实际是Sqlite,用你的方法试验没成功
看你的程序,既然Sender.AsString都能显示,没理由有问题。 为什么不trace一下这行代码??DataSet.FieldByName('工程名称').AsString=quotedstr('data_block_1') 为什么需要quotedstr??其实这里已经不需要了...[/quote] 恩,太谢谢了,为什么用你这种方法可以,而直接写Filter属性却不可以呢?求指教[/quote] 因为Memo字段,控件无法确定存储的内容,无法统一像AsString来使用;所以控件内部会提示类型匹配问题。
「已注销」 2014-04-23
  • 打赏
  • 举报
回复
引用 8 楼 Avan_Lau 的回复:
[quote=引用 7 楼 wangwei244157887 的回复:] 你好,这是原程序的代码地址http://download.csdn.net/detail/wangwei244157887/7237619 试验用的是ACCESS,实际是Sqlite,用你的方法试验没成功
看你的程序,既然Sender.AsString都能显示,没理由有问题。 为什么不trace一下这行代码??DataSet.FieldByName('工程名称').AsString=quotedstr('data_block_1') 为什么需要quotedstr??其实这里已经不需要了...[/quote] 恩,太谢谢了,为什么用你这种方法可以,而直接写Filter属性却不可以呢?求指教
金卯刀 2014-04-23
  • 打赏
  • 举报
回复
引用 7 楼 wangwei244157887 的回复:
你好,这是原程序的代码地址http://download.csdn.net/detail/wangwei244157887/7237619 试验用的是ACCESS,实际是Sqlite,用你的方法试验没成功
看你的程序,既然Sender.AsString都能显示,没理由有问题。 为什么不trace一下这行代码??DataSet.FieldByName('工程名称').AsString=quotedstr('data_block_1') 为什么需要quotedstr??其实这里已经不需要了...
「已注销」 2014-04-22
  • 打赏
  • 举报
回复
引用 3 楼 Avan_Lau 的回复:
可以在OnFilterRecord事件里处理

begin    
  if DataSet.FieldByName('工程名称').AsString=Edit1.Text then  
     Accept:=true  
  else 
     Accept:=false; 
end;
你这个Edit1.text是我过滤的字符吗?关键一设置过滤字段,就报类型不匹配啊,还没到你这个事件里面啊
金卯刀 2014-04-22
  • 打赏
  • 举报
回复
可以在OnFilterRecord事件里处理

begin    
  if DataSet.FieldByName('工程名称').AsString=Edit1.Text then  
     Accept:=true  
  else 
     Accept:=false; 
end;
「已注销」 2014-04-22
  • 打赏
  • 举报
回复

  ClientDtSet_1.Filter:='工程名称='+quotedstr('data_block_1');
  ClientDtSet_1.Filtered :=true;
工程名称字段为memo类型
金卯刀 2014-04-22
  • 打赏
  • 举报
回复
你是如何设置过滤的?相关属性设置及代码贴出来瞧瞧

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧