Delphi - Error in using TTable in DataModule in DLL

1.5k Views Asked by At

I have an app that works fine... Porting it to be implemented as a DLL. I have a datamodule that has my Database and TTable components on it... In Design mode, the Database is set to Active. Tables point to the database, they are set to active. I can right click on the tables, go the field editor, and see all the columns, so I know the structure/properties are set up fine....

The problem is at run time... It gives me an AV on this line...

 if MyDataModule.DB1.Connected = True then
  ShowMessage('Active')
   else 
 ShowMessage('Not Active');

I have seen hints on the web that there is something special that needs to be done to use a Datamodule inside a DLL, but I am not getting anything to work.

Specific error message is:

Access Violation at address 06D4E22E in module 'DocAssistCom.dll' Read of address 0000070'

1

There are 1 best solutions below

3
On BEST ANSWER

You should verify that MyDaModule is indeed created, then that MyDataModule.DB1 is created as well before even trying to use MyDataModule.DB1.Connected.

if Assigned(MyDataModule) then
  if Assigned(MyDataModule.DB1) then
    if MyDataModule.DB1.Connected = True then
      ShowMessage('Active')
    else 
      ShowMessage('Not Active')
  else
    ShowMessage('MyDataModule.DB1 not assigned')
else
  ShowMessage('MyDataModule not assigned');

But they might still not be fully created and ready when you try to use them.

So, instead of spreading ShowMessage calls around, I would rather use OutputDebugstring and debug the DLL in the IDE to see the code path...

Note: I don't know which versions of Delphi and Windows you are working with, but be aware that TTable requires the BDE (which is quite deprecated nowadays)...