我声明了一个私有的过程如下:
Procedure TfrmCustOrder.edtCustIDCodeExit(Sender:TObject);
const
cSqlCustom='select * from Customer where rtrim(CustID)=''%s'' and rtrim(Code)=''%s''';
var
sCustID,sCode:String;
begin
sCustID:=Trim(edtCustID.Text);
sCode:=Trim(edtCode.Text);
if (sCustID<>'') and (sCode<>'') then
begin
with dataGoodsOrder do
begin
qryCustomer.Sql.text:=Format(cSqlCustom,[sCustID,sCode]);
qryCustomer.Open;
if not qryCustomer.IsEmpty() then
begin
IsOldCustomer:=True;
edtCustName.Text:=qryCustomer.fieldbyname('CustName').AsString;
rdoSexMale.Checked:=qryCustomer.FieldByName('Sex').AsString='M';
rdoSexFemale.Checked:=qryCustomer.FieldByName('Sex').AsString='F';
edtTel.Text:=qryCustomer.fieldbyname('Tel').AsString;
edtZip.Text:=qryCustomer.fieldbyname('Zip').AsString;
edtAddress.Text:=qryCustomer.fieldbyname('Address').AsString;
end
else
begin
IsOldCustomer:=False;
ShowMessage('顾客号和顾客身份证不符,该顾客是新顾客!');
uspTmp.Parameters.Clear;
uspTmp.ProcedureName:='usp_GetNewCustID';
uspTmp.Parameters.CreateParameter('DataStr',ftString,pdInput,8,formatDateTime('YYYYMMDD',Today));
uspTmp.Parameters.CreateParameter('CustID',ftString,pdOutPut,11,'');
uspTmp.ExecProc;
sCustID:=uspTmp.Parameters.parambyname('CustID').Value;
edtCustID.Text:=sCustID;
end;
end;
end;
在Form中有个消息响应如下:
procedure TfrmCustOrder.edtCodeExit(Sender: TObject);
begin
frmCustOrder.edtCustIDCodeExit(self.edtCustID.Parent);
end;
我利用调试的Watch追踪edtCustID.Text的值发现到frmCustOrder.edtCustIDCodeExit(self.edtCustID.Parent);中的
sCustID:=Trim(edtCustID.Text);就有问题了,提示是edtCustID没有定义,可是在过程外的值都是对的,一进过程就不对了,是不是我在消息响应的过程中的参数写的不对?