var
  S:array of char;
  stream:TStream;
  str:string;
.....
begin
  str:='待查找字符串';
  stream:=keyADO.CreateBlobStream(keyADO.FieldByName('Content'),bmRead);
  stream.Position:=0;
  SetLength(S,stream.size);
  stream.Read(S[0],stream.size);
  if Pos(str,string(S)>0 then
  ShowMessage('找到了!');
  
end;
Content字段保存的是word文档.
用此法查找字符串时,可以95%的找到需要查找的字符串,可就是有极个别的查找不到,不知错在何处?
Content

解决方案 »

  1.   

    word文档作为一种有自己特定格式的应用文档,和Txt文件不一样的,一些字符找不到,应该算是正常的。要不楼主把word中的内容,复制另存为一份txt文件,然后,将这个txt文件插入到数据库的content字段中试试,看能不能100%查找得到;
      

  2.   

    如果把word换成text再存入数据库就没有格式信息了。
    这问题确实有点怪,当我对不能查找到某字符的word文档稍微编辑一下再保存至数据库,一般再去又此法搜索时又能找到字符串。
      

  3.   

    stream.Read(S[1],stream.size);
                  ~~~~
      

  4.   

    谢谢大侠,试试,以前aiirii经常帮助我,真是艺高人品好。
      

  5.   

    word里存储的是rtf格式
    一些不可见字符(包括汉字)都被重新编码掉
    除非将编码还原,才可以100%定位
      

  6.   

    探索了一个月,自己搞好了。
     if Pos(str,string(S))>0 then 改成if Pos(str,Widestring(S))>0
      

  7.   

    UP~~~Widestring(S)和 string(S)
    应该是 2字节和单字节的区别吧~
    楼主是不是找汉字才找不到的?
      

  8.   

    是啊,现在word没问题了,但excel却比原来代码有更多汉字不能找到。真搞中明白。