comando index - clausula for x while
Moderador: Moderadores
comando index - clausula for x while
olá pessoal,
gostaria de saber a diferenca e vantagens/desvantagens de criar um indice usando a clausula for ou while.
Desde ja Agradeço,
ABEL
gostaria de saber a diferenca e vantagens/desvantagens de criar um indice usando a clausula for ou while.
Desde ja Agradeço,
ABEL
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
comando index - clausula for x while
Ola!
"for" varre todo o dbf, mesmo que não esteja indexado.
"While" falhará caso o dbf não esteja indexado.
Resumindo while quase nunca é usado, a não se que saiba exatamente a ordem do dbf.
Saudações,
Itamar M. Lins Jr.
"for" varre todo o dbf, mesmo que não esteja indexado.
"While" falhará caso o dbf não esteja indexado.
Resumindo while quase nunca é usado, a não se que saiba exatamente a ordem do dbf.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
comando index - clausula for x while
O FOR simula um FILTER pois verifica todo o conteúdo do arquivo, criando um indice com apenas os registros que satisfaçam a condição. Vamos supor que temos um DBF com campos NOME e ESTADO.Itamar M. Lins Jr. escreveu:"While" falhará caso o dbf esteja indexado
Código: Selecionar todos
use MEUDBFCódigo: Selecionar todos
index on NOME to idx1 FOR "ANDRIL"$NOMEPara uso do WHILE é necessário que já haja um indice usando o campo desejado. Cria-se um indice primeiro
Código: Selecionar todos
index on NOME to idx1Código: Selecionar todos
seek "ANDRIL"
index on NOME to idx2 WHILE NOME="ANDRIL"Código: Selecionar todos
seek "ANDRIL"
index on NOME to idx3 WHILE NOME="ANDRIL" FOR estado="SP"Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
comando index - clausula for x while
Um exemplo, em pedidos pra filtrar os produtos do pedido:
Mesmo que o arquivo contenha milhões de registros, essa indexação é instantânea, e o browse também vai ser.
Lógico, dependendo do caso, SET SCOPE tem o mesmo efeito mas um SET FILTER, deixaria tudo extremamente lento.
Um browse de um arquivo com set filter vai ter navegação lenta.
Um browse de um arquivo com INDEX...FOR...WHILE vai ter navegação instantânea.
O tempo pra criar o índice, pode compensar ou não, dependendo do que vai ser filtrado.
Tem casos onde SET FILTER é melhor, em outros casos SET SCOPE é melhor, em outros casos um INDEX...WHILE é melhor, e em outros casos até um DBF temporário pode ser melhor.
Como tudo em programação, não existe "isto é melhor". Você é que precisa analisar qual vai ser a melhor opção para cada uma das suas necessidades.
Obs. Num banco de dados servidor, o servidor entrega tudo pronto ao terminal. É justamente nisto que o DBF perde longe.
Código: Selecionar todos
SEEK XPEDIDO
INDEX ON PEDIDO + PRODUTO WHILE PEDIDO=XPEDIDO TO TEMP
SET INDEX TO PRINCIPAL,TEMP
OrdSetFocus( "TEMP" )
BROWSE()
SET INDEX TO PRINCIPAL
fErase( "TEMP.NTX" )
Lógico, dependendo do caso, SET SCOPE tem o mesmo efeito mas um SET FILTER, deixaria tudo extremamente lento.
Um browse de um arquivo com set filter vai ter navegação lenta.
Um browse de um arquivo com INDEX...FOR...WHILE vai ter navegação instantânea.
O tempo pra criar o índice, pode compensar ou não, dependendo do que vai ser filtrado.
Tem casos onde SET FILTER é melhor, em outros casos SET SCOPE é melhor, em outros casos um INDEX...WHILE é melhor, e em outros casos até um DBF temporário pode ser melhor.
Como tudo em programação, não existe "isto é melhor". Você é que precisa analisar qual vai ser a melhor opção para cada uma das suas necessidades.
Obs. Num banco de dados servidor, o servidor entrega tudo pronto ao terminal. É justamente nisto que o DBF perde longe.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
comando index - clausula for x while
Depende, se usar ADS, LETODB ou NETIO isso pode ser contornado....
É justamente nisto que o DBF perde longe.
Outra coisa;
Então existe, isto é o melhor!... não existe "isto é melhor".
Você é que precisa analisar qual vai ser a melhor opção para cada uma das suas necessidades.
O melhor é o que melhor se aplica.
Como eu havia dito antes, só use o "while" se souber exatamente a ordem dos registros.
While é usado quase sempre na indexação da indexação.
Um seek p/ depois usar index é dificil de ver em exemplos na NET.
Geralmete usamos DbSeek + Do While, EndDo.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
comando index - clausula for x while
Pra relatórios sim, pra tbrowse não.Um seek p/ depois usar index é dificil de ver em exemplos na NET.
Geralmete usamos DbSeek + Do While, EndDo.
Apesar do set scope resolver a maioria dos casos, sempre tem exceções.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/

