Galera estou mudando de NTX para CDX porém estou com problemas para abrir, usar e fechar os arquivos, segue abaixo como faço hoje, gostaria que alguem desse um olhadinha nesse codigo e sugerise algo
para acertar meus problemas.
Ocorre que quando deleto um vendedor, quando volto para incluir outro ele naum respeita mais os contador, aparentemente o Go Bottom perde a função.
* PROGRAMA : VENDEDOR.PRG
* COMENTARIO : CADASTRO DE VENDEDORES
SET DELETED ON
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WCOMISSAO := 0
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(05,03,12,76,"Cadastro de Vendedores")
COR("MENU")
@ 07,05 SAY "Codigo........:"
@ 08,05 SAY "Nome Vendedor.:"
@ 09,05 SAY "% Comissao....:"
@ 10,05 SAY "Data Cadastro.:"
JANELA(05,63,12,76," MENU ")
COR("MENU")
@ 07,65 PROMPT " Inclusao "
@ 08,65 PROMPT " Alteracao "
@ 09,65 PROMPT " Consulta "
@ 10,65 PROMPT " Delecao "
MENU TO OP
IF LASTKEY() = 27
EXIT
CLS
ENDIF
DO CASE
CASE OP=1
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WCOMISSAO := 0
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(05,03,12,76,"Cadastro de Vendedores")
COR("MENU")
@ 07,05 SAY "Codigo........:"
@ 08,05 SAY "Nome Vendedor.:"
@ 09,05 SAY "% Comissao....:"
@ 10,05 SAY "Data Cadastro.:"
IF !FILE("INDVD.NTX")
SELECT 2
USE VENDEDOR
INDEX ON COD_VEN TO INDVD
INDEX ON NOME_VEN TO INDVD1
SET INDEX TO INDVD, INDVD1
ELSE
SELECT 2
USE VENDEDOR
SET INDEX TO INDVD, INDVD1
ENDIF
SELECT 2
GO BOTTOM
WCOD_VEN := COD_VEN + 1
WCOD1_VEN := WCOD_VEN
@ 07,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
READ
IF LASTKEY() = 27
EXIT
CLS
ENDIF
SELECT 2
SEEK WCOD_VEN
IF FOUND()
WCOD_VEN := COD_VEN
WNOME_VEN := NOME_VEN
WCOMISSAO := COMISSAO
@ 08,21 SAY WNOME_VEN PICT "@!"
@ 09,21 SAY WCOMISSAO PICT "@E 999.99"
@ 10,21 SAY WDTCAD_VEN PICT "@D"
BEEP()
MENSAGEM("Vendedor j Cadastrado",2)
LOOP
ELSE
@ 08,21 GET WNOME_VEN PICT "@!"
@ 09,21 GET WCOMISSAO PICT "@E 999.99"
@ 10,21 GET WDTCAD_VEN PICT "@D"
READ
IF WNOME_VEN = SPACE(30)
EXIT
CLS
ENDIF
MENSAGEM("Confirma (S/N):")
@ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
READ
IF WCONF = "S"
SELECT 2
SEEK WCOD_VEN
IF! FOUND()
IF! FOUND()
APPEND BLANK
ENDIF
REPLACE COD_VEN WITH WCOD_VEN
REPLACE NOME_VEN WITH WNOME_VEN
REPLACE COMISSAO WITH WCOMISSAO
REPLACE DTCAD_VEN WITH WDTCAD_VEN
ELSE
GO BOTTOM
WCOD_VEN := COD_VEN + 1
IF! FOUND()
APPEND BLANK
ENDIF
REPLACE COD_VEN WITH WCOD_VEN
REPLACE NOME_VEN WITH WNOME_VEN
REPLACE COMISSAO WITH WCOMISSAO
REPLACE DTCAD_VEN WITH WDTCAD_VEN
ENDIF
ELSE
MENSAGEM("InclusÆo nÆo Efetuada",1)
LOOP
ENDIF
ENDIF
ENDDO
CASE OP=2
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WCOMISSAO := 0
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(05,03,12,76,"Cadastro de Vendedores")
COR("MENU")
@ 07,05 SAY "Codigo........:"
@ 08,05 SAY "Nome Vendedor.:"
@ 09,05 SAY "% Comissao....:"
@ 10,05 SAY "Data Cadastro.:"
IF !FILE("INDVD.NTX")
SELECT 2
USE VENDEDOR
INDEX ON COD_VEN TO INDVD
INDEX ON NOME_VEN TO INDVD1
SET INDEX TO INDVD, INDVD1
ELSE
SELECT 2
USE VENDEDOR
SET INDEX TO INDVD, INDVD1
ENDIF
@ 07,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
READ
IF LASTKEY() = 27
EXIT
CLS
ENDIF
SELECT 2
SEEK WCOD_VEN
IF FOUND()
WCOD_VEN := COD_VEN
WNOME_VEN := NOME_VEN
WCOMISSAO := COMISSAO
@ 08,21 SAY WNOME_VEN PICT "@!"
@ 09,21 SAY WCOMISSAO PICT "@E 999.99"
@ 10,21 SAY WDTCAD_VEN PICT "@D"
@ 08,21 GET WNOME_VEN PICT "@!"
@ 09,21 GET WCOMISSAO PICT "@E 999.99"
READ
MENSAGEM("Confirma (S/N):")
@ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
READ
IF WCONF = "S"
SELECT 2
IF! FOUND()
APPEND BLANK
ENDIF
IF RLOCK()
REPLACE COD_VEN WITH WCOD_VEN
REPLACE NOME_VEN WITH WNOME_VEN
REPLACE COMISSAO WITH WCOMISSAO
UNLOCK
ELSE
MENSAGEM("Bloqueado por outro usuario",1)
LOOP
ENDIF
ELSE
MENSAGEM("InclusÆo nÆo Efetuada",1)
LOOP
ENDIF
ELSE
BEEP()
MENSAGEM("Vendedor nÆo Cadastrado",2)
LOOP
ENDIF
ENDDO
CASE OP=3
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WCOMISSAO := 0
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(05,03,12,76,"Cadastro de Vendedores")
COR("MENU")
@ 07,05 SAY "Codigo........:"
@ 08,05 SAY "Nome Vendedor.:"
@ 09,05 SAY "% Comissao....:"
@ 10,05 SAY "Data Cadastro.:"
IF !FILE("INDVD.NTX")
SELECT 2
USE VENDEDOR
INDEX ON COD_VEN TO INDVD
INDEX ON NOME_VEN TO INDVD1
SET INDEX TO INDVD, INDVD1
ELSE
SELECT 2
USE VENDEDOR
SET INDEX TO INDVD, INDVD1
ENDIF
@ 07,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
READ
IF LASTKEY() = 27
EXIT
CLS
ENDIF
SELECT 2
SEEK WCOD_VEN
IF FOUND()
WCOD_VEN := COD_VEN
WNOME_VEN := NOME_VEN
WCOMISSAO := COMISSAO
@ 08,21 SAY WNOME_VEN PICT "@!"
@ 09,21 SAY WCOMISSAO PICT "@E 999.99"
@ 10,21 SAY WDTCAD_VEN PICT "@D"
MENSAGEM("Tecle algo para sair",1)
INKEY(0)
ELSE
MENSAGEM("Vendedor nÆo Cadastrado",2)
LOOP
ENDIF
ENDDO
CASE OP=4
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WCOMISSAO := 0
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(05,03,12,76,"Cadastro de Vendedores")
COR("MENU")
@ 07,05 SAY "Codigo........:"
@ 08,05 SAY "Nome Vendedor.:"
@ 09,05 SAY "% Comissao....:"
@ 10,05 SAY "Data Cadastro.:"
IF !FILE("INDVD.NTX")
SELECT 2
USE VENDEDOR
INDEX ON COD_VEN TO INDVD
INDEX ON NOME_VEN TO INDVD1
SET INDEX TO INDVD, INDVD1
ELSE
SELECT 2
USE VENDEDOR
SET INDEX TO INDVD, INDVD1
ENDIF
@ 07,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
READ
IF LASTKEY() = 27
EXIT
CLS
ENDIF
SELECT 2
SEEK WCOD_VEN
IF FOUND()
WCOD_VEN := COD_VEN
WNOME_VEN := NOME_VEN
WCOMISSAO := COMISSAO
@ 08,21 SAY WNOME_VEN PICT "@!"
@ 09,21 SAY WCOMISSAO PICT "@E 999.99"
@ 10,21 SAY WDTCAD_VEN PICT "@D"
INKEY(0.1)
MENSAGEM("Confirma (S/N):")
@ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
READ
IF WCONF = "S"
IF RLOCK()
DELETE
LOOP
UNLOCK
ELSE
MENSAGEM("Bloqueado por outro usuario",1)
LOOP
ENDIF
ELSE
LOOP
ENDIF
ELSE
MENSAGEM("Vendedor nÆo Cadastrado",2)
LOOP
ENDIF
ENDDO
ENDCASE
ENDDO
Problemas com indices....
Moderador: Moderadores
-
Marcio Antonio Ril
- Usuário Nível 1

