Página 1 de 1

indice tmp!! Impossivel trabalhar!

Enviado: 19 Nov 2004 00:39
por marcos.gurupi
Caros, chequei a uma terrivel conclusão pelo menos para meu sistema, eh impossivel eu trabalhar com indices temporarios, vou te q parti para outro tipo de filtro, gostaria de saber d vcs algum detalhe sobre o set scope da RDD NSX, ou mesmo dbf temporários. Obrigado.

Marcos Roberto

Enviado: 19 Nov 2004 11:05
por Dudu_XBase
// Veja isso...
https://pctoledo.org/forum/viewtopic.php?t=945

Eu tb trabalho com dbfs temporários gerados localmente. nos terminais...

blz...

Enviado: 19 Nov 2004 13:41
por marcos.gurupi
entaum qual seria a logica de trabalhar com dbf temp. veja bem:

Com os indices temporários eu trabalho gravo locamente na rede com um nome aleatorio com a inicia "TMP+os segundos.cdx", com os dbfs eu poderia fazer do mesmo jeito, a minha dúvida eh q como poderia fechar somente o indice tmp q havia sido gerado depois d uma operação, ou seja, o usuário pede para ver os itens do pedido 2045, o sistema vai ateh o arq. de itens do pedido separa apenas os itens q a variavel pedido=2045 e gera um temporario, mas quando o usuário sair eu presciso fechar esse arq. q eu possa abrir outro pedido, entende!? e eu tb trabalho com select's como vou atribuir o select para os arq. tmp? Saum algumas dúvidas q eu ainda tenho sobre dbfs tmp. Obrigado.

Marcos Roberto

Enviado: 19 Nov 2004 21:36
por Diderot
Marcos poderia escrever e ser pouco claro.

Segue uma parte de uma rotina que trata dessa questão dos dbfs e index temporários que você pode tirar uma idéia...

Tem funcionado muito bem com relatórios em ambiente de rede local acesso via internet ao servidor de forma simultânea.

Por favor de uma olhadada e se for necessário retorne.

*---------------------------------------------------------------------------------*
FUNC prepVe
*-Arruma VENDAS TEMPORARIO p/calcular os mais vendidos
*-930725 11/10/04 11:59
*-DBF Declarados
*-Usado por cdr24..

* VENTEM
private DTEMP := "TEM8"+substr( time(), 4, 2 )+substr( time(), 7, 2 )
private NTEMP := "TNSX"+substr( time(), 4, 2 )+substr( time(), 7, 2 )
* VENDAx
private DTEMX := "TEM9"+substr( time(), 4, 2 )+substr( time(), 7, 2 )
private NTEMX := "TNXX"+substr( time(), 4, 2 )+substr( time(), 7, 2 )

private lojai := '01',dtini := ctod('01/01/04'),lojaf := '99',dtfim := date()

* OPEN FILES
use LOJAS alias LO new
if UseError("LOJAS")
close databases ; return NIL
endif
set index to LOJAS1

use VENDAS alias VE new
if UseError("VENDAS")
return
endif

use VENTEM alias VTw new
if UseError("VENTEM")
return
endif

* Dbf temporario
copy stru to (DTEMP)
use (DTEMP) alias VT exclu new
if UseError(DTEMP)
dbcloseall()
return
endif

Miolo.......

Fim abaixo:

*-FECHANDO TUDO
dbcloseall()
WRestore(old_screen, .T.)
do while old_window <> WName(0)
WRelease()
enddo
rele win_redraw, window
close all

* Rela
gbr24( DTEMP, NTEMP)

* Apagar Dbfs e Index
if ferase(DTEMP+".DBF") == -1;warning('Erro ao Remover o File->'+(DTEMP+".DBF"));endif
if ferase(NTEMP+".NSX") == -1;warning('Erro ao Remover o File->'+(NTEMP+".NSX"));endif
if ferase(DTEMX+".DBF") == -1;warning('Erro ao Remover o File->'+(DTEMX+".DBF"));endif
if ferase(NTEMX+".NSX") == -1;warning('Erro ao Remover o File->'+(NTEMX+".NSX"));endif

return

Abraços

Enviado: 19 Nov 2004 22:44
por marcos.gurupi
caro diderot, obrigado pela rotina mas acho q n expliquei bem o q eu pretendo fazer, mas vou tentar ser mais claro.

veja bem atualmente uso da seguinte forma:

o cliente quer visualizar qual item tem no pedido 2945

ARQIND :=alltrim(ptmp)+"TMP"+STRZERO(SECONDS(),5,0) // ptmp eh uma variavel publica q diz onde deve ser gravado o indice temporário geralmente eh gravado no c:\windows\temp\

SELECT 8 // ARQ. DE ITENS DE PEDIDO
do while .t.
if travarqivo(5)
index on pedido tag key001 to &arqind for Pedido=PEDIDOS>PEDIDO
unlock
else
atenc(19,10,"Arquivo sendo usado por outro usuario. Aguarde.")
loop
endif
exit
enddo
// depois dessa rotina eu uso o dbedit para visualizar os dados filtrados.

SET INDEX TO sai002 // indice original do itens do pedido
SELECT 7 // arquivo de pedidos
ordsetfocus(5) // ordem de dada do pedido
RETURN(0)

// no final da rotina uso o set index para retornar os indices originais do sistema

Mas mesmo assim o sistema se torna instável as vezes e acredito ser por causa dos indices tmp, com frequencia preciso recriar os indices, a forma q gostaria de trabalhar era assim:

ARQDBF :=alltrim(ptmp)+"TMP"+STRZERO(SECONDS(),5,0)
select 13 // arquivo de contas a receber
copy structure to &arqdbf
SELECT 30 //* area de arq temporario
USE &ARQDBF
APPEND FROM p_itens FOR spedido=pedido

// depois visualizar os dados com o dbedit

Mas o meu problema estah em fechar somente o select 30 para q eu possa usar novamente para outro dbf tmp, pq n poderia selecionar uma area nova para cada dbf tmp aberto o sistema ficaria instável do mesmo jeito pq cheria um momento q n poderia mais abrir dbf. Obrigado.

Marcos Roberto

Enviado: 21 Nov 2004 09:49
por Dudu_XBase
bom eu crio os tmp....

// para pegar o dbf corrente
calias := alias()
nOrdem := indexord()
nRecno := recno()

// crio o temporário ...naum vou postar o dbcreate....rs

// Abro ele
use &tmp. alias tmp new

/// processo...crio um indice temporário tb caso precise...alimento ele...

// mostro os dados

// fecho o temporário...
dbclosearea()

// executo uma função q criei para excluir os dbfs e nsx encontrados
// no c:\temp

// volto ao dbf corrente
Dbselectarea(cAlias)
Dbsetorder(nOrdem)
Dbgoto(nRecno)

Enviado: 28 Nov 2004 23:30
por marcos.gurupi
Ok... virei uma noite mudando um d meus sistemas q estava muito instavel, para dbf tmp e foi um alivio. Queria agradecer a todos q me ajudaram principalmente o dudu_xbase. Obrigado!!!

Marcos Roberto

Enviado: 04 Dez 2004 11:18
por Dudu_XBase
(y) eh nóis na fita....rs