Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

Tres novos problemas:

Recommended Posts

1) Tenho a ídea de, ao clikar no botão gravar, sejam feitas algumas considerações;

A - Uma pesquiza usando uma query auxiliar no Form que retornara todos os dados da tabela Clientes onde o Campo cPF_CNPJ seja igual ao preenchido no DBEditCPF_CNPJ.Text.

B - Depois verifica o estado da Query principal do Form:

Caso seja dsInsert, e caso o CPF ou CNPJ digitado não tenha cadastro na tabela, aí dá um Post e grava. Até aí esta ok.

Caso seja dsEdit, e caso o CPF ou CNPJ digitado seja o mesmo do cadastro na tabela, aí dá um Post e grava. Até aí esta ok, depois verifica se

o CPF ou CNPJ digitado não seja o mesmo do cadastro na tabela e não tenha cadastro na tabela, aí não Posta e aborta. Aqui está dando erro, está gravando mesmo assim.

 

 

Esse é o Código que to usando:

procedure TCClientes.BitBtnGravarClick(Sender: TObject);begin   QryClientes2.Close;   QryClientes2.Sql.Clear;   QryClientes2.SQL.Add('Select * from Clientes where CPF_CNPJ = '+''''+DBEditCPF_CNPJ.Text+''''+'');   QryClientes2.Open;   if QryClientes.State in [dsInsert] then	  begin		if not QryClientes2.Eof then //já existe cadastro		   begin			ShowMessage ('Já existe Cadastrado com este CPF/CNPJ. Pesquize!');			Abort;		   end	  else		begin		 QryClientes.Post;		 ShowMessage ('Cadastrado efetuado com sucesso!');		end	end	else if QryClientes.State in [dsEdit] then			begin				if QryClientesCPF_CNPJ.Value = DBEditCPF_CNPJ.Text then				  begin				   QryClientes.Post;				   ShowMessage ('Alteração efetuada com sucesso!');				  end				else				  begin					if not QryClientes2.Eof then //já existe cadastro - Aqui está dando erro, está gravando mesmo assim.					  begin						 ShowMessage ('Já existe Cadastrado com este CPF/CNPJ. Pesquize!');						 Abort;					  end				  end		   endend;
2) Outra coisa e que eu quero forçar o cara a digitar todos os dígitos do CPF ou CGC.

To usando o código abaixo mas quando o cara não digita os digitos todos, ele anula o Post e fica aguardando o cara terminar de digitar pra liberar o Post em vez de dar mensagem, porem isso só esta acontecendo no estado dsEdit da Query.

Eu usei o código abaixo mas num funciona com a query no estado dsEdit!

procedure TCClientes.QryClientesBeforePost(DataSet: TDataSet);beginif DBRadioGroupTipo.ItemIndex = 0 then			 begin				if (Length(DBEditCPF_CNPJ.Text) <> 11) then					begin					  ShowMessage('CPF tem 11 Dígitos');					  DBEditCPF_CNPJ.SetFocus; // posiciona o cursor					  Abort; // não grava e continua editando					end			 end		  else			 begin				if (Length(DBEditCPF_CNPJ.Text) <> 14) then					begin					  ShowMessage('CNPJ tem 14 Dígitos');					  DBEditCPF_CNPJ.SetFocus; // posiciona o cursor					  Abort; // não grava e continua editando					end			 endend

Iteressantes que os 2 problemas acotecem no modo dsEdit.

