Ir para conteúdo

POWERED BY:

Arquivado

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

maquinavirtual

erro ao identificar registro repetido

Recommended Posts

Uso delphi 7 e banco de dados firebird e componentes da paleta interbase.

Possuo esta rotina no botao salvar do dbnavigator porem quando digito um nome repetido ou seja que ja possuo cadastrado na tabela ele me mostra a mensagem que o registro ja existe porem apos a mensagem gera o erro que o ibdataset nao esta em modo de insercao ou edicao. Se retiro a rotina do locate ela funciona corretamente ao inserir um novo registro. O que estou errando? Aguardo uma resposta. Obrigado.

 


if Button = NbPost then //botao salvar
   begin
     //menus
     MainMenuSair.Enabled:=true; //MainMenuSair desabilitado
     MainMenuPesquisa.Enabled:=true; //MainMenuConsulta desabilitado
     //PopupMenuSair.Enabled:=false; //PopupMenuSair desabilitado
     //PopupMenuConsulta.Enabled:=false; //PopupMenuConsulta desabilitado

     //verifica campo em branco
     //e notifica usuario
     if dbeditUF.Text = '' then
      begin
        messagebeep(16);
        messagebox(FormCadastro.Handle,'Realize a pesquisa pelo "Cep",'#13'campo esta em branco!','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
        abort;
      end
     else
      if dbeditCIDADE.Text = '' then
       begin
         messagebeep(16);
         messagebox(FormCadastro.Handle,'Realize a pesquisa pelo "Cep",'#13'campo esta em branco!','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         abort;
       end
     else
      if dbeditBAIRRO.Text = '' then
       begin
         messagebeep(16);
         messagebox(FormCadastro.Handle,'Realize a pesquisa pelo "Cep",'#13'campo esta em branco!','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         abort;
       end
     else
      if DBCBselecCLASSE.Text = '' then
       begin
         messagebeep(16);
         messagebox(FormCadastro.Handle,'Selecione a "Classe" do registro,'#13'campo esta em branco!','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         abort;
       end
     else
      if DBEditNOMECOMPLETO.Text = '' then
       begin
         messagebeep(16);
         messagebox(FormCadastro.Handle,'Preencha o campo "Nome Completo",'#13'campo esta em branco!','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         abort;
       end
     else
      if (Length (dbEditcep.Text) < 8) or (Length (dbEditcep.Text) > 8) then
       begin
         messagebeep(16);
         messagebox(FormCadastro.Handle,'Preencha o campo "Cep" corretamente!'#13'Formato: 00.000-000. Digite'#13'somente números.','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         abort;
         dbeditCep.SetFocus;
       end
     else
      if Length (dbEditTelRes.Text) < 14 then
       begin
         messagebeep(16);
         messagebox(FormCadastro.Handle,'Preencha o campo "Telefone Residencial" corretamente!'#13'Formato: (00)0000-0000.'#13'Digite somente números.','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         abort;
         dbeditCep.SetFocus;
       end
     else
      if Length (dbEditTelCel.Text) < 14 then
       begin
         messagebeep(16);
         messagebox(FormCadastro.Handle,'Preencha o campo "Telefone Celular" corretamente!'#13'Formato: (00)0000-0000.'#13'Digite somente números.','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         abort;
         dbeditCep.SetFocus;
       end
     else
      if Length (dbEditTelCom.Text) < 14 then
       begin
         messagebeep(16);
         messagebox(FormCadastro.Handle,'Preencha o campo "Telefone Comercial" corretamente!'#13'Formato: (00)0000-0000.'#13'Digite somente números.','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         abort;
         dbeditCep.SetFocus;
       end
     else
      if DTM.IBTABcadastro.Locate('NomeCompleto',DBEditNOMECOMPLETO.Text,[loCaseInsensitive, loPartialKey]) then
       begin
         messagebeep (16);
         messagebox(FormCadastro.Handle,'O registro que esta sendo'#13'inserido ja esta cadastrado!','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
         exit;
       end
      {begin
        DTM.IBQRYregisRepetido.Close;
        DTM.IBQRYregisRepetido.ParamByName('PRMregisrepetido').AsString:=''+ DTM.IBTABcadastroNOMECOMPLETO.Text +'%'; //''+ dbEditNomeCompleto.Text +'%';
        DTM.IBQRYregisRepetido.Open;
        DTM.IBTABcadastroNOMECOMPLETO.Clear;
        if (DTM.IBQRYregisRepetido.ParamByName('NomeCompleto');
       else //se resultado da pesquisa for maior ou igual a 1
        begin
          messagebeep(16);
          messagebox(FormCadastro.Handle,'O registro que esta sendo'#13'inserido ja esta cadastrado!','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
          abort;
          //DTM.IBTABcadastro.Cancel;
        end;
      end;}
   else
    begin
      messagebeep(16);
      messagebox(FormCadastro.Handle,'O registro foi'#13'salvo com sucesso!!','AgenTel - Salvar',mb_Ok+MB_ICONQUESTION);
      //abort;
    end;

   end

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para salvar as inserções ou edições é interessante verificar o Estado do DATASOURCE [dsinsert, dsedit] caso sim aí você da um post e refresh ou ApllyUpdate().

 

Eu não achei a parte do código em que você da um post na tabela.

 

Eu já montei uma validação parecida com a sua do Nome:

 

select NOMECOMPLETO

FROM TABELA

WHERE NOMECOMPLETO = + QuotedStr(EdtNomeCompleto);

 

Caso RecordCount >= 1 then

begin

messagem de erro;

Abort;

end

else

post

etc...

etc..

end

 

Não tive problema nenhum !!!

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.