Erro E2171 Variable Self inaccessible here due to optimization

Delphi

28/11/2012

Pessoal, td bem?

Comecei a criar esta procedure abaixo porém no final dela, na ultima variável aparece o seguinte erro:

//E2171 Variable Self inaccessible here due to optimization

procedure TfrmCadCaixa.CarregaDados;
  begin
    uSala.frmSala.TrazSalaSelecionada;
    uSala.frmSala.TrazEstanteSelecionada;
    uSala.frmSala.TrazArmarioSelecionado;
    uSala.frmSala.TrazPrateleiraSelecionada;
    TrazLinhaTitulo;

    with uDtm.frmDtm.Qry_BuscaArmazenamento do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select a.*, d.*, t.*');
      SQL.Add('From Armazenamento a,');
      SQL.Add('     Departamento d,');
      SQL.Add('     Titulo t');
      SQL.Add('Where a.nr_box =' + inttostr(vBox) + '');
      SQL.Add('and a.id_prateleira = ' + IntToStr(vIdPrateleira) + '');
      SQL.Add('and a.id_armario = ' + IntToStr(vIdArmario) + '');
      SQL.Add('and a.id_estante = ' + IntToStr(vIdEstante) + '');
      SQL.add('and a.id_titulo = t.id_titulo');
      SQL.add('and a.id_departamento = d.id_departamento');
      SQL.Add('and a.id_tparmazenamento = 2');
      Open;

      edtNumeroCaixa.Text := FieldByName('nr_caixa').AsString;
      cbxEmpresaCaixa.Text:= FieldByName('ic_empresa').AsString;
      edtFilial.Text := FieldByName('ic_filial').AsString;
      cbxDepartamento.ItemIndex := FieldByName('id_departamento').AsInteger;
      cbxTitulo.Text := FieldByName('ds_titulo').AsString;
      edtDtFim.Text := FieldByName('dt_caixafim').AsString;
      mDescricao.Text := FieldByName('ds_armazenamento').AsString;
      edtPosicao.Text := FieldByName('ds_posicao').AsString;
      edtDtIni.Text := FieldByName('dt_caixaini').AsString;

    end;


  end;


O que fiz de errado?

Como proceder?

Atenciosamente,
Flavio Silva

Flavio Silva

Curtidas 0

Respostas

Claudia Nogueira

Claudia Nogueira

28/11/2012

Quando clica no erro foca em qual linha do código?
Que componente é esse cbxDepartamento?
GOSTEI 0
Flavio Silva

Flavio Silva

28/11/2012

Claudia, o erro aparece após os campos receberem os dados do banco (FieldByName).

cbxDepartamento é um combobox.

Sinceramente ainda não encontrei o erro.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

28/11/2012

Mais uma coisa, você marcou alguma linha pra debugar?
Se marcou desmarca e tenta compilar.
Só pra fazer um teste.
GOSTEI 0
Flavio Silva

Flavio Silva

28/11/2012

Desmarquei a linha onde debuguei e o campo edtdtfim.text não trouxe o valor do fieldbyname('dt_caixafim').asstring;
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

28/11/2012

Então quando você marcou pra debugar não estava compilando e sim mostrando aquele erro?
GOSTEI 0
Flavio Silva

Flavio Silva

28/11/2012

Não Claudia, debugando ele também passou pelo erro sem travar, porém não traz as informações necessárias.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

28/11/2012

A tá, achei que não estava compilando.
Se não está mostrando, deve ser por que não está retornando nenhum registro da query.
Eu uso assim:

procedure TfrmCadCaixa.CarregaDados;
begin
uSala.frmSala.TrazSalaSelecionada;
uSala.frmSala.TrazEstanteSelecionada;
uSala.frmSala.TrazArmarioSelecionado;
uSala.frmSala.TrazPrateleiraSelecionada;
TrazLinhaTitulo;

