Página 2 de 3

Enviado: 28 Ago 2004 17:27
por Jorge Adourian
Fenix, é só colocar este SX_AUTOSHARE(0) no inicio antes de abrir os arquivos.

O BUG do SEEK é parecido, se colocar várias máquinas dando APPEND e SEEK começa a falhar o SEEK. Parecido com o caso do DOS ERROR 5 que estamos tratando neste tópico.

ja tive este caso

Enviado: 30 Ago 2004 09:08
por tonyx
ja tive este caso, tive que ir no diretorio temp e detonar os arquivos do servidosr e do terminal, fazer o sacndisk e deflag em ambos e resolvi.

mas o caso esta no terminal, o computador e novo e mais rapido e instalacao, de utilitarios, tais como inflavermelho, som, e video ,
no diretorio temp cria um val de VGA.

o negocio e temporariamente detonar os temp e fazer o deflag, nao existe erro em nada e uma questao de manutencao.

Enviado: 30 Ago 2004 11:43
por Fenix
Tonix,

Acho que vc está enganado porque o erro existe sim e para verificar é só criar um programa de teste como expliquei nas mensagems anteriores. Não sei qual a logica de voce desconfiar que o utilitario de infravermelho pode interferir no compartilhamento de arquivos for DOS.... mas deixa para lá, se quiser ver o erro é só fazer o que falei.


Adourian,

Você tem razão, se colocar o SX_AUTOSHARE(0) a Six2 para de provocar o erro. Andei lendo sobre a rotina e ela configura como a lib irá abrir os arquivos automaticamente, se em modo exclusivo ou compartilhado, idenpendente do que foi informado como parametro no comando USE. Colocando o parametro zero esse recurso é desligado e o controle passa a ser feito pelo comando USE.

Na Six3 não tem necessidade de fazer isso. O erro não acontece.

Quanto ao erro do SEEK, coloquei nesse mesmo programa para dar um seek em cada loop e coloquei para rodar nas duas maquinas ao mesmo tempo e nao aconteceu nenhum erro. Poderia por favor detalhar melhor o erro que voce citou porque já estou por conta mesmo talves consiga desvendar o que esta acontecendo.

Enviado: 30 Ago 2004 11:52
por Jorge Adourian
Fenix, não esqueça que o erro do SEEK ocorre na SIX3 e não na SIX2.

Enviado: 30 Ago 2004 11:54
por Fenix
Então, testei na Six3 e deu tudo certo. Você falou que era quando usava muito Append e Seek seguidos e meu exemplo só dá seek, será que é por isso ?

Enviado: 30 Ago 2004 12:22
por Jorge Adourian
Fenix, sem dúvida o APPEND faz diferença, pois se ele não ocorrer o NSX não será atualizado e não falhará. Faça o teste com os APPEND de um código que não deve se repetir no DBF e verá que ele começará a se repetir, mas deixe rodar e criar pelo menos uns 10 mil registros rodando em 2 ou 3 máquinas ou janelas, quanto mais maquinas ou janelas rodarem mais rápido dará o erro e em maior quantidade.

RDD SIX 3.02

Enviado: 30 Ago 2004 17:29
por gransoft
ARAGUARI-MG, 30 de agosto de 2004.

Prezados Srs.,

Sobre RDD SIX 3.02 $99,00:
http://www.vistasoftware.com/sixdriver.asp

Alguém informa um distribuidor ?

Atenciosamente,
Janis Peters Grants.

http://www.gransoft.com.br
gransoft@zipmail.com.br

Enviado: 01 Set 2004 11:32
por Fenix
Gransoft,

O site informa:
  • The final release of the SIx Driver is 3.02 and it was released on October 25th, 1996. This 3.02 version is very mature and very stable. SIx is no longer under development, and technical support is not provided, however it is still available for purchase by those developers who require it for their ongoing CA-Clipper 5.2x development. Support is provided by volunteers on the our support newsgroup
Ou seja, a ultima versao saiu em 96 e é essa que usamos. Ela não está mais em desenvolvimento e nao possui suporte técnico, a não ser por voluntarios de foruns.

