Search code examples
delphidlldatamodule

Delphi - Error in using TTable in DataModule in DLL


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'


Solution

  • 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)...