Erro Invalid pointer operation ao criar data module

Delphi

10/05/2016

olá amigos, tenho uma dll feita em delphi 2010, e as vezes ocorre o erro de "Invalid pointer operation" ao criar o data module, o qual contém componentes de conexão dbexpress (simpledataset, sqlconnection, clientdataset, etc, assim como alguns componentes do rave report). A dll funciona 90% das vezes, mas vez ou outra gera o erro.

A aplicação que chama afunção da dll tb é feita em delphi 2010. Pesquisei bastante no google, mas nunca vi dar esse erro ao criar um data module, geralmente o pessoal encontra esse erro ao dar um .free ou ao sair da aplicação, mas no meu caso é ao CRIAR data module.

As mensagens não são sempre iguais, isso que me intriga:

- invalid pointer operation, OU
- error reading sqlTable1FIELD1.FieldName: invalid pointer operation, OU
- error reading sqlTable1FIELD1.SQLConnection: property 0RAVECOMPLETED does not exist

Alguma sugestão?

function Imp1(vEmp: Integer): boolean; export; stdcall;
var Registry: TRegistry;
begin
  with dmNFD2 do
  begin
    try
      p_NumEmp := vEmp;
      result := True;
      if not(Assigned(dmNFD2)) then
         //Application.CreateForm(TdmNFD2,dmNFD2); // erro aqui ou
         dmNFD2 := TdmNFD2.Create(nil); // erro aqui
      if not(dmNFD2.sqlConn.Connected) then
      begin
        ConnectBD; // le o registro do windows (path, user e password database)
      end;
      if dmNFD2.sqlConn.Connected then
      begin
        qryGen.Close;
        qryGen.SQL.Text := 'select NFFCEN from DWGAS024 where PARNUM = :PARNUM';
        qryGen.Params.ParamByName('PARNUM').AsInteger := p_NumEmp;
        qryGen.Open;
        // insert or update in other table
        // ....
      end;     
    except
      on e:Exception do
      begin
        result := False;
      end; 
    end;
end;    
Fernando

Fernando

Curtidas 0

Melhor post

Raimundo Pereira

Raimundo Pereira

13/05/2016

Declarei em USES >>Registry ,U_dmNFD2

E realizei os testes, funcionou normal.

Imagem do Teste
GOSTEI 1

Mais Respostas

Fernando

Fernando

10/05/2016

Já tentei colocar o SimpleShareMem como 1a. declaração do uses, tanto no fonte da dll como no fonte do exe que chama ela, mesmo erro...
GOSTEI 0
Fernando

Fernando

10/05/2016

olá amigos, ainda continuo com esse problema, ainda não resolvido! Mais alguma sugestão?
GOSTEI 0
Luiz Vichiatto

Luiz Vichiatto

10/05/2016

Eu tive este problema por não testar o database no datamodule, e crio o datamodule na abertura, depois nem testo mais se ele existe, pois exceto a instrução terminate que encerra a aplicação e consequentemente liberar o formulário do datamodule.

Já verificou se os parâmetros que estão sendo passados nas consultas estão corretos p_NumEmp é um inteiro na tabela e no parâmetro da consulta?

att
GOSTEI 0
Fernando

Fernando

10/05/2016

Luiz, o erro ocorre na criação do data module e não numa consulta sql. Já tentei das 2 formas, porém ambas dão erro. A questão toda é que esse erro de "invalid pointer operation" vem ocorrendo após ter adicionado o SimpleShareMem na unit da dll. Precisei fazer isso, pois nosso sistema trabalha com várias dlls, e outras dlls precisam do SimpleShareMem (trabalham com string em parãmetros).

Se eu retiro o SimpleShareMem da dll, outros erros vem ocorrendo na aplicação (access violation genéricos, e aleatórios).

      if not(Assigned(dmNFD2)) then
         //Application.CreateForm(TdmNFD2,dmNFD2); // erro aqui ou
         dmNFD2 := TdmNFD2.Create(nil); // erro aqui
GOSTEI 0
Luiz Vichiatto

Luiz Vichiatto

10/05/2016

Se você remover o esta parte do código, que tipo de erro ocorre?
if not(Assigned(dmNFD2)) then
         //Application.CreateForm(TdmNFD2,dmNFD2); // erro aqui ou
         dmNFD2 := TdmNFD2.Create(nil); // erro aqui
GOSTEI 0
POSTAR