Erro Invalid pointer operation ao criar data module
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?
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
Curtidas 0
Melhor post

Raimundo Pereira
13/05/2016
GOSTEI 1
Mais Respostas

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
10/05/2016
olá amigos, ainda continuo com esse problema, ainda não resolvido! Mais alguma sugestão?
GOSTEI 0

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