[DUG] Strange access error on application close...

Dave O'Brien dave at ICCS.CO.NZ
Wed Aug 9 11:27:09 NZST 2006


Application... (Using DBGo)
begin
  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TfrmLogin, frmLogin);
  if frmLogin.ShowModal = mrOK then
  begin
    seID := 0 ;
    datamod.ADOQuery.SQL.Text := 'Select seID from Security...' ;
    datamod.ADOQuery.Open ;
    try
      if not datamod.adoQuery.eof then
        seID := datamod.ADOQuery.FieldByName('seID').AsInteger
      else
        ShowMessage('Invalid Username/Password') ;
    finally
      datamod.ADOQuery.Close ;
    end ;
    if seID <> 0 then
      Application.Run ;
  end ;
end.

With the above concept code I am getting a strange error.
"Access violation at address 00490742 in module'test.exe'. Read of
address 00C628C8"

The error occurs if the login is cancelled, does not occur if the login
is OK'd but the username/password is not found, so it has nothing to do
with "Running" the app.

If I change the end of the file to:

    if seID <> 0 then
      Application.Run ;
  end
  else
    datamod.ADOQuery.SQL.Text := 'Anything but a blank string...' ;
end.

It now exits fine...
Any idea why I have to assign some text to the query or the app bombs on
exit? There are multiple TADOQuery's in the data module, so why don't I
have to assign something to each of them? Assigning a value only to that
query at design time also resolves the problem.

Cheers,
Dave.




More information about the Delphi mailing list