Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Como resolver esse problema?

Recommended Posts

Tenho em um formulario de pesquiza:

 

1 edit um combobox e um dbgrid

 

Com o Edit eu digito um nome ou CPF ou CNPJ

Com a combobox eu escolho qual consulta fazer na tabela se é por Nome ou se é por CPF_CNPJ na query.

No DBGrid eu listo os registros da tabela.

O que eu quero fazer é o seguite:

Quando abrir o form, o DBGrid mostra todos os registros da tabela porem eu queria validalos.

Tem um campo Tipo, que valida F 'Física' ou J 'Jurídica' e um campo CPF_CNPJ, que traz o value do campo

O Código que to usando é o seguite nesse form:

Estou usando usando o código abaixo que esta dando certo, porem esta dando um loop infinito, a barra lateral do DBGrid fica "Doida", subindo e descendo direto e não sei como parar isso.

 

Código:

procedure TPCli.BitBtnProcurarClick(Sender: TObject);begin if EditNomeCPF_CNPJ.Text='' then	begin	  showmessage('Digite algum texto para ser pesquisado!');	  abort;	end	else if QryClientes.IsEmpty then			begin			 ShowMessage('Não há registro!');			 Abort;			end;end;procedure TPCli.BitBtnSelecionarClick(Sender: TObject);begin CClientes.QryClientes.Locate('Nome',dbgriddados.SelectedField.AsString,[]); close;end;procedure TPCli.BitBtnCancelarClick(Sender: TObject);begin Close;end;procedure TPCli.EditNomeCPF_CNPJChange(Sender: TObject);begin  if ComboboxEscolha.Text='' then  begin	showmessage('Escolha o tipo da Pesquiza!');	ComboboxEscolha.setfocus;	Abort;  end;  QryClientes.Close;  QryClientes.SQL.Clear;  QryClientes.SQL.Add('select * from Clientes where '+ComboboxEscolha.Text+' like:vardigito order by Nome');  QryClientes.Parambyname('vardigito').asstring:= EditNomeCPF_CNPJ.text +'%';  QryClientes.Open;end;procedure TPCli.QryClientesTipoGetText(Sender: TField; var Text: String;  DisplayText: Boolean);begin// Aqui funciona mas da loop quando entro com a linha da mascara  if Sender.Value = 'F' then   begin	Text := 'Pessoa Física';	QryClientesCPF_CNPJ.EditMask :='999\.999\.999\-99;0;_';  end  else	if Sender.Value = 'J' then	   begin		 Text := 'Pessoa Jurídica';		 QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_';	   endend;procedure TPCli.QryClientesTipoSetText(Sender: TField; const Text: String);begin// Aqui funciona mas da loop quando entro com a linha da mascara  if Text = 'Pessoa Física' then	begin	 Sender.Value := 'F';	   QryClientesCPF_CNPJ.EditMask :='999\.999\.999\-99;0;_';	end  else	if Text = 'Pessoa Jurídica' then	   begin		 Sender.Value := 'J';		 QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_';	  endend;end.

Como resolver esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia

 

Existe um evento em cada Field chamado OnGetText, este evento é executado sempre que é solicitado ao objeto TField a propriedade DisplayText, que no caso, o DBGrid utiliza para exibir os dados.

 

Eu sugiro a você a fazer assim:

 

procedure TForm1.query1CPFGetText(Sender: TField; var Text: String; DisplayText: Boolean);begin  if query1.FieldByName('TIPOPESSOA').AsString = 'F' then 	Text := FormatMaskText('000\.000\.000\-00;0;_', Sender.AsString)  else	Text := FormatMaskText('00\.000\.000\/0000\-00;0;_', Sender.AsString);end;

Espero ter ajudado

 

falow

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

obs: Este método so funciona para ser exibido, na edição você tem mesmo que configurar o EditMask do campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, troquei o código e deu certo.

Obrigado.

Porem esta acontecendo uma coisa estranha:

Essa parte do código:

procedure TPCli.BitBtnSelecionarClick(Sender: TObject);beginCClientes.QryClientes.Locate('Nome',dbgriddados.SelectedField.AsString,[]);close;end;

Tem hora que funciona e tem hora que, mesmo selecionado outro cliente, o código não entrega os dados pro Form CClientes, ou seja, ao retornar pro Form CClientes, os dados que estavam não sao alterados.

 

 

