运行时没有提示出现什么问题,但是按完按钮后什么反应都没有了procedure TForm1.Button2Click(Sender: TObject);
var
  s1,s2,w:string;
  len,n:integer;
const
  maxlength=8;
  Separator='/';
begin
  s1:=richedit1.text;
  s2:='';
  n:=1;
  while s1<>'' do
    begin
      len:=length(s1);
      if len>maxlength then
         len:=maxlength;
      w:=Leftstr(s1,len);
      if not Table1.Locate('word',w,[loPartialkey]) then n:=-1;
      while(len>2)and(n=-1) do
        begin
          len:=len-2;
          w:=leftstr(w,len);
          if not Table1.Locate('word',w,[loPartialkey]) then n:=-1;
        end;
      s2:=s2+w+Separator;
      s1:=Midstr(s1,Length(w)+1,length(s1));
    end;
    richedit1.text:=s2;
end;

解决方案 »

  1.   

    设一下断点吧!不过也有可能和数据库有关。因为locate在大数据库里操作,如果没有索引的话是很费时间的。
      

  2.   

    代码没问题!可能你的RichEdit内的内容过多加上你的循环太大造成的!如果表中的数据量过多也会很慢不要用Locate,用Query查,会快很多~
      

  3.   

    begin
      s1:=richedit1.text;
      s2:='';
        while s1<>'' do
        begin
          n:=1;                         //修改here
          len:=length(s1);
          if len>maxlength then
             len:=maxlength;
          w:=Leftstr(s1,len);
          if not Table1.Locate('word',w,[loPartialkey]) then n:=-1;
          while(len>2)and(n=-1) do
            begin
              len:=len-2;
              w:=leftstr(w,len);
              if not Table1.Locate('word',w,[loPartialkey]) then n:=-1
                 else                   //
                    n:=1;               //修改here
            end;
          s2:=s2+w+Separator;
          s1:=Midstr(s1,Length(w)+1,length(s1));
        end;
        richedit1.text:=s2;
    end;