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 aquiGOSTEI 0