Vamos dar continuidade ao sistema apresentando a rotina de cadastro da nossa agenda.
Começamos abrindo o banco de dados em modo compartilhado com o parâmetro SHARED para usar em modo rede multi-usuário.
Depois criamos um loop de cadastro. Nele pegamos as informações do usuário com o comando @...SAY...GET; inserimos um registro em branco no arquivo com o DBAPPEND() e gravamos as variáveis do programa que o usuário digitou nos campos do banco de dados e liberamos o registro para uso normal na rede com o DBUNLOCK(). Fechamos o banco de dados para encerrar e voltar ao menu.
FUNCTION CADASTRO() USE AGENDA ALIAS AG SHARED NEW // ABRE O BANCO DE DADOS EM MODO COMPARTILHADO SET INDEX TO AGENDA // ABRE O ARQUIVO DE ÍNDICE SET ORDER TO TAG CPF // COLOCA ORDENADO POR CPF SETCOLOR("W+/N") @ 04,01 SAY PADC("CADASTRO DA AGENDA", 77, " ") // CENTRALIZA DENTRO DE 77 CARACTERES DO WHILE .T. // CRIA UM LOOP SUPOSTAMENTE INFINITO @ 07,01 CLEAR TO 22,78 // LIMPA ESSA ÁREA cNOME := SPACE(30) // DEFINE UMA VARIÁVEL CARACTER TAMANHO 30 nFONE := 0 // DEFINE TELEFONE NUMÉRICO cCPF := SPACE(11) // DEFINE CPF CARACTER PORQUE O PONTO DA MÁSCARA É LIDO COMO DECIMAL @ 09,10 SAY "CPF.:" GET cCPF PICTURE "@R 999.999.999-99" // EXIBE UMA MÁSCARA NO GET QUE RETORNA 99999999999 @ 24,00 SAY PADL("Insira um número de CPF",54, " ") COLOR "W+/BG" // MENSAGEM NA LINHA DE STATUS READ // AGUARDA A LEITURA DOS GETs IF LASTKEY() = K_ESC // LASTKEY() RETORNA A ÚLTIMA TECLA, SE FOI [ESC]... EXIT // SAI DO LOOP ELSEIF EMPTY(cCPF) // SE DEIXOU EM BRANCO ALERT("PRECISA DIGITAR O CPF") LOOP // VOLTA PRA LINHA SEGUINTE AO 'DO WHILE' ENDIF nCPF := VAL( cCPF ) // CONVERTE cCPF CARACTER PARA nCPF NUMÉRICO COM VAL() IF AG->(DBSEEK(nCPF)) // SE A PESQUISA DBSEEK() NO DBF RETORNOU .T. (VERDADEIRA) ALERT("ESSA PESSOA JÁ FOI CADASTRADA") LOOP ELSE // ROTINA DE CADASTRO // PEDE PRO USUÁRIO DIGITAR O NOME E TELEFONE @ 24,00 SAY PADL("Digite um nome e telefone", 54, " ") COLOR "W+/BG" // NA COLUNA 55 TEM 'TECLE [ESC]' // PEGA DADOS DIGITADOS PELO USUÁRIO COM GET/READ @ 10,10 SAY "NOME:" GET cNOME @ 11,10 SAY "FONE:" GET nFONE PICTURE "@R (99) 99999-9999" READ IF ( ALERT("Confirma cadastro?", {"Sim", "Não"}) ) = 1 // ALERT() RETORNA A POSIÇÃO DO ARRAY ESCOLHIDO, "Sim"=1, "Não"=2, Esc=0. AG->(DBAPPEND()) // INSERE UM REGISTRO EM BRANCO NO ARQUIVO DBF AG->CPF := nCPF // ATRIBUI O CAMPO DO DBF À VARIÁVEL DO PROGRAMA AG->NOME := cNOME AG->FONE := nFONE AG->(DBCOMMIT()) // JOGA O CACHE PRO DISCO (GRAVA NO DBF) AG->(DBUNLOCK()) // DESBLOQUEIA O REGISTRO ENDIF ENDIF ENDDO // VOLTA PRA LINHA SEGUINTE DO 'DO WHILE' AG->(DBCLOSEAREA()) // FECHA O BANCO DE DADOS RETURN // RETORNA PRA FUNCÃO QUE CHAMOU CADASTRO()
Aprofunde-se mais sobre cadastrar dados.
Comentários recentes