DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!

Fórum DevMedia


Autor
Mensagem
guilherme
 


País: Brasil
Estado: SP
Cidade: mococa
Mensagens: 36
 Postado em: 29/5/2012 04:08:27 PM
 
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;

Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3373
 Postado em: 29/5/2012 04:31:23 PM
 
Depure o código e veja em qual linha exatamente ocorre o erro.
guilherme
 


País: Brasil
Estado: SP
Cidade: mococa
Mensagens: 36
 Postado em: 29/5/2012 04:38:30 PM
 

Citação:
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.

wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 30/5/2012 02:13:21 PM
 
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.

wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 30/5/2012 02:16:03 PM
 
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.
guilherme
 


País: Brasil
Estado: SP
Cidade: mococa
Mensagens: 36
 Postado em: 30/5/2012 02:56:36 PM
 

Citação:
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

guilherme
 


País: Brasil
Estado: SP
Cidade: mococa
Mensagens: 36
 Postado em: 30/5/2012 03:03:47 PM
 

Citação:
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;

wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 623
 Postado em: 30/5/2012 03:21:30 PM
 
Colega eu té posso explicar, mas vc tem conhecimento em programação?
guilherme
 


País: Brasil
Estado: SP
Cidade: mococa
Mensagens: 36
 Postado em: 30/5/2012 03:28:01 PM
 

Citação:
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.

Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3373
 Postado em: 30/5/2012 04:07:29 PM
 
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.

guilherme
 


País: Brasil
Estado: SP
Cidade: mococa
Mensagens: 36
 Postado em: 30/5/2012 05:13:36 PM
 

Citação:
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

Deivison
 
 

 


País: Brasil
Estado: PE
Cidade: x
Mensagens: 485
 Postado em: 30/5/2012 05:57:05 PM
 
Falta instanciar algum objeto...
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3373
 Postado em: 31/5/2012 08:45:17 AM
 
Cara, dá uma pesquisada sobre como depurar o código pra agilizar.
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03