Página 1 de 1

DBF incremental não mostra o registro ...

Enviado: 01 Jan 2019 21:09
por arcanjoebc
Amigos do fórum, estou elaborando um sistema de videolocadora e estou encontrando uma dificuldade. Na hora de inserir o cliente, ou seja, o segundo cliente, deveria aparecer o número do próximo registro, porém, isso não acontece e eu não sei o porquê disso, alguém aqui pode me ajudar. Abaixo coloco a rotina de inclusão dos clientes, sendo que os índices são CDX, com numeração automática:

Código: Selecionar todos

use clientes
OrdSetFocus("indcodcli")

PUBLIC MEM_COD, MEM_NOME, MEM_NASC, MEM_SEXO, MEM_ENDE
PUBLIC MEM_NUM, MEM_BAIRRO, MEM_CID, MEM_CEP, MEM_FONE
PUBLIC MEM_CPF, MEM_PROF, MEM_EC, MEM_PROF, MEM_EMAIL
PUBLIC MEM_OBS, MEM_UF, CONFIRMA

DO WHILE .T.
  CLEAR
  @ 00,00 TO 33,149 DOUBLE
  @ 02,63 SAY "INCLUSAO DE NOVOS CLIENTES"
  @ 04,03 SAY "COD.:"
  @ 06,03 SAY "NOME:"
  @ 08,03 SAY "DATA NASC   /  /     SEXO:   ESTADO CIVIL:"
  @ 10,03 SAY "ENDERECO:                                          NUM.:"
  @ 12,03 SAY "BAIRRO:                               CEP:"
  @ 14,03 SAY "CIDADE:                                        UF:"
  @ 16,03 SAY "TELEFONE: (  )     -      CPF:    .   .   -  "
  @ 18,03 SAY "PROFISSAO:"
  @ 20,03 SAY "E-MAIL:"
  @ 22,03 SAY "OBS.:"
  @ 24,03 SAY "CONFIRMA? (S/N) "
  MEM_COD   = 0000
  MEM_NOME  = SPACE(30)
  MEM_NASC  = CTOD("  /  /  ")
  MEM_SEXO  = SPACE(01)
  MEM_EC    = SPACE(01)
  MEM_ENDE  = SPACE(35)
  MEM_NUM   = SPACE(10)
  MEM_BAIRRO = SPACE(20)
  MEM_CID   = SPACE(35)
  MEM_UF    = SPACE(02)
  MEM_CEP   = SPACE(10)
  MEM_FONE  = SPACE(14)
  MEM_CPF   = SPACE(14)
  MEM_PROF  = SPACE(20)
  MEM_EMAIL = SPACE(50)
  MEM_OBS   = SPACE(50)
  CONFIRMA  = SPACE(01)
  @ 04,13 SAY MEM_COD PICT "99999"
  @ 06,13 SAY MEM_NOME PICT "@!35"
  @ 08,13 SAY MEM_NASC PICT "  /  /    "
  @ 08,30 SAY MEM_SEXO PICT "!"
  @ 08,47 SAY MEM_EC PICT "!"
  @ 10,13 SAY MEM_ENDE PICT "@!35"
  @ 10,60 SAY MEM_NUM PICT "9999999999"
  @ 12,13 SAY MEM_BAIRRO PICT "@!20"
  @ 12,47 SAY MEM_CEP PICT "99.999-999"
  @ 14,13 SAY MEM_CID PICT "@!35"
  @ 14,56 SAY MEM_UF PICT "!!"
  @ 16,13 SAY MEM_FONE PICT "(99)99999-9999"
  @ 16,34 SAY MEM_CPF PICT "999.999.999-99"
  @ 18,13 SAY MEM_PROF PICT "@!20"
  @ 20,13 SAY MEM_EMAIL PICT "@!50"
  @ 22,13 SAY MEM_OBS  PICT "@!50"
  @ 24,19 SAY CONFIRMA PICT "!"
  @ 04,13 GET MEM_COD PICT "99999"
  READ
  IF MEM_COD = 00000
    EXIT
  ENDIF
  LOCATE FOR COD = MEM_COD
  IF FOUND()
    ENTER=SPACE(01)
    @ 24,03 SAY "CLIENTE JAH CADASTRADO <ENTER> " GET ENTER
    READ
    @ 24,03 SAY "                               "
    LOOP
  ENDIF
  @ 04,13 GET MEM_COD PICT "99999"
  @ 06,13 GET MEM_NOME PICT "@!35"
  @ 08,13 GET MEM_NASC PICT "  /  /    "
  @ 08,30 GET MEM_SEXO PICT "!"
  @ 08,47 GET MEM_EC PICT "!"
  @ 10,13 GET MEM_ENDE PICT "@!35"
  @ 10,60 GET MEM_NUM PICT "9999999999"
  @ 12,13 GET MEM_BAIRRO PICT "@!20"
  @ 12,47 GET MEM_CEP PICT "99.999-999"
  @ 14,13 GET MEM_CID PICT "@!35"
  @ 14,56 GET MEM_UF PICT "!!"
  @ 16,13 GET MEM_FONE PICT "(99)99999-9999"
  @ 16,34 GET MEM_CPF PICT "999.999.999-99"
  @ 18,13 GET MEM_PROF PICT "@!20"
  @ 20,13 GET MEM_EMAIL PICT "@!50"
  @ 22,13 GET MEM_OBS  PICT "@!50"
  @ 24,19 GET CONFIRMA PICT "!" 
  READ
  IF CONFIRMA = "S"
    APPEND BLANK
    REPLACE COD    WITH MEM_COD
    REPLACE NOME   WITH MEM_NOME
    REPLACE NASC   WITH MEM_NASC
    REPLACE SEXO   WITH MEM_SEXO
    REPLACE EC     WITH MEM_EC
    REPLACE ENDE   WITH MEM_ENDE
    REPLACE NUM    WITH MEM_NUM
    REPLACE BAIRRO WITH MEM_BAIRRO
    REPLACE CEP    WITH MEM_CEP
    REPLACE CID    WITH MEM_CID
    REPLACE UF     WITH MEM_UF
    REPLACE FONE   WITH MEM_FONE
    REPLACE CPF    WITH MEM_CPF
    REPLACE PROF   WITH MEM_PROF
    REPLACE EMAIL  WITH MEM_EMAIL
    REPLACE OBS    WITH MEM_OBS
  ENDIF