- Mensagens: 42
- Registrado em: 13 Set 2005 11:55
Se o seu sistema funcionava normal com o NTX, não tem alteração a fazer no sistema, só a verificação dos indice que passa a ser .CDX,
você ainda esta verificando o NTX
IF !FILE("INDVD.NTX")
tem que ficar assim.
IF !FILE("INDVD.CDX")
mas de um olhada nesse link.
https://pctoledo.org/forum/viewto ... 4ff44c5f1a
OK[/url]
você ainda esta verificando o NTX
IF !FILE("INDVD.NTX")
tem que ficar assim.
IF !FILE("INDVD.CDX")
mas de um olhada nesse link.
https://pctoledo.org/forum/viewto ... 4ff44c5f1a
OK[/url]
Prezado Colega
Quando se utiliza CDX uma das coisas mais importantes é que se deve excluir os indices antigos antes de utilizar o INDEX ON, se você utilizar o INDEX ON antes de excluir o indice antigo vai ter problemas com certeza.
Então o ideal é um código do tipo :
DO WHIL FILE("INDCLI.CDX")
FERASE("INDCLI.CDX")
ENDDO
INDEX ON CODIGO TO INDCLI
Uma outra dica que serve para diminuir o número de arquivos é o uso do TAG desta forma você poderá ter todos os indices em apenas 1 arquivo.
Até logo.
Marcelo
Quando se utiliza CDX uma das coisas mais importantes é que se deve excluir os indices antigos antes de utilizar o INDEX ON, se você utilizar o INDEX ON antes de excluir o indice antigo vai ter problemas com certeza.
Então o ideal é um código do tipo :
DO WHIL FILE("INDCLI.CDX")
FERASE("INDCLI.CDX")
ENDDO
INDEX ON CODIGO TO INDCLI
Uma outra dica que serve para diminuir o número de arquivos é o uso do TAG desta forma você poderá ter todos os indices em apenas 1 arquivo.
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
