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模糊查询-----------------------------