A Six3 pode ser comprada pelo site do fabricante, mas não vejo vantagem nisso porque eles não fornecem suporte de erros e nem lançaram mais atualizações para ela.

A única coisa que justificaria sua aquisição seria ter a certeza que os bugs serão resolvidos.

Enviado: 01 Set 2004 11:46
por Fenix
Andourian,


Se não for pedir muito, dá uma 'rascunhada' no algoritimo que voce acha que pode provocar o erro pq coloquei para dar um append na minha rotina mas nao deu nada.

Para agilizar nossa vida, cita um exemplo de como provocar o erro que eu vou tentar descobrir como contorna-lo.

Enviado: 03 Set 2004 12:51
por Barbosa
Pessoal que confusão, eu utilizo six02 e funciona normalmente. O que eu acho que faço de diferente é que cada módulo do sistema, os arquivos são abertos compartilhados, juntamente com seu indice e ao sair do módulo fecho os arquivos abertos. Veja um exemplo bem simples.
Mais uma coisa, no acesso ao sistema, se o indice não existir ele é criado e tenho um dbf que a cada 10 dias os indices são refeitos para o 1º usuário que acessa no dia.


Procedure xPagamento()
Use arq1 shared arq1nsx // Aqui uso uma função para abertura dos arquivos e indices automaticamente.
Do while(.t.)
Comandos ????
Enddo
Fecha() // Função para fechar todos os arquivos abertos nesse módulo
recupera a Tela
return

Espero ter ajudado.


Geraldo Barbosa

Enviado: 03 Set 2004 13:08
por Barbosa
Pessoal que confusão. Eu utilizo normalmente a six02 e até agora não tive nenhum problema. No meus sistemas eu abro e fecho os arquivos .DBF e Índices a cada módulo. No acesso ao sistema se os indices não existirem são criados (exceto os temporários) e tenho um dbf que controla que a cada 10 dias os indices são refeitos para o 1º usuário que acessar no dia.
Um simples exemplo:

Procedure xQueConfusao()
GbAbre(“Vendas”,”Vds_a”) // Abre antes do While e vai fechar na saida
Do while (.t.)
??? Comandos
Enddo
Fecha() // Assim que o usuário sair da rotina os arquivos por ele abertos são fechados
RecTela(cVar)
return



Function GbAbre(_Def,_Def1,gModo)
If(empty(gModo),gModo:='S',gModo)

// GbDbf() é uma função que abre o arquivo em modo shared ou exclusiv
If !GbDbf(_Def,gModo)
return(.f.)
Else
&_Def->(OrdListAdd(_Def))
If !empty(_Def1)
&_Def->(OrdSetFocus(_Def1))
Endif
Endif
return(.t.)


Function Fecha()
DbCloseAll()
Return(.t.)

Espero ter ajudado.

Enviado: 03 Set 2004 14:31
por Dudu_XBase
:D Até agora utilizo a Six 3.02 em 80 % dos meus dbfs....uso todos com criptografia...e até hj estou satisfeito com os resultados....realizei mtos testes na época antes de migrar...vi posts...essas falhas q todos falam e exemplificam, inclusive o ano passado tivemos uma discussão a esse respeito no fórum alguem lembra....até o prezado momento nunca me afetou...qdo eu trabalhava numa software house...migrei para o Six...um dbf q tinha mais de 200 megas...e q era atualizado constantemente por uma porrada de usuários...e tinha vários ntx...sempre os corruption detected...me enchiam o saco...depois da alteração.... :cool: ...diminuiu consideralvelmente a qtde de chamados com erro desse tipo...
Não estou dizendo q o SIX é perfeito...mas até o momento naum me deparei com nenhum problema q a utilização dele me afetasse...
Estou utilizando ele inclusive nas minhas aplicações em fivewin...
Estou somente salientando minha opinião a respeito. :P

Enviado: 04 Set 2004 12:59
por Fenix
Barbosa,

Pode ser a forma como a tabela é aberta que provoca o problema. Para tirar a duvida poste sua funcao que abre os bancos de dados para vermos o que vc esta fazendo de diferente. Se quiser testar o erro que estou falando faça o seguinte:

