Pessoal estou com uma dúvida.
Estou criando um indice na minha aplicação e acontece que quando uso
Código: Selecionar todos
USE ARQUIVODBF
INDEX ON DATA TO ARQUIVO1NTX
Se eu fizer o mesmo no dbu ele cria com tamanho 2,412kb.
Porque tanta diferença?
Moderador: Moderadores

Código: Selecionar todos
USE ARQUIVODBF
INDEX ON DATA TO ARQUIVO1NTX

Código: Selecionar todos
use arquivodbf
index on dtos(data) to inddataCódigo: Selecionar todos
use arquivodbf
index on dtos(data) tag data to arquivodbf



Código: Selecionar todos
cls
@ 1,2 sAY "Criando IndiceS..."
USE CADNF NEW EXCLUSIVE
INDEX ON NF TO CADNF3
SET INDEX TO CADNF3
CLS
@ 1,2 sAY "IndiceS CriadoS!"
pFORN := 0
pLABOL := 0
pNF := SPACE(6)
DO WHILE .T.
IF LASTKEY()=27
CLS;EXIT
ENDIF
@ 4,4 SAY "NF: " GET pNF
@ 5,4 SAY "LABOL: " GET pLABOL
@ 6,4 SAY "FORNECEDOR: " GET pFORN
READ
SELE CADNF
GO TOP
DBSEEK(pNF,.T.)
IF !FOUND()
ALERT("Não Encontrou!")
ELSE
DO WHILE pNF = NF .AND. !EOF()
ALERT("Encontrou : " +STR(LABOL,5))
ENDDO
ENDIF
ENDDOCódigo: Selecionar todos
INDEX ON NF+STR(FORNECEDOR,5) TO CADNF3 Código: Selecionar todos
DBSEEK(pNF+STR(FORNECEDOR,5),.T.)

Código: Selecionar todos
+---------- CADNF.DBF ----------+
| Nr Nome Tipo Tam Dec|
+-------------------------------+
| 1 "NF" ,"N",006,000 |
| 2 "FORNECEDOR" ,"N",005,000 |
| 3 "LABOL" ,"N",005,000 |
+------- Nr Registros 4 --------+Código: Selecionar todos
cls
@ 1,2 sAY "Criando IndiceS..."
USE CADNF NEW EXCLUSIVE
INDEX ON STRZERO(NF,6,0) TO CADNF3
SET INDEX TO CADNF3
CLS
@ 1,2 sAY "IndiceS CriadoS!"
pFORN := 0
pLABOL := 0
// pNF := SPACE(6)
pNF := 0
DO WHILE .T.
@ 4,4 SAY "NF: " GET pNF
@ 5,4 SAY "LABOL: " GET pLABOL
@ 6,4 SAY "FORNECEDOR:" GET pFORN
READ
IF LASTKEY()=27
CLS;EXIT
ENDIF
SELE CADNF
// GO TOP
DBSEEK(STRZERO(pNF,6,0),.T.)
IF !FOUND()
ALERT("Nao Encontrou!")
ELSE
cMostra:=""
nQuantos:=0
DO WHILE pNF = NF
// .AND. !EOF()
cMostra:=cMostra+str(LABOL,5,0)+";"
nQuantos++
skip
ENDDO
ALERT("Encontrou : " +STR(nQuantos)+";"+cMostra)
ENDIF
ENDDO

