GARANTIR DESCONTO

Fórum Erro acsses violation at address 00774788 in module PreVenda.exe. Read of address 00000000. #417643

29/05/2012

0

Galera, nao sei mais o que fazer, toda vez que tenho que chamar um formulario de consulta por um botão ele abre normalmente, ja na sefunda vez que vou utiliza-lo, aparece o erro Erro acsses violation at address 00774788 in module PreVenda.exe. Read of address 00000000.
Segue o codigo inteiro da chamada ao formulario.

procedure TfrmPreVenda.btnPesqPedidoClick(Sender: TObject);
var
ret : Boolean;
p : TBancoDados;
begin
if status = 0 then
begin
if sPedVenda = 1 then
begin
ret := p.gravaBackup(P);
limpaCampos;
desabilitaBotoesFinal;
if ret = false then
begin
Application.MessageBox(Erro ao ao regravar a Pré venda,Informação do Sistema,
MB_OK+MB_ICONERROR);
end;
end;
frmConsultaPedVenda := TfrmConsultaPedVenda.Create(Application);
try
frmConsultaPedVenda.ShowModal;
finally
frmConsultaPedVenda.Release ;
frmConsultaPedVenda := nil;
end;

end
else
Application.MessageBox(Existe Pré Venda em edição!,Informação do Sistema,
MB_OK+MB_ICONINFORMATION);

btnPesqPedido.Enabled := false;
btnOrcamento.Enabled := false;
btnConsPreco.Enabled := false;
btnCancelaItem.Enabled := false;
btnLogff.Enabled := false;
btnTransp.Enabled := true;
btnEditar.Enabled := true;
btnDescAcresc.Enabled := true;
btnGravar.Enabled := false;
gridProdutos.Enabled := false;


end;

Como sempre consegui resolver meus problemas por aqui, segue mais uma vez como minha ultima esperança;
Guilherme

Guilherme

Responder

Posts

29/05/2012

Joel Rodrigues

Depure o código e veja em qual linha exatamente ocorre o erro.
Responder

Gostei + 0

29/05/2012

Guilherme

Depure o código e veja em qual linha exatamente ocorre o erro.


sou iniciante, não sei usar o Debug, e outra coisa na maquina que eu desenvolvo nao acontece isso, só em outras maquinas.
Responder

Gostei + 0

30/05/2012

William

Qual versão do delphi vc está usando?

Exception de Access Violation gralmente é disparada quando tentamos acessar um obejto que não está na memória, revise seu código com cuidado.
Responder

Gostei + 0

30/05/2012

William

Na realidade analisando com um pouco mais de calma, vc criou essa variável p: TBancoDados, mas não encontrei no código onde vc instância esse objeto.
Responder

Gostei + 0

30/05/2012

Guilherme

Qual versão do delphi vc está usando?

Exception de Access Violation gralmente é disparada quando tentamos acessar um obejto que não está na memória, revise seu código com cuidado.


Estou Usando a Versão 2010
Responder

Gostei + 0

30/05/2012

Guilherme

Na realidade analisando com um pouco mais de calma, vc criou essa variável p: TBancoDados, mas não encontrei no código onde vc instância esse objeto.


Na verdade foi uma outra pessoa que fiz isso, e nem trabalha mais aqui, estou começando agora, em desenvolvimento e preciso corrigir isso.
pode me dar um ex:

Se eu segurar o control em TBancoDados caoio aqui:

TBancoDados = class
published
function gravaPreVenda(numero, cliente, nome, orcamento, obs: String;
valorProd, descAcresc, valorTotal: String;
transp, vendedor, situacao: String): Boolean;

function gravaItemPedVenda(numero: String;
valorTotal, DATotal, qtdeItem: Double): Boolean;
function gravaRecPedVenda(numero: String): Boolean;
function deletaPedVenda(numero: String): Boolean;
function valorGenPV: Integer;