Eis o código todo:

 

unit pesqcli;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, DB, StdCtrls, Buttons, DBTables, Grids, DBGrids, ExtCtrls,  ZAbstractRODataset, ZAbstractDataset, ZDataset;type  TPCli = class(TForm)	Panel1: TPanel;	DBGridDados: TDBGrid;	QryClientes: TZQuery;	EditNomeCPF_CNPJ: TEdit;	BitBtnProcurar: TBitBtn;	DSPesqCli: TDataSource;	ComboboxEscolha: TComboBox;	PanelBotoes: TPanel;	BitBtnSelecionar: TBitBtn;	BitBtnCancelar: TBitBtn;	Label1: TLabel;	Label2: TLabel;	QryClientesCodigoCliente: TIntegerField;	QryClientesDataCadastro: TDateField;	QryClientesTipo: TStringField;	QryClientesCPF_CNPJ: TStringField;	QryClientesNome: TStringField;	QryClientesEndereco: TStringField;	QryClientesBairro: TStringField;	QryClientesCidade: TStringField;	QryClientesEstado: TStringField;	QryClientesTelefone: TStringField;	QryClientesEmail: TStringField;	procedure BitBtnProcurarClick(Sender: TObject);	procedure BitBtnSelecionarClick(Sender: TObject);	procedure BitBtnCancelarClick(Sender: TObject);	procedure FormClose(Sender: TObject; var Action: TCloseAction);	procedure EditNomeCPF_CNPJChange(Sender: TObject);	procedure FormDestroy(Sender: TObject);	procedure FormCreate(Sender: TObject);	procedure QryClientesTipoGetText(Sender: TField; var Text: String;	  DisplayText: Boolean);	procedure QryClientesCPF_CNPJGetText(Sender: TField; var Text: String;	  DisplayText: Boolean);  private	{ Private declarations }  public	{ Public declarations }  end;var  PCli: TPCli;implementationuses CadClientes, MaskUtils;{$R *.dfm}procedure TPCli.FormCreate(Sender: TObject);beginQryClientes.Open;end;procedure TPCli.FormDestroy(Sender: TObject);begin QryClientes.Close;end;procedure TPCli.FormClose(Sender: TObject;  var Action: TCloseAction);begin Action := caFree; // remove o form da memória PCli := NIL; // informa que foi destruído (não criadoend;procedure TPCli.BitBtnProcurarClick(Sender: TObject);begin if EditNomeCPF_CNPJ.Text='' then	begin	  showmessage('Digite algum texto para ser pesquisado!');	  abort;	end	else if QryClientes.IsEmpty then			begin			 ShowMessage('Não há registro!');			 Abort;			end;end;procedure TPCli.BitBtnSelecionarClick(Sender: TObject);begin CClientes.QryClientes.Locate('Nome',dbgriddados.SelectedField.AsString,[]); close;end;procedure TPCli.BitBtnCancelarClick(Sender: TObject);begin Close;end;procedure TPCli.EditNomeCPF_CNPJChange(Sender: TObject);begin  if ComboboxEscolha.Text='' then  begin	showmessage('Escolha o tipo da Pesquiza!');	ComboboxEscolha.setfocus;	Abort;  end;  QryClientes.Close;  QryClientes.SQL.Clear;  QryClientes.SQL.Add('select * from Clientes where '+ComboboxEscolha.Text+' like:vardigito order by Nome');  QryClientes.Parambyname('vardigito').asstring:= EditNomeCPF_CNPJ.text +'%';  QryClientes.Open;end;procedure TPCli.QryClientesTipoGetText(Sender: TField; var Text: String;  DisplayText: Boolean);begin// Aqui funciona mas da loop quando entro com a linha da mascara  if Sender.Value = 'F' then   begin	Text := 'Pessoa Física';  end  else	if Sender.Value = 'J' then	   begin		 Text := 'Pessoa Jurídica';	   endend;procedure TPCli.QryClientesCPF_CNPJGetText(Sender: TField; var Text: String; DisplayText: Boolean);beginif QryClientes.FieldbyName('Tipo').AsString = 'F' then	Text := FormatMaskText('000\.000\.000\-00;0;_', Sender.AsString)  else	Text := FormatMaskText('00\.000\.000\/0000\-00;0;_', Sender.AsString);end;end.

O que pode ser isso agora??

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.