我遇到了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个数字开头。这些字母无关紧要。
答案 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}}位于使用子句中,那么您的代码可能会正常工作。