with uDtm.frmDtm.Qry_BuscaArmazenamento do
begin
Close;
SQL.Clear;
SQL.Add('Select a.*, d.*, t.*');
SQL.Add('From Armazenamento a,');
SQL.Add(' Departamento d,');
SQL.Add(' Titulo t');
SQL.Add('Where a.nr_box =' + IntToStr(vBox));
SQL.Add('and a.id_prateleira = ' + IntToStr(vIdPrateleira));
SQL.Add('and a.id_armario = ' + IntToStr(vIdArmario));
SQL.Add('and a.id_estante = ' + IntToStr(vIdEstante));
SQL.add('and a.id_titulo = t.id_titulo');
SQL.add('and a.id_departamento = d.id_departamento');
SQL.Add('and a.id_tparmazenamento = 2');
Open;
if not isEmpty then
begin
edtNumeroCaixa.Text := FieldByName('nr_caixa').AsString;
cbxEmpresaCaixa.Text:= FieldByName('ic_empresa').AsString;
edtFilial.Text := FieldByName('ic_filial').AsString;
cbxDepartamento.ItemIndex := FieldByName('id_departamento').AsInteger;
cbxTitulo.Text := FieldByName('ds_titulo').AsString;
edtDtFim.Text := FieldByName('dt_caixafim').AsString;
mDescricao.Text := FieldByName('ds_armazenamento').AsString;
edtPosicao.Text := FieldByName('ds_posicao').AsString;
edtDtIni.Text := FieldByName('dt_caixaini').AsString;
end
else
ShowMessage('Sem Informações');
end;
end;


Alguma coisa não está satisfazendo as condições, ou não tem departamento ou titulo na tabela armazenamento.
Veja se cai na mensagem de Sem Informações.
GOSTEI 0
Deivison Melo

Deivison Melo

28/11/2012

Siga as orientações do colaborador acima ou crie um raise e veja qual o erro exato que está ocorrendo...
GOSTEI 0
Flavio Silva

Flavio Silva

28/11/2012

Deu certo aqui pessoal, valeu...
GOSTEI 0
Rodolpho Silva

Rodolpho Silva

28/11/2012

Deu certo aqui pessoal, valeu...

Poste a solução, por favor, somente para documentar...
GOSTEI 0
Flavio Silva

Flavio Silva

28/11/2012

Ok.

Segue abaixo:

procedure TfrmCadCaixa.CarregaDados;
  begin
    uSala.frmSala.TrazSalaSelecionada;
    uSala.frmSala.TrazEstanteSelecionada;
    uSala.frmSala.TrazArmarioSelecionado;
    uSala.frmSala.TrazPrateleiraSelecionada;
    TrazLinhaTitulo;

    with uDtm.frmDtm.Qry_BuscaArmazenamento do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select a.*, d.*, t.*');
      SQL.Add('From Armazenamento a,');
      SQL.Add('     Departamento d,');
      SQL.Add('     Titulo t');
      SQL.Add('Where a.nr_box =' + inttostr(vBox) + '');
      SQL.Add('and a.id_prateleira = ' + IntToStr(vIdPrateleira) + '');
      SQL.Add('and a.id_armario = ' + IntToStr(vIdArmario) + '');
      SQL.Add('and a.id_estante = ' + IntToStr(vIdEstante) + '');
      SQL.add('and a.id_titulo = t.id_titulo');
      SQL.add('and a.id_departamento = d.id_departamento');
      SQL.Add('and a.id_tparmazenamento = 2');
      Open;

      if not isEmpty then
       begin
        edtNumeroCaixa.Text := FieldByName('nr_caixa').AsString;
        cbxEmpresaCaixa.Text:= FieldByName('ic_empresa').AsString;
        edtFilial.Text := FieldByName('ic_filial').AsString;
        cbxDepartamento.ItemIndex := FieldByName('id_departamento').AsInteger;
        cbxTitulo.Text := FieldByName('ds_titulo').AsString;
        edtDtFim.Text := FieldByName('dt_caixafim').AsString;
        mDescricao.Text := FieldByName('ds_armazenamento').AsString;
        edtPosicao.Text := FieldByName('ds_posicao').AsString;
        edtDtIni.Text := FieldByName('dt_caixaini').AsString;
       end
      else
        ShowMessage('Sem Informações');

    end;


  end;
GOSTEI 0
POSTAR