比较字符串的一部分

时间:2011-06-07 20:44:59

标签: delphi

我遇到了Delphi的问题。

我必须比较一个4字符串的字符串,数据库中的数据是6个字符长(邮政编码(荷兰))。

我现在拥有的是:

procedure Tfmpostcode.Button1Click(Sender: TObject);
var
  postcode : string;
  target: string;
begin
 postcode := ePostcode.text;
 target :=  leftStr(postcode,4);
 dm.atinlog.filter   := 'postcode ='  + (target);
 dm.atinlog.filtered := true;
 dbgrid1.visible := true;
end;

我一直在网上搜索,我发现你可以使用ansistring。但它会出错。

  

缺少运算符或分号

我该怎么办?

我更新了代码

其他信息:

我需要将字符串的一部分与数据库中的数据进行比较 如果我在编辑字段中输入5504BX dbgrid应该出现 5504LA 5504KJ 所有这些都以前4个数字开头。这些字母无关紧要。

3 个答案:

答案 0 :(得分:6)

我认为你需要引用字符串。使用QuotedStr。

dm.atinlog.filter   := 'postcode = '  + QuotedStr(target);

如果你需要外卡匹配,你可以

dm.atinlog.filter   := 'postcode like '  + QuotedStr(target+'%');

答案 1 :(得分:0)

您可以使用StrUtils.pas

中的LeftStr函数
function LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString; overload;
function LeftStr(const AText: WideString; const ACount: Integer): WideString; overload;

function AnsiLeftStr(const AText: string; const ACount: Integer): string; overload;

但不要将其声明为变量。

尝试:

procedure Tfmpostcode.Button1Click(Sender: TObject);
var
  postcode : string;
  target   : string;
begin
 postcode := ePostcode.text;
 target   := LeftStr(postcode, 4);  
 //...
end;

但是,因为邮政编码是从编辑框中输入的。您可能需要一些安全措施(只接受字母数字字符)或使用Trim(ePostcode.text)删除额外的空格。如果你想得到最后一部分,不要忘记有些人在数字和字母之间添加一个空格(1234 AB)。

答案 2 :(得分:0)

你没有给出与错误相关的一行,但如果我不得不猜测,我会说它抱怨说

这一行

target :=  AnsileftStr(postcode,4);

您将AnsileftStr声明为变量,然后您尝试使用看起来像带有两个参数的函数调用的语法。您是否尝试从AnsiLeftStr单元拨打StrUtils功能?如果是这样,如果您删除了变量声明并确保{<1}}位于使用子句中,那么您的代码可能会正常工作。