Código: Selecionar todos
cls
@ 1,2 sAY "Criando IndiceS..."
USE CADNF NEW EXCLUSIVE
INDEX ON NF TO CADNF3
SET INDEX TO CADNF3
CLS
@ 1,2 sAY "IndiceS CriadoS!"
pFORN := 0
pLABOL := 0
// pNF := SPACE(6)
pNF := 0
DO WHILE .T.
@ 4,4 SAY "NF: " GET pNF
@ 5,4 SAY "LABOL: " GET pLABOL
@ 6,4 SAY "FORNECEDOR:" GET pFORN
READ
IF LASTKEY()=27
CLS;EXIT
ENDIF
SELE CADNF
// GO TOP
DBSEEK(STRZERO(pNF,6,0),.T.)
IF !FOUND()
ALERT("Nao Encontrou!")
ELSE
cMostra:=""
nQuantos:=0
DO WHILE STRZERO(pNF,6,0) = NF
// .AND. !EOF()
cMostra:=cMostra+str(LABOL,5,0)+";"
nQuantos++
skip
ENDDO
ALERT("Encontrou : " +STR(nQuantos)+";"+cMostra)
ENDIF
ENDDO
Mas você iria procurar pelo número da NF ou pelo fornecedor ou fabricante ? O que eu quero dizer é se você vai procurar a NF tal do fornecedor tal ? Ou vai simplesmente procurar todas as NF de tal fornecedor ?Agora o problema está quando quero criar um indice composto. Ex:
NF+FABRICANTE ou NF+FORNECEDOR...
Ele não acha...

Código: Selecionar todos
cls
@ 1,2 sAY "Criando IndiceS..."
USE CADNF NEW EXCLUSIVE
INDEX ON NF TO CADNF3
INDEX ON NF+Strzero(labol,5,0) TO CADNF4
INDEX ON NF+Strzero(fornecedor,5,0) TO CADNF5
SET INDEX TO CADNF3,CADNF4,CADNF5
CLS
@ 1,2 sAY "IndiceS CriadoS!"
pFORN := 0
pLABOL := 0
// pNF := SPACE(6)
pNF := 0
DO WHILE .T.
@ 4,4 SAY "NF: " GET pNF Valid Procura(1,Strzero(pNF,6,0))
@ 5,4 SAY "LABOL: " GET pLABOL Valid Procura(2,Strzero(pNF,6,0),Strzero(pLABOL,5,0))
@ 6,4 SAY "FORNECEDOR:" GET pFORN Valid Procura(3,Strzero(pNF,6,0),Strzero(pFORN,5,0))
READ
IF LASTKEY()=27
CLS;EXIT
ENDIF
ENDDO
Function Procura(nCamp,cNF,cOque)
SELE CADNF
Set Order to nCamp
Do Case
Case nCamp=1
DBSEEK(cNF,.T.)
Case nCamp=2
DBSEEK(cNF+cOque,.T.)
Case nCamp=3
DBSEEK(cNF+cOque,.T.)
EndCase
IF !FOUND()
ALERT("Nao Encontrou!")
lRet:=.F.
ELSE
cMostra:=""
nQuantos:=0
DO WHILE STRZERO(pNF,6,0) = NF
// .AND. !EOF()
Do Case
Case nCamp=1
cMostra:=cMostra+str(LABOL,5,0)+";"
nQuantos++
Case nCamp=2
If LABOL=Val(cOque)
cMostra:=cMostra+str(LABOL,5,0)+";"
nQuantos++
Endif
Case nCamp=3
If FORNECEDOR=Val(cOque)
cMostra:=cMostra+str(FORNECEDOR,5,0)+";"
nQuantos++
Endif
EndCase
skip
ENDDO
If nQuantos>0
lRet:=.T.
ALERT("Encontrou : " +STR(nQuantos)+";"+cMostra)
Else
lRet:=.F.
Endif
ENDIF
Return lRet
Todas as NF de um determinado FORNECEDOR dentro de um PERÍODO.Pablo César escreveu:Só faltou você responder se a procura é por NF ou por todas as NF de tal forncedor ou tal fabricante.
NF no banco é caracter. Mas sempre utilizo numeros.Pablo César escreveu:Imaginei que o NF fosse caracter. Mas deixa te perguntar, pelo visto o NF é só números oupode conter algum caracter alfa ?


Sim, NF+FORNECEDOR+FABRICANTE e NF+FABRICANTE+FORNECEDORanacatacombs escreveu:Tentou fazer um indice de NF+FORNECEDOR+FABRICANTE?