checar campo "Codigo" para evitar numero duplicado

Forum sobre SQL.

Moderador: Moderadores

wallaceh
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 05 Mai 2021 13:58
Localização: foz do iguaçu / parana

checar campo "Codigo" para evitar numero duplicado

Mensagem por wallaceh »

Olá! comecei a programar em xharbou a pouco tempo e estou tendo dificuldade para criar uma função que faz uma verificação no campo "código" da minha tabela para que não permita o usuário colocar um código já cadastrado, agradeço desde já!
Editado pela última vez por Itamar M. Lins Jr. em 13 Mai 2021 12:36, em um total de 1 vez.
Razão: O presente tópico foi movido da seção Contribuição, Dicas e Tutoriais, uma vez que seu conteúdo não tem relação com os objetivos daquela seção.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

checar campo "Codigo" para evitar numero duplicado

Mensagem por Itamar M. Lins Jr. »

Olá!
Bem vindo ao forum.
Mostre seu código.
Apenas a parte que interessa e que possa ser testados por todos do forum.
Pq tem algumas formas para fazer e com funções e comandos diferentes.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
wallaceh
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 05 Mai 2021 13:58
Localização: foz do iguaçu / parana

checar campo "Codigo" para evitar numero duplicado

Mensagem por wallaceh »

segue abaixo o codigo

Código: Selecionar todos

STATIC FUNCTION CADASTRO_CRUD(cTIPO,nID) // Funcao de pesquisa cadastro 28/04/2021 wallace

LOCAL oDlg,  oGroup1, oCOD, oTELEFONE, oLabel1, oLabel5, oNOME, oCPFCNPJ ;
      , oDATACADASTRO, oLabel2, oLabel3, oLabel4, oButtonex1, oButtonex2

LOCAL  cCOD := "" , cTELEFONE := "" , cNOME := "" , cCPJCNPJ := "" , dDATA := DATE(),;
      aSQL:={}

IF EMPTY(nID)
   nID:=0
ENDIF

IF cTIPO = 'A'
   aSQL:=ES("SELECT codigo, nome, cpf_cnpj, data_cadastro, fone FROM cadastro_crud WHERE id="+CS(nID))

   IF !EMPTY(aSQL)    // L C
      cCOD      :=  aSQL[1,1] 
      cNOME     :=  aSQL[1,2]
      cCPJCNPJ  :=  aSQL[1,3]
      dDATA     :=  aSQL[1,4]
      cTELEFONE :=  aSQL[1,5] 
   ENDIF

ENDIF

IF cTIPO = 'E'
   IF MSGYESNO("Deseja realmente excluir o cadastro?")
      aSQL:=ES("DELETE FROM cadastro_crud WHERE id="+CS(nID))
   ENDIF   
   RETURN(.t.)
ENDIF



INIT DIALOG oDlg TITLE "Alterar/Cadastrar CRUD" AT 0, 0 SIZE 674,278;
FONT HFont():Add( '',0,-13,400,,,) CLIPPER NOEXIT;
ICON _oICONE_SAGI();
STYLE DS_CENTER+WS_VISIBLE+WS_CAPTION+WS_MINIMIZEBOX+WS_SYSMENU+WS_SIZEBOX+WS_MAXIMIZEBOX


@ 9,11 GROUPBOX oGroup1 CAPTION "Dados do cadastro"  SIZE 655,205 ;
     STYLE BS_LEFT  

@ 23,36 SAY oLabel1 CAPTION "Codigo:"   SIZE 62,21  
@ 192,38 GET oCOD VAR cCOD SIZE 80,24 PICTURE eMascNumInt ;
     TOOLTIP 'Informe o codigo'

@ 26,174 SAY oLabel5 CAPTION "Telefone:"  SIZE 84,21  
@ 192,176 GET oTELEFONE VAR cTELEFONE SIZE 119,24 PICTURE _eMascFone() ; 
     TOOLTIP 'Informe o numero de telefone'


@ 23,69 SAY oLabel2 CAPTION "Nome:"  SIZE 44,21  
@ 192,71 GET oNOME VAR cNOME SIZE 291,24 PICTURE eMascGen;    
     TOOLTIP 'informe o nome'

