Fórum Erro em formulário de consulta #135033

16/04/2010

0

Olá a todos,

criei um formulário de consulta de clientes, chamado Busca, que contém um MaskEdit (EdtNomCli), dois botões (Confirma e Cancela) e os componentes DatasetProvider, ClientDataset (CdsBusca), DataSource e um Query. Até pouco tempo estava funcionando bem. Mas agora ele está exibindo a mensagem de erro "EVariantTypeCastError with message 'Could not convert variant of type (null) into type (String)' ", após o click no botão Confirma. O que estou fazendo de errado? Estou usando Delphi 2005 e Access. Agradeço a ajuda. Segue abaixo o código:

procedure TFrmBusca.FormShow(Sender: TObject);
begin
  CdsBusca.Open;
  EdtNomcli.SetFocus;
  EdtNomcli.Clear;
end;

procedure TFrmBusca.EdtNomcliChange(Sender: TObject);
begin
  CdsBusca.Locate('nome',EdtNomcli.text,[locaseinsensitive,lopartialkey]);
end;

procedure TFrmBusca.BtnConfirmaClick(Sender: TObject);
var
  Pessoa: String;
begin
  Pessoa := CdsBusca.FieldByName('pessoa').Value;
  CdsBusca.Filtered := False;
  if CdsBusca.Locate('nome',EdtNomcli.text,[locaseinsensitive,lopartialkey]) then
    begin
      CdsBusca.Filter := 'upper(nome) like ' +uppercase(quotedstr(EdtNomcli.Text + '%'));
      CdsBusca.Filtered := True;
      FrmCadastro.DbgrdClientes.DataSource := DsBusca;

      if (Pessoa = 'F') then
        begin
          FrmCadastro.DbObs.DataSource := DsBusca;
          FrmCadastro.DbEdtnom.DataSource := DsBusca;
          FrmCadastro.DbEdtnas.DataSource := DsBusca;
          FrmCadastro.DbEdtdoc.DataSource := DsBusca;
          FrmCadastro.DbEdtnum.DataSource := DsBusca;
          FrmCadastro.DbEdtorg.DataSource := DsBusca;
          FrmCadastro.DbEdtdat.DataSource := DsBusca;
          FrmCadastro.DbTelres.DataSource := DsBusca;
          FrmCadastro.DbEmail.DataSource := DsBusca;
          FrmCadastro.DbTelcom.DataSource := DsBusca;
          FrmCadastro.DbCelular.DataSource := DsBusca;
          FrmCadastro.DbSexo.DataSource := DsBusca;
          FrmCadastro.DBEstciv.DataSource := DsBusca;
          FrmCadastro.DBPro.DataSource := DsBusca;
          FrmCadastro.DBNumcnh.DataSource := DsBusca;
          FrmCadastro.DBDatExm.DataSource := DsBusca;
          FrmCadastro.DBDathab.DataSource := DsBusca;
          FrmCadastro.DbEdtcpf.DataSource := DsBusca;
        end;

      if (Pessoa = 'J') then
        begin
          FrmCadastro.DbEdtcnpj.DataSource := DsBusca;
          FrmCadastro.DbObs.DataSource := DsBusca;
          FrmCadastro.DbEdtnom.DataSource := DsBusca;
          FrmCadastro.DbTelres.DataSource := DsBusca;
          FrmCadastro.DbEmail.DataSource := DsBusca;
          FrmCadastro.DbTelcom.DataSource := DsBusca;
          FrmCadastro.DbCelular.DataSource := DsBusca;
        end;

       FrmBusca.Close;

    end
  else
    begin
      Application.MessageBox('Registro não encontrado!', 'Aviso', MB_ICONWarning);
      EdtNomcli.Clear;
      EdtNomcli.Setfocus;
    end;
    CdsBusca.Filtered := True;;
end;

procedure TFrmBusca.BtnCancelaClick(Sender: TObject);
begin
  CdsBusca.Filtered := False;
  Close;
end;
Simone Grandini

Simone Grandini

Responder

Posts

17/04/2010

Emerson Nascimento

talvez o conteúdo do campo pessoa esteja nulo. se for isso, troque a linha:
  Pessoa := CdsBusca.FieldByName('pessoa').Value;

para:
  Pessoa := CdsBusca.FieldByName('pessoa').AsString;


recomendo evitar o Value, preferindo sempre usar o tipo correspondente ao campo (AsString, AsFloat, AsDateTime, etc), a menos que você faça todo o tratamento no caso de um valor estar nulo.
Responder

Gostei + 0

21/05/2010

Simone Grandini

Problema resolvido. Grata pela ajuda.
Responder

Gostei + 0

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

Aceitar