Da uma força aí pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Carlos...Lendo seu artigo achei que você está um pouco confuso quanto a algumas coisas... então, ainda sem entrar em detalhes sobre os códigos, você deveria, talvez, dar um outro rumo para esse "jeito" de cadastrar os clientes...Imagina o operador digitar todos os dados de um cliente para, na hora de clicar no botão salvar, descobrir que ele já era cadastrado...Também, imagina digitar onze digitos quaisquer (12345678901) e isso ser aceito como CPF... ou quatorze (12345678901234) e isso ser aceito como um CNPJ... é preciso verificar, no mínimo, a consisténcia daquilo que foi digitado...Porque você não faz isso:a) Mostra um TEdit no Form, para digitação de um CPF ou CNPJ.B) Recebe uma string digitada no TEDit; "pega" somente os algarismos.c) Faz uma consistência; se 14 dígitos, testa para ver se é um CNPJ válido; se 11 dígitos, testapara ver se é um CPF válido. O Código é válido? então, segue para e. Ah... testa aquilo que foi digitado no evento onexit do TEdit... e lembra que não é só porque tem onze digitos que é um cpf (ou 14 = cnpj)... precisa validar mesmo!d) Mostra que o CPF ou CNPJ não é válido... sugere ao operador olhar o documento original do cliente,já que não adianta nem consultar o site da Receita Federal, pois ele não "advinha" como descobrirCPFs ou CNPJs incorretos... Então... volta para a.e) Prepara a query... se CPF, usa um campo específico para o CPF... se CNPJ, usa um campo específicopara CNPJ... (Inscrição Estadual, num campo específico para ela... não misturar com Identidade, p.e.)...aí, vale o que é usado pela Receita Federal, por todas as Secretarias de Fazenda de todos os estados, e pelas prefeituras... CNPJ e CPF não ficam no mesmo campo, pois não são a mesmacoisa, como nós imaginássemos ser, e, imaginando ser apenas para facilitar, insistiámos em colocaressas informações em uma mesma coluna no banco de dados... dê uma olhada no site do Sintegra (www.sintegra.gov.br) e no site do sintegra dos estados... Outra coisa... se é apenas para saber seo CNPJ ou o CPF já existem, não é necessário selecionar tudo na consulta... Então:select cnpj from clientes where cnpj='00333444000185'ouselect cpf from clientes where cpf='93848499204'Se o resultado for nulo, digo, "zero" registros, então, segue para g.f) Mostra que o cliente já existe.... volta para a.g) Ativa os campos para digitação das outras informações... não permite que o campo usado na pesquisaseja modificado (impedindo o operador de pesquisar '00033344405' e alterar para '99944411102')...Se for cliente PJ, com IE, faça a consistencia tambem da Inscrição Estadual (no site do sintegra do RSexiste a dll "oficial" para validar IE, no jeitinho para você usar no seu programa)... Salve os dados e volta para a.Ok?Espero ter ajudado...Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Num entendi muito bem.

Reformei o código e vou refazer meu post.

 

1)Tenho num formulario de cadastro de clientes, 2 querys. Uma pra fazer os posts e os edits e outra pra fazer uma cosulta a tabela MySql pra saber se já existe o CPF cadastrado.

Tenho tambem dois Buttos um "Novo" para um novo registro que poe a tabela em estado inserção.

e um "Editar" para alterar um registro existente na tabela que poe a tabela em estado edição.

Tenho a ídea de, ao clikar no botão gravar, sejam feitas algumas considerações;

A - Uma pesquiza usando uma query auxiliar no Form que retornara todos os dados da tabela Clientes onde o Campo cPF_CNPJ seja igual ao preenchido no DBEditCPF_CNPJ.Text.

B - Depois verifica o estado da Query principal do Form:

Caso seja dsInsert, e caso o CPF ou CNPJ digitado não tenha cadastro na tabela, aí dá um Post e grava. Até aí esta ok.

Caso seja dsEdit, e caso o CPF ou CNPJ digitado seja o mesmo do cadastro na tabela, aí dá um Post e grava. Até aí esta ok.

Depois verifica se, caso o CPF ou CNPJ digitado não seja o mesmo do cadastro na tabela e não tenha cadastro na tabela, aí não Posta e aborta. Aqui está dando erro, está gravando mesmo assim.

Eis o código que estou usando. Onde que esta o erro?

 