@ 20,102 SAY oLabel3 CAPTION "CPF ou CNPJ:"  SIZE 107,21  
@ 192,106 GET oCPFCNPJ VAR cCPJCNPJ PICTURE "99999999999999" SIZE 151,24 ; 
      TOOLTIP 'Informe o CPF  ou CNPJ'

@ 23,135 SAY oLabel4 CAPTION "Data de Cadastro:"  SIZE 119,21  
@ 192,141 GET DATEPICKER oDATACADASTRO VAR dDATA SIZE 91,24   ; 
     TOOLTIP 'Informe a data de cadastro'


@ 458,219 BUTTONEX oButtonex1 CAPTION "Salvar"   SIZE 98,38 ;
   ON CLICK  {|| CADASTRA_NO_BANCO(cCOD,cTELEFONE,cNOME,cCPJCNPJ,dDATA,cTIPO,nID,oDlg) };
   STYLE BS_CENTER +WS_TABSTOP 

@ 563,218 BUTTONEX oButtonex2 CAPTION "Cancelar"   SIZE 98,41 ;
   ON CLICK  {|| oDlg:close() };
   STYLE BS_CENTER +WS_TABSTOP 

   ACTIVATE DIALOG oDlg 

RETURN(.T.)


****************************************
STATIC FUNCTION CADASTRA_NO_BANCO(cCOD,cTELEFONE,cNOME,cCPJCNPJ,dDATA,cTIPO,nID,oobj)                 // cadastro banco 03/05/2021 - wallace - sajoweb
****************************************

IF EMPTY(cCOD) .OR.  EMPTY(cTELEFONE) .OR.  EMPTY(cNOME) .OR.  EMPTY(cCPJCNPJ) .OR.  EMPTY(dDATA)
   SHOWMSG( 'Favor preencher todos os campos para salvar/alterar o registro' )
   RETURN(.F.)
ENDIF

IF cTIPO = 'A' // se for alteração 
   SYG_BEGINTRANSACTION()
      ES("UPDATE CADASTRO_CRUD SET codigo="+CS(cCOD)+", nome="+CS(cNOME)+", cpf_cnpj="+CS(cCPJCNPJ)+", data_cadastro="+CS(dDATA)+", fone="+CS(cTELEFONE)+" WHERE id ="+CS(nID))
   SYG_ENDTRANSACTION()
   SHOWMSG( 'Alterado com sucesso' )
ELSE // se não é insert
   SYG_BEGINTRANSACTION()
      ES("INSERT into CADASTRO_CRUD (codigo, nome, cpf_cnpj, data_cadastro, fone) values ("+CS(cCOD)+","+CS(cNOME)+","+CS(cCPJCNPJ)+","+CS(dDATA)+","+CS(cTELEFONE)+")")
   SYG_ENDTRANSACTION()   
   SHOWMSG( 'Cadastrado com sucesso' )
ENDIF

oobj:close()

RETURN(.T.)
Editado pela última vez por Itamar M. Lins Jr. em 13 Mai 2021 12:10, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

checar campo "Codigo" para evitar numero duplicado

Mensagem por Itamar M. Lins Jr. »

Olá!
Porquê, não usou autoincremento no campo código ?
Em todo caso criar outra tabela chamada totalizadores e somar + 1 quando for inclusão.

If "INSERT" ...
select codigo from totais_crud...

nCodigo = nCodigo + 1
Update totais_crud set codigo = nCodigo ...
depois
INSERT into cadastro_crud...

Precisa ter um campo qualquer em uma tabela para guardar o ultimo código utilizado.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
wallaceh
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 05 Mai 2021 13:58
Localização: foz do iguaçu / parana

checar campo "Codigo" para evitar numero duplicado

Mensagem por wallaceh »

então eu cheguei a cogitar usar o autoincremento nesse campo especifico, mas me foi solicitado mantes esse camppo livre.

agora eu consegui graças a sua ajuda, muito obrigado meu amigo
Responder