Do while .t.
? 'Abrindo DBF... '
?? time()
abredbf()
dbsetorder(3)
go top
go bottom
close all
skip
endd

proc abredbf()
sele 0
use teste shared new alias
set index to teste1, teste2, teste3, teste4, teste5
dbsetorder(1)
retu

Pode ter algum erro no codigo acima pq estou repetindo de cabeca o codigo que testei, mas acontece que quando deixa isso executando em duas maquinas em rede e elas coincidem de abrir os arquivos ao mesmo tempo, naquela onde os dbfs estao locais ocorre o erro do dos n5. Se colocar o sx_autoshare(0) antes desse codigo nada disso acontece. Tambem nao acontece com a Six3 e nem usando NTX puro.

Teste com essa sua rotina de abertura de banco de dados e coloque para rodar na rede e nos fale se tambem deu o erro. Se nao der, poderemos ver se é a forma como linka ou como abre os arquivos..


O JORGE, coloca o código aí para a gente continuar os testes...

Até mais.

Enviado: 04 Set 2004 13:01
por Fenix
Barbosa,

Pode ser a forma como a tabela é aberta que provoca o problema. Para tirar a duvida poste sua funcao que abre os bancos de dados para vermos o que vc esta fazendo de diferente. Se quiser testar o erro que estou falando faça o seguinte:

Do while .t.
? 'Abrindo DBF... '
?? time()
abredbf()
dbsetorder(3)
go top
go bottom
close all
endd
retu

proc abredbf()
sele 0
use teste shared new alias
set index to teste1, teste2, teste3, teste4, teste5
dbsetorder(1)
retu

Pode ter algum erro no codigo acima pq estou repetindo de cabeca o codigo que testei, mas acontece que quando deixa isso executando em duas maquinas em rede e elas coincidem de abrir os arquivos ao mesmo tempo, naquela onde os dbfs estao locais ocorre o erro do dos n5. Se colocar o sx_autoshare(0) antes desse codigo nada disso acontece. Tambem nao acontece com a Six3 e nem usando NTX puro.

Teste com essa sua rotina de abertura de banco de dados e coloque para rodar na rede e nos fale se tambem deu o erro. Se nao der, poderemos ver se é a forma como linka ou como abre os arquivos..


O JORGE, coloca o código aí para a gente continuar os testes...

Até mais.

Enviado: 04 Set 2004 13:33
por Jorge Adourian
Fenix, segue modelo de PRG para os seus testes.

Código: Selecionar todos

*** NSX.PRG - TESTE DE INCLUSÃO REPETITIVA COM DRIVER NSX DO SIX ***
* ESTRUTURA DO TESTE.DBF ***
*  1 CODIGO     C        6
*  2 NOME       C       50
*******************************

#INCLUDE "SIXNSX.CH"

FUNCTION MAIN()

LOCAL AUXLOOP

CLS

IF ALERT('Indexar ?',{'Sim','Nao'})==1
 USE TESTE.DBF VIA 'SIXNSX' EXCLUSIVE
 INDEX ON FIELD->CODIGO TAG 1 TO TESTE.NSX
 USE
ENDIF

USE TESTE.DBF VIA 'SIXNSX' SHARED
SET INDEX TO TESTE.NSX

DO WHILE INKEY(.1)<> 27
 APPEND BLANK
 IF .NOT. NETERR()
  IF RLOCK()
   DO WHILE .T.
    FIELD->CODIGO:=G_CODIGO()
    AUXLOOP:=RECNO()
    SEEK FIELD->CODIGO
    IF RECNO()==AUXLOOP
     FIELD->NOME:=FIELD->CODIGO
     EXIT
    ENDIF
    DBGOTO(AUXLOOP)
    FIELD->CODIGO:=''
   ENDDO
   @ 13,13 SAY FIELD->CODIGO
   DBCOMMIT()
   DBUNLOCK()
  ENDIF
 ENDIF
ENDDO
USE
RETURN NIL


FUNCTION G_CODIGO()

LOCAL RETORNO

LOCAL AUXREG:=RECNO()

DBGOBOTTOM()
RETORNO:=STR(VAL(FIELD->CODIGO)+1,6)
DBGOTO(AUXREG)
RETURN RETORNO