ENDDO
CLOSE ALL
RETURN
 
Desde já, sou-lhes grato por qualquer ajuda futura! Tudo de bom!

Everaldo

DBF incremental não mostra o registro ...

Enviado: 01 Jan 2019 21:24
por alxsts
Olá!

Como está sendo criado o teu DBF? Manualmente? Via código? Qual é o campo chave (auto increment)? Poste o código.

DBF incremental não mostra o registro ...

Enviado: 01 Jan 2019 21:38
por Toledo
Na linha 24, onde está:

Código: Selecionar todos

MEM_COD   = 0000
Troque por:

Código: Selecionar todos

GO BOTTOM
MEM_COD   = (COD+1)
Abraços,

DBF incremental não mostra o registro ...

Enviado: 02 Jan 2019 00:05
por alxsts
Olá!

Gostaria de ver como foi a criação da tabela... se o tipo de campo realmente foi definido como auto incremento (+) o Harbour gerencia automaticamente a numeração. Não é possível atribuir valor (replace) a um campo auto incremento. O controle é automático. Isto é padrão em todos os bancos de dados, daí o nome AUTO incremento.

Veja este tópico, onde consta um exemplo de código para criar e popular uma tabela com campo auto incremento.

autoincrementocoluna

DBF incremental não mostra o registro ...

Enviado: 02 Jan 2019 22:51
por JoséQuintas
alxsts escreveu:Não é possível atribuir valor (replace) a um campo auto incremento. O controle é automático. Isto é padrão em todos os bancos de dados, daí o nome AUTO incremento.
Você está errado, é normal atribuir valor, apenas é opcional.

Imagine um backup/restore do banco de dados... ele precisa aceitar o conteúdo anterior.
Faça o teste no MySQL e vai ver que é normal.
Ou como seria no DBF um COPY TO... se o conteúdo não puder ser gravado no destino.

Mas... se não atribuir valor, será usado o automático.