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;
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
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)