这是一个Formkl窗体要调用FormXydkmxzCx窗体的Query(程序如下),编译通过了,可是当单步执行到if  (copy(FormXydkmxzCx.QryCx.fieldbyname('dm').asstring,1,1)<>'H') then时,出现地址错误,请大家指点,谢谢。错误提示:“access violation at address 0055ea33 in module 'PRJMAIN.EXE'.
            read of address FFFFFFFF"
unit formklunit;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, DBTables;type
  TFormkl = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Qrykl: TQuery;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Formkl: TFormkl;implementationuses DMCkglUnit, FormXydkmxzCxUnit;{$R *.DFM}procedure TFormkl.Button1Click(Sender: TObject);
var
    tsxx:string; //提示信息
    casebz : integer;               //  判断的标志信息
begin  if Qrykl.FieldByName('rykl').asstring=Edit1.text then
  begin
 if not DMCkglDb.DatabaseCkgl.InTransaction then
        DMCkglDb.DatabaseCkgl.StartTransaction;  if  (copy(FormXydkmxzCx.QryCx.fieldbyname('dm').asstring,1,1)<>'H') then
   begin
     showmessage('请选择临时信用记录!!');
     exit;
     end;  casebz:= 0;  if  (  (copy(FormXydkmxzCx.QryCx.fieldbyname('bz').asstring,1,4)='电汇')  and   (FormXydkmxzCx.QryDkmxz.fieldbyname('bz').asstring='未冲帐' )  ) then
     begin
     casebz:= 1;                                  //  为"电汇"的回款传真件 根据手工选择的未对冲的到款凭证,与信用到款的汇票号码冲帐
     tsxx:='将根据信用到款的汇票号码:'+FormXydkmxzCx.QryCx.fieldbyname('hphm').asstring+'与到款凭证号:'+FormXydkmxzCx.QryDkmxz.fieldbyname('DKHM').asstring;
     end  ;  if  ( trim(FormXydkmxzCx.QryCx.fieldbyname('fl').asstring)='H')  or ( length(FormXydkmxzCx.QryCx.fieldbyname('fl').asstring)=0 ) then
      if (FormXydkmxzCx.QryDkmxz.locate('PJHM',trim( FormXydkmxzCx.QryCx.fieldbyname('HPHM').asstring) ,[]) ) and (FormXydkmxzCx.QryDkmxz.fieldbyname('bz').asstring='未冲帐')  then
         begin
         casebz:= 2;                //  为回款传真件或前期未确认类被临时信用到款类别 根据到款凭证,与信用到款的汇票号码冲帐
         tsxx:='将根据信用到款的汇票号码:'+FormXydkmxzCx.QryCx.fieldbyname('hphm').asstring+'与到款凭证号:'+FormXydkmxzCx.QryDkmxz.fieldbyname('DKHM').asstring;
         end;  if   (trim(FormXydkmxzCx.QryCx.fieldbyname('fl').asstring)='C')  then
       begin
       casebz:= 3;                   //  为超信用发货 仅根据信用到款的汇票号码冲帐
       tsxx:='将根据信用到款的汇票号码:'+FormXydkmxzCx.QryCx.fieldbyname('hphm').asstring;
       end;  if   casebz= 0  then
      begin
      showmessage('未找到与临时信用到款的汇票号码相匹配的到款记录!');
      exit;
      end; if  MessageDlg(tsxx+ '对冲此客户的临时信用到款, 对冲(Yes)-不对冲(NO)',mtConfirmation, [mbYes, mbNo], 0)=mryes  then
   begin
      FormXydkmxzCx.QryXydkmxz_CZ.Close;
      case   casebz  of
       1..2: begin
             FormXydkmxzCx.QryXydkmxz_CZ.ParamByName('v_HPHM').Asstring:=FormXydkmxzCx.QryCx.fieldbyname('hphm').asstring;
             FormXydkmxzCx.QryXydkmxz_CZ.ParamByName('V_DKHM').Asstring:=FormXydkmxzCx.QryDkmxz.fieldbyname('DKHM').asstring;
            end;
       3:    begin
             FormXydkmxzCx.QryXydkmxz_CZ.ParamByName('v_HPHM').Asstring:=FormXydkmxzCx.QryCx.fieldbyname('hphm').asstring;
             FormXydkmxzCx.QryXydkmxz_CZ.ParamByName('V_DKHM').Asstring:=' ';
            end;
      end;     FormXydkmxzCx.QryXydkmxz_CZ.ExecSQL;
     FormXydkmxzCx.BitBtnFindClick(self);
   end;
 {
  if  ( trim(QryCx.fieldbyname('fl').asstring)='H')  or ( length(QryCx.fieldbyname('fl').asstring)=0 ) then
      begin
       if  (QryDkmxz.locate('PJHM',QryCx.fieldbyname('HPHM').asstring,[]) ) and (QryDkmxz.fieldbyname('bz').asstring='未冲帐')  then
           begin
           end
           else
           begin
           showmessage('未找到与临时信用到款的汇票号码相匹配的到款记录!');
           exit;
           end;        tsxx:='将根据信用到款的汇票号码:'+QryCx.fieldbyname('hphm').asstring+'与到款凭证号:'+QryDkmxz.fieldbyname('DKHM').asstring;
      end;  if   (trim(QryCx.fieldbyname('fl').asstring)='C')  then
      begin
      tsxx:='将根据信用到款的汇票号码:'+QryCx.fieldbyname('hphm').asstring;
      end;  if  MessageDlg(tsxx+ '对冲此客户的信用到款信息(Yes)-不对冲(NO)',mtConfirmation, [mbYes, mbNo], 0)=mryes  then
   begin     QryXydkmxz_CZ.Close;
              //  为回款传真件或前期未确认类被临时信用到款类别 根据到款凭证,与信用到款的汇票号码冲帐
     if  ( trim(QryCx.fieldbyname('fl').asstring)='H')  or ( length(QryCx.fieldbyname('fl').asstring)=0 ) then
      begin
      QryXydkmxz_CZ.ParamByName('v_HPHM').Asstring:=QryCx.fieldbyname('hphm').asstring;
      QryXydkmxz_CZ.ParamByName('V_DKHM').Asstring:=QryDkmxz.fieldbyname('DKHM').asstring;
      end;
              //  为超信用发货 仅根据信用到款的汇票号码冲帐
     if   (trim(QryCx.fieldbyname('fl').asstring)='C')  then
      begin
      QryXydkmxz_CZ.ParamByName('v_HPHM').Asstring:=QryCx.fieldbyname('hphm').asstring;
      QryXydkmxz_CZ.ParamByName('V_DKHM').Asstring:=' ';
      end;      QryXydkmxz_CZ.ExecSQL;      BitBtnFindClick(self);
   end;
   }
   try
     DMCkglDb.DatabaseCkgl.Commit;
   except
        DMCkglDb.DatabaseCkgl.Rollback;
        application.MessageBox('保存出错','系统提示',mb_ok);
   end; end
 else showmessage('口令不正确,请重新输入!');
end;
procedure TFormkl.Button2Click(Sender: TObject);
begin
  Close;
end;procedure TFormkl.FormCreate(Sender: TObject);
begin
  Qrykl.Open;
end;procedure TFormkl.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Qrykl.close;
  action:=cafree;
end;end.