从数据库中找同t2尽可能相似的数据,下列语句可以,但太慢
t2可能比找出来的数据长     i:=10;
     t3:=copy(t2,1,10);
     while form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey])  do
     begin
         i:=i+2;
         t3:=copy(t2,1,i);     end;
     showmessage('完成匹配');

解决方案 »

  1.   

    用adoquery
    select * from table where formatadd like 't2%'
      

  2.   

    把你的ADOTable换成ADOQuery
    SELECT * FROM TABLE WHERE FORMATADD LIKE 't2%'
      

  3.   

    用adoquery
    select * from table where formatadd like 't2%'
      

  4.   

    ADOQuery.close;
    ADOQuery.sql.add('SELECT * FROM TABLE WHERE FORMATADD LIKE 't2%'');
    ADOQuery.ExecSQL;
      

  5.   

    当t2比数据库中的数据都长时时,这个语句可以吗?
    举例t2:='广州市天河北路233号中信广场';我要查找最相近的地址如:广州市天河北路xxxxxx
    尽可能相近
      

  6.   

    SELECT * FROM TABLE WHERE FORMATADD LIKE 't2%'
    它可以查询以t 开头的任意长度的字符串
      

  7.   

    随便写了下不知正不正确反正大概就是这样你看着改吧
    declare @S varchar(200)
    set @S = 'Davoliogfds'
    declare @N int
    set @N = 1
    while @N < Len(@S) and exists( select * from Employees where  SubString(LastName,1,@N) = SubString(@S, 1, @N))
    begin
       Set @N = @N + 1end
    Set @N = @N - 1
    select * from Employees where  SubString(LastName,1,@N) = SubString(@S, 1, @N)
      

  8.   

    var t2:string;
    t2:='你自己的条件'
    adoquery1.sql.text:='SELECT * FROM TABLE WHERE FORMATADD LIKE '''+t2+‘%'+'''';
      

  9.   

    DWGZ() 思路是对的,不过逻辑反了,循环错了
    declare @S varchar(200)
    set @S = 'Davoliogfds'
    declare @N int
    set @N = Leng(@S)
    while (@N >0) and not exists( select * from Employees where  SubString(LastName,1,@N) = SubString(@S, 1, @N))
    begin
       Set @N = @N - 1
    end
     select * from Employees where  SubString(LastName,1,@N) = SubString(@S, 1, @N)
      

  10.   

    select * from table where formatadd like 't2%'
      

  11.   

    ADOQuery.close;
    ADOQuery.sql.add('SELECT * FROM TABLE WHERE FORMATADD LIKE 't2%'');
    ADOQuery.ExecSQL;
    这样就可以了
      

  12.   

    select * from table(表名) where formatadd like 't2%'
      

  13.   

    其实用gotonearest或findnearest也可以执行不精确查找。
    begin 
      with table1 do
        begin
          indexfieldnames:='address';
          setkey;
          fieldbyname('address').asstring:=edit1.text;
          gotonearest;
        end;
    end;
      

  14.   

    你的方法不仅是太慢,还有一点小问题,你要查找的字符串中应该可以含有数字或英文字母吧,
      你要知道一个汉字占两位,而一个数字或字母仅占一位,你大概明白了吧。。
      比如:t2:='广州市天河北路233号中信广场'; 
         i:=10;
         t3:=copy(t2,1,10);
         while form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey])  do
         begin
             i:=i+2;
             t3:=copy(t2,1,i);
         end;
         当循环执行到第3次时 t3='广州市天河北路23';
         而当循环执行到第4次时 t3并不='广州市天河北路233号';t3=? 我也不知道!
         所以这里应该用某个函数判断下一字符是否多字节字符;(DELPHI有这样的函数,我现在
         网吧,没法帮你查,你自己查查吧!)
       
    我这里假设字符串中不含有中文;      
    var i:integer; t3:string; 
    begin
      t3:=需要匹配的字符串;
      i:=length(t3);
      //当匹配失败并且i<>0时 缩短匹配字符串继续匹配;直到找到匹配字符串或者i=0 时退出
      while (not form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey]))and(i<>0) do
      begin
        i:=i-1;
        t3:=copy(t2,1,i);
      end;
      
      if i<>0 then
        showmessage('完成匹配')
      else
        showmessage('没有匹配的字符串');
    end;
      

  15.   

    这是一个查询邮政编码的程序
    数据库中是大量地址和对应的邮编,
    形如:
    地址                                邮编
    广东省广州市天河区粤垦路27号        510517
    也有的地址不带“省”或“市”两字   如:广东广州天河区粤垦路27号同时我的另外一个会员资料库中有的资料只有地址没有邮编
    这时我就需要从上面的地址库中查询相近的地址,找出所需邮政编码我的方法是
    先将邮编库中地址的“省”“市”“县”去掉
    匹配程序如下   t1:= form2.ADOTableHY.FieldByName('地址').AsString;  //会员地址
         strl:=Length(t1);
         t2:='';
         for i:= 1 to (strl) do
         begin
             if ByteType(t1,i) = mbLeadByte then
             if copy (t1,i,2) <> '省' then
                    if copy (t1,i,2) <> '市' then
                            if copy (t1,i,2) <> '县' then
                            begin
                            t2:=t2+copy (t1,i,2);
                           // showmessage(copy(t1,i,2));
                            end;
             if ByteType(t1,i) = mbSingleByte then t2:=t2+copy (t1,i,1);
             end;
             if  form2.ADOTableHY.FieldByName('地区').AsString <> '其他' then
                    if copy(t2,1,4) <> form2.ADOTableHY.FieldByName('地区').AsString then
                             t2:= form2.ADOTableHY.FieldByName('地区').AsString + t2;
             t2:='广东'+t2+'$#@%#^^##^';   //以上程序是将会员地址格式化
         i:=10;
         t3:=copy(t2,1,10);     while form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey])  do  //在邮编库中查找
         begin
             i:=i+2;
             t3:=copy(t2,1,i);     end;
         form2.Button4.Enabled:=true;
         showmessage('完成匹配');这段程序基本能查出相似地址,但好慢
    sql语言我不太懂
    所以求助于大家,谢谢另外select * from table(表名) where formatadd like 't2%'是没用的,希望大家考虑清楚在回答
      

  16.   

    判断字符是否双字节用下面函数
    ByteType(const S: string; Index: Integer): TMbcsByteType;TMbcsByteType;
    mbSingleByte 单字节
    mbLeadByte 双字节字符的头字节
    mbTrailByte 双字节字符的尾字节