function gravaOrcam(numero, cliente, nome, obs, valorProd,
descAcresc: String; valorTotal, transp, vendedor, situacao: String)
: Boolean;
function gravaItemOrcam(numero: String;valorTotal, DATotal, qtdeItem:Double): Boolean;
function gravaRecOrcam(numero: String): Boolean;
function deletaOrcam(numero: String): Boolean;
function valorGenOrcam: Integer;

function comissaoVend(codigo: String): Double;

function checarDireitoAcesso(permissao, usuario: Integer): Boolean;

function gravaBackup(tipo : String): Boolean;
function gravaBackupOrcam :Boolean;

function alteraStatusOrcam(numero, situacao : String):Boolean;

function verficaOrcam(numero: String):Boolean;
function consultClientes(codigo : String):Boolean;
end;
Responder

Gostei + 0

30/05/2012

William

Colega eu té posso explicar, mas vc tem conhecimento em programação?
Responder

Gostei + 0

30/05/2012

Guilherme

Colega eu té posso explicar, mas vc tem conhecimento em programação?


ok. tenho um conhecimento nivel médio.....estou aprendendo.....mas ja aprendi bastante coisas.
Responder

Gostei + 0

30/05/2012

Joel Rodrigues

Bom, conforme foi observado pelo amgo wllfl, você não instancia a o objeto p do tipo TBancoDados antes de usá-lo. Dessa forma, ao tentar usar o método gravaBackup, o programa tenta acessar um objeto que não existe na memória, logo, dá erro de acesso ao endereço em questão.

Talvez você não esteja visualizando este problema na sua máquina por não estar atendendo a condição sPedVenda = 1, logo, o objeto P não é utilizado.

Outro detalhe, no código da classe TBancoDados, o método gravaBackup recebe um parâmetro do tipo String e você está passando o próprio objeto P ao invés disso.

Para contornar essa situação, tente colocar ´´p := TBancoDados.Create;´´ logo após o begin. Se isso funcionar, atente para a questão do parâmetro do método gravaBackup. Não conheço o método, mas talvez seja esperado um diretório ou nome de arquivo no qual será gravado o backup.

Faça a alteração proposta e nos dê retorno.
Responder

Gostei + 0

30/05/2012

Guilherme

Bom, conforme foi observado pelo amgo wllfl, você não instancia a o objeto p do tipo TBancoDados antes de usá-lo. Dessa forma, ao tentar usar o método gravaBackup, o programa tenta acessar um objeto que não existe na memória, logo, dá erro de acesso ao endereço em questão.

Talvez você não esteja visualizando este problema na sua máquina por não estar atendendo a condição sPedVenda = 1, logo, o objeto P não é utilizado.

Outro detalhe, no código da classe TBancoDados, o método gravaBackup recebe um parâmetro do tipo String e você está passando o próprio objeto P ao invés disso.

Para contornar essa situação, tente colocar ´´p := TBancoDados.Create;´´ logo após o begin. Se isso funcionar, atente para a questão do parâmetro do método gravaBackup. Não conheço o método, mas talvez seja esperado um diretório ou nome de arquivo no qual será gravado o backup.

Faça a alteração proposta e nos dê retorno.







Fiz o teste da seguinte forma

var
ret : Boolean;
p : TBancoDados;
begin
p := TBancoDados.Create;

if status = 0 then
begin
if sPedVenda = 1 then
begin


mas deu o mesmo erro. Acho que tem algo relacionado com a gride que vai exibir as pre vendas, pois se eu colocar na opção da gride visible = false, não da o erro.
No final do erro aparece
System Error Code 1400 o identificador da janela é invalido
Responder

Gostei + 0

30/05/2012

Deivison Melo

Falta instanciar algum objeto...
Responder

Gostei + 0

31/05/2012

Joel Rodrigues

Cara, dá uma pesquisada sobre como depurar o código pra agilizar.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar