Erro acsses violation at address 00774788 in module PreVenda.exe. Read of address 00000000.
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;
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
Curtidas 0
Respostas
Joel Rodrigues
29/05/2012
Depure o código e veja em qual linha exatamente ocorre o erro.
GOSTEI 0
Guilherme
29/05/2012
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.
GOSTEI 0
William
29/05/2012
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.
Exception de Access Violation gralmente é disparada quando tentamos acessar um obejto que não está na memória, revise seu código com cuidado.
GOSTEI 0
William
29/05/2012
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.
GOSTEI 0
Guilherme
29/05/2012
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.
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
GOSTEI 0
Guilherme
29/05/2012
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;
GOSTEI 0
William
29/05/2012
Colega eu té posso explicar, mas vc tem conhecimento em programação?
GOSTEI 0
Guilherme
29/05/2012
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.
GOSTEI 0
Joel Rodrigues
29/05/2012
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.
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.
GOSTEI 0
Guilherme
29/05/2012
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.
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
GOSTEI 0
Deivison Melo
29/05/2012
Falta instanciar algum objeto...
GOSTEI 0
Joel Rodrigues
29/05/2012
Cara, dá uma pesquisada sobre como depurar o código pra agilizar.
GOSTEI 0