Problemas com indices....

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Marcio Antonio Ril
Usuário Nível 1
Usuário Nível 1
Mensagens: 42
Registrado em: 13 Set 2005 11:55

Problemas com indices....

Mensagem por Marcio Antonio Ril »

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
DORNELES
Usuário Nível 1
Usuário Nível 1
Mensagens: 19
Registrado em: 14 Out 2005 04:51

Mensagem por DORNELES »

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]
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

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
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)
Responder