procedure TCClientes.BitBtnGravarClick(Sender: TObject);begin   QryClientes2.Close;   QryClientes2.Sql.Clear;   QryClientes2.SQL.Add('Select * from Clientes where CPF_CNPJ = '+''''+DBEditCPF_CNPJ.Text+''''+'');   QryClientes2.Open;   if QryClientes.State in [dsInsert] then	  begin//		if not QryClientes2.Eof then //já existe cadastro		if not QryClientes2.IsEmpty then //já existe cadastro		   begin			ShowMessage ('Já existe Cadastro com este CPF/CNPJ. Pesquize!');			Abort;		   end	   else		 begin		   QryClientes.Post;		   ShowMessage ('Cadastro efetuado com sucesso!');		 end	  end;//////////// ShowMessage ('Erro a partir daqui!'); //////////////	  if QryClientes.State in [dsEdit] then		 begin			if QryClientesCPF_CNPJ.Value = DBEditCPF_CNPJ.Text then			   begin				 QryClientes.Post;				 ShowMessage ('Alteração efetuada com sucesso!');			   end			else			begin			 //if not QryClientes2.Eof then //já existe cadastro			   if not QryClientes2.IsEmpty then //já existe cadastro				  begin					ShowMessage ('Já existe Cadastro com este CPF/CNPJ. Pesquize!');					DBEditCPF_CNPJ.SetFocus; // posiciona o cursor					Abort;				  end			   else				  begin					QryClientes.Post;					ShowMessage ('Alteração efetuada com sucesso!');				  end			end		 end;////////////////////(Até aqui)//////////////////////////////////////////end;

2) Outra situação é a seguite:

Tenho em outro formulario 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

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. Eu queria fazer uma busca dizendo que, caso o Tipo seja F, a Mascara é de CPF, e caso o Tipo seja J, a Mascara é de CNPJ.

Porem só esta dando para todas os registros, mascara só referente à do primeiro registro, se o primeiro for F todos são mascaras de CPF, se for J, mascara de CNPJ.

Parece que falta um loop, sei la.

Outra observação é que, no caso de ser feito algum filtro, aí o grid mascara direito, o CPF recebe mascara de CPF e o CNPJ de CNPJ.

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

 

procedure TPCli.EditNomeCPF_CNPJChange(Sender: TObject);beginif ComboboxEscolha.Text='' thenbegin  showmessage('Escolha o tipo da Pesquiza!');  //  Limpar o DBEdit:  //  EditNomeCPF_CNPJ.text := '';  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;/////// Exibir Mascara no normal do Grid tambem sem filtrar///////////////// Detalhe: Quando coloco Mascara antes do filtro, parece que precisa fazer um loop para saber qual é o segundo campo Tipo, se é F ou J.  if QryClientesTipo.Value = 'F' then   begin	 QryClientesCPF_CNPJ.EditMask :='999\.999\.999\-99;0;_';   end   else if QryClientesTipo.Value = 'J' then   begin	 QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_';   end;end;procedure TPCli.FormCreate(Sender: TObject);begin// Por Mascara no Grid quando abrir pela primeira vez// Parece que está pedindo um while na tabela.   {While QryClientesTipo.Value = 'F' do   begin	 QryClientesCPF_CNPJ.EditMask :='999\.999\.999\-99;0;_';  // QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_';	 Abort;   end;While QryClientesTipo.Value = 'J' do   begin	 QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_';	 Abort;   end;   }end;

3) Como autenticar mascaras para ela representar como valor vazio.

É preciso colocar mascara para mostrar os dados dos campos Estado e CPF_CNPJ e Telefone de certa forma que a mascara não represente caracters digitados para não atrapalhar as auteticações de campo vazio ou numeros

 

Muito obrigado a todos que de uma maneira ou de outra contribuirem.

 

Meu muito obrigado.

 

Carlos Rocha

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.