Autor
Mensagem
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;
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;
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.
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











