Ir para conteúdo
Fórum Script Brasil
  • 0

Me Ajudem Em Mais Essa:


Carlos Rocha

Pergunta

Meu problema agora é o seguinte:

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);
begin
 if ComboboxEscolha.Text='' then
 begin
  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

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Carlos, no primeiro caso, se você observar, quando você está no modo edição e testa:

if QryClientesCPF_CNPJ.Value = DBEditCPF_CNPJ.Text then

você está testando duas coisas iguais - o campo ligado à DBEditCPF_CNPJ não é justamente QryClientesCPF_CNPJ?

Acredito que seja. E, neste caso, sugiro que você compare o valor anterior a edição com a atual:

if QryClientesCPF_CNPJ.Value = QryClientesCPF_CNPJ.OldValue then

Teste e veja se funca.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...