这是一个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.
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.
你可以设个断点判断一下FormXydkmxzCx的值是否为nil,为nil表示窗体未实现化。