Carcleo 4 Denunciar post Postado Março 10, 2007 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
thalesoli 0 Denunciar post Postado Março 11, 2007 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
Carcleo 4 Denunciar post Postado Março 11, 2007 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