Delphi模糊查询[ POS函数和Like SQL语句 ]使用方法

Delphi模糊查询[ POS函数和Like SQL语句 ]使用方法

//-----------POS函数---------------Delphi模糊查询--------------------------
delphi中的pos函数,是字符串处理中经常要使用到的一个常用函数。他的作用是返回目标字符在字符串中的位置,返回值为integer型,查看帮助文件得知pos函数在System单元声明及定义的。我们先来看一下pos函数的声明是什么样子的。
 
    function Pos(Substr: string; S: string): Integer;


{ ----------------------------------------------------- }
{       string utilities                                }
{ ----------------------------------------------------- }

function Pos(const SubStr, Str: _ShortStr; Offset: Integer): Integer;
{$IFDEF PUREPASCAL}
var
  I, LIterCnt, L, J: Integer;
  PSubStr, PS: _PAnsiChr;
begin
  L := _PStrLen(SubStr);
  { Calculate the number of possible iterations. Not valid if Offset < 1. }
  LIterCnt := _PStrLen(Str) - Offset - L + 1;

  { Only continue if the number of iterations is positive or zero (there is space to check) }
  if (Offset > 0) and (LIterCnt >= 0) and (L > 0) then
  begin
    PSubStr := @SubStr[1];
    PS := @Str[1];
    Inc(PS, Offset - 1);

    for I := 0 to LIterCnt do
    begin
      J := 0;
      while (J >= 0) and (J < L) do
      begin
        if PS[I + J] = PSubStr[J] then
          Inc(J)
        else
          J := -1;
      end;
      if J >= L then
        Exit(I + Offset);
    end;
  end;

  Result := 0;
end;

 


查看帮助文件得知pos函数在System单元声明及定义的。


//-----------POS函数---------------Delphi模糊查询--------------------------

delphi pos函数使用方法实例详解[ 用于模糊查询 *.*]
导读:delphi中的pos函数,是字符串处理中经常要使用到的一个常用函数。他的作用是返回目标字符在字符串中的位置,返回值为integer型,查看帮助文件得知pos函数在System单元声明及定义的。我们先来看一下pos函数的声明是什么样子的。 function Pos(Substr: string;...
    delphi中的pos函数,是字符串处理中经常要使用到的一个常用函数。他的作用是返回目标字符在字符串中的位置,返回值为integer型,查看帮助文件得知pos函数在System单元声明及定义的。我们先来看一下pos函数的声明是什么样子的。
 
    function Pos(Substr: string; S: string): Integer;
 
    pos函数有2个参数,第一个参数Substr是要查询的字符,类型为string,第二个参数S为要在哪个字符串中进行查询,也就是目标字符串,也是一个string类型的变量。pos函数的返回值是一个integer类型的值,表示要查询的字符在目标字符串中的位置。
 
    下面我们来编程实现以下这个功能,新建一个应用程序,添加3个edit控件和一个按钮。设置form1的caption属性为“pos函数实现查询字符的位置”。设置按钮的caption属性为“得到字符的位置”。双击按钮控件进入代码页编辑按钮的click事件,代码如下:
 
    procedure TForm1.btn1Click(Sender: TObject);
    var
      zifuchuan,zifu:string;           //声明2个string类型的变量,用来接收用户在edit控件中输入的字符。
    begin
      zifuchuan:=form1.edt3.Text;      //将edt3控件的text属性的值赋值给变量“zifuchuan”,也就是目标字符串。
      zifu:=form1.edt1.Text;           //将edt1控件的text属性的值赋值给变量“zifu”,也就是要查询的字符。
      form1.edt2.Text:=IntToStr(pos(zifu,zifuchuan));  //用pos函数得到变量zifu在变量zifuchuan中的位置,
      //并将结果转换为string类型赋值给edt2的text属性显示出来。
    end;
 
    好了,代码部分已经完成了,如果你想判断edt3和edt1的text属性是否为空,如果为空的话提示用户输入或警告,这个可以自己添加一个判断来实现,比如:
 
        if zifuchuan='' then ShowMessage('您输入的字符串为空');
 
    我这里就不再实现这个功能了。直接F9运行,如下图:

?
? ?下面我们在第一行输入字符串“abcdefg”,在第二行输入字符“e”,然后点击“得到字符的位置”按钮。运行结果如下图:

?
    我们看到在“字符的位置”后面的edit框里面会显示出“5”,结果是正确的,“e”在字符串“abcdefg”的位置确实是在第5位。
 
    如果我们在第二行输入“ef”呢?结果还是“5”,说明pos函数也可以查询字符串在字符串的位置,返回的是要查询的字符串的首字符在目标字符串中的位置。
 
    如果我们要查询的中文呢?下面我们来试一下,我们在第一行输入“村姑网”,第二行输入“姑”,运行后如图所示:

?
    为什么输入中文的时候pos函数的返回值就不正确了呢?其实结果还是正确的,只是因为一个汉字占2个字符,所以“姑”字明明是第二个字,pos函数的返回值却是3的原因了。

 

//-----------Like SQL语句----------Delphi模糊查询-----------------------------

 if cbb_zdm.Text = '姓名' then
        with qry_khzl do // 用With语句重复访问一个记录类型变量(或一个对象)
          // with后面不要忘了写do和begin...end;
          begin
            Application.ProcessMessages; // 代码块开始
            close;                      // 操作某些对象属性时必须先关闭他
            sql.clear; // 清空SQL语句字符串,with使代码简化,寻址加速,性能增强
            sql.add('Select * From 客户资料数据库 where 姓名1 Like ' +
              Quotedstr('%' + (ComboBox_Search.Text) + '%'));
            sql.add('or 姓名2 Like ' + Quotedstr('%' + (ComboBox_Search.Text)
              +
              '%'));                    // 模糊查询
            sql.add('or 姓名3 Like ' + Quotedstr('%' + (ComboBox_Search.Text)
              +
              '%'));                    // 模糊查询
            sql.add('or 姓名 Like ' + Quotedstr('%' + (ComboBox_Search.Text)
              +
              '%'));                    // 模糊查询

            sql.add('or 姓名1py Like ' + Quotedstr('%' +
              (ComboBox_Search.Text) +
              '%'));                    // 模糊查询
            sql.add('or 姓名2py Like ' + Quotedstr('%' +
              (ComboBox_Search.Text) +
              '%'));                    // 模糊查询
            sql.add('or 姓名3py Like ' + Quotedstr('%' +
              (ComboBox_Search.Text) +
              '%'));                    // 模糊查询
            sql.add('or 姓名py Like ' + Quotedstr('%' +
              (ComboBox_Search.Text) +
              '%'));                    // 模糊查询
            sql.add('or 电脑编号 Like ' + Quotedstr('%' + (ComboBox_Search.Text)
              +
              '%'));                    // 模糊查询
            sql.add(' order by 电脑编号');
            open;
            dtp1.DateTime := qry_khzl.FieldByName('日期').AsDateTime;
            Application.ProcessMessages;
          end


//-----------Like SQL语句----------Delphi模糊查询-----------------------------

转载于:https://www.cnblogs.com/delphichm/p/3408681.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值