Clipper On Line • Ver Tópico - Problemas com DbUseArea() e NetErr()
Mudar para estilo Clássico
Discussão sobre a linguagem CA-Clipper.
Postar uma resposta

Problemas com DbUseArea() e NetErr()

13 Dez 2005 16:40

Uso a seguinte rotina para não permitir a abertura do sistema duas vezes:

DbUseArea(´.F.´,NIL,´STATUS.DBF´,NIL,NIL,.T.)
If NetErr()
Alert(´......´)
Quit
Else
.....
EndIf

Ocorre que as vezes falha, quando entra a proteção de tela e o ícone vai para barra de tarefas ocorre a falha, não é sempre.

Alguma dica do que pode estar ocorrendo ?

13 Dez 2005 17:14

Troque o ultimo nil por .f. que é modo exclusivo.

DbUseArea(.F.,NIL,'STATUS.DBF',NIL,.F.,.T.)
If NetErr()
Alert('......')
Quit
Else
.....
EndIf

13 Dez 2005 17:26

Não adiantou, após algumas tentativas, maximizando e minimizando janelas, e tentando abrir novamente o sistema abre várias vezes.

14 Dez 2005 07:06

este tipo de proteção so funciona se vc nao fechar os arquivos dbf.

exemplo:
se vc usar 'close all' ou 'close databases' ja quebra a sua potreção.

14 Dez 2005 07:31

É isso mesmo Daniel, o erro acontece com DbCloseAll(). Valeu!

Problemas com DbUseArea() e NetErr()

07 Jun 2018 20:48

Estou usando exatamente essa função para a mesma finalidade, mais ela está dando erro. Onde estou errando alguém poderia me ajudar .... segue o erro em anexo.

ArqD := GetEnv("computername")//+".DBF"

If !File(ArqD+".dbf")
Estr:={}
AADD(Estr,{"CODIGO" ,"C",05,0})
DbCreate("&ArqD",Estr)
endif

dbUseArea(.T.,NIL,"&ArqD",NIL,.F.,.F.)

Alert("SISTEMA NAO PODE SER ABERTO MAIS DE UMA VEZ NA MESMA MAQUINA !!!")
Quit
If NetErr()
Alert('O programa ja esta aberto em outra janela! Pressione qualquer tecla e, apos, maximize-o, com o mouse, na barra de tarefas...', )
Quit
Else
Use &ArqD New
EndIf
Anexos
erro.png

Problemas com DbUseArea() e NetErr()

07 Jun 2018 21:31

Tem um caractere não permitido para o nome do .DBF, a saber o hífen: "-". Você tem que tratar isso.

Problemas com DbUseArea() e NetErr()

07 Jun 2018 23:28

Obrigado Jairo, vou usar o strtran e ver se resolve.

Problemas com DbUseArea() e NetErr()

07 Jun 2018 23:50

Resolvido Jairo !!!, Obrigado mais uma vez.

ArqD := strtran(GetEnv("computername"),"-"

Problemas com DbUseArea() e NetErr()

20 Mar 2019 20:10

Boa noite pessoal!

Gostaria de uma ajuda. Preciso acelerar minha pesquisa e o dbsetfilter está um pouco lento em rede, como poderia aumentar essa velocidade.
Uso para compilação harbour 3.2 +bcc5.5. e RDD CDX Desde já agradeço.

Estou postando o trecho do meu código que trata a questão:

SETCURSOR(1)

SETCOLOR(Mcor[1])
Sombra(08,24,15,57,frame[3])
@ 10,26 SAY PADC("Procurar Por:",30) COLOR "B/W"
@ 11,26 SAY PADC(cab,30) COLOR "R*/W"
@ 13,26 GET COD PICT "@!"
READ

SETCURSOR(0)
DBSELECTAR("Pro")
INDEX ON NOMPRO+CODPRO TAG "NOM1" TO nompro1 //NOMPRO=COD // .AND. NUMERO=cNUMERO

DBSETORDER("NOM1")
DBSETFILTER( { || trim(COD) $ NOMPRO}, trim(COD) $ NOMPRO)
DBGOTOP()

IF LASTKEY() = K_ESC
SETCOLOR(cor)
RESTSCREEN(05,15,20,65,t)
dbsetfilter()
// DBGOTO(reg)
RETURN
ENDIF

if ! trim(cod) $ nompro //(cod $ nome'1_2_3')
alert("Informacao nao encontrada!!!;Pesquise Novamente !!!")
dbsetfilter()
endif

Problemas com DbUseArea() e NetErr()

20 Mar 2019 23:35

Esse vai ser difícil.
Na SIXCDX tinha um recurso de incluir tudo que é palavra no índice, mas sem sei se o Harbour faz igual, ou se esse recurso ajudaria em alguma coisa.

Problemas com DbUseArea() e NetErr()

22 Mar 2019 15:26

Um arquivo DBF pode conter hífen, iniciar com número ou sublinhado, são proibidos apenas para o ALIAS (quando não informado assumirá o mesmo nome do arquivo).
Código:
USE _CLI-01 ALIAS CLIENTE


Jairo Maia escreveu:Tem um caractere não permitido para o nome do .DBF, a saber o hífen: "-". Você tem que tratar isso.


Senhores, criem o tópico com a sua respectiva pergunta, não misturem os assuntos. Além de atrapalhar o tópico original, a sua questão ficará perdida sem ser notada.

Problemas com DbUseArea() e NetErr()

10 Abr 2019 09:10

alexlucc escreveu:Boa noite pessoal!

Gostaria de uma ajuda. Preciso acelerar minha pesquisa e o dbsetfilter está um pouco lento em rede, como poderia aumentar essa velocidade.
Uso para compilação harbour 3.2 +bcc5.5. e RDD CDX Desde já agradeço.

Estou postando o trecho do meu código que trata a questão:

SETCURSOR(1)

SETCOLOR(Mcor[1])
Sombra(08,24,15,57,frame[3])
@ 10,26 SAY PADC("Procurar Por:",30) COLOR "B/W"
@ 11,26 SAY PADC(cab,30) COLOR "R*/W"
@ 13,26 GET COD PICT "@!"
READ

SETCURSOR(0)
DBSELECTAR("Pro")
INDEX ON NOMPRO+CODPRO TAG "NOM1" TO nompro1 //NOMPRO=COD // .AND. NUMERO=cNUMERO

DBSETORDER("NOM1")
DBSETFILTER( { || trim(COD) $ NOMPRO}, trim(COD) $ NOMPRO)
DBGOTOP()

IF LASTKEY() = K_ESC
SETCOLOR(cor)
RESTSCREEN(05,15,20,65,t)
dbsetfilter()
// DBGOTO(reg)
RETURN
ENDIF

if ! trim(cod) $ nompro //(cod $ nome'1_2_3')
alert("Informacao nao encontrada!!!;Pesquise Novamente !!!")
dbsetfilter()
endif


Olá amiguinho,
Já ouviu falar da função DBSeek?
DBSetFilter é "muuuito" lento. Além de que criar um índice na hora de fazer a pesquisa, não ajuda.
O correto é criar antes e somente usá-lo na hora de pesquisar.
Abraços.
Ranier

Problemas com DbUseArea() e NetErr()

10 Abr 2019 09:18

Bom dia...

Muito estranho esse seu filtro.. é por código ou por nome ou por parte do nome.. ?

Se for por parte do nome só vai conseguir ter algum desempenho quando a tabela estiver local... se for em rede pode esquecer... aí vai ter que usar ordwildseek , pesquisa nos downloads por consultacdx, o Toledo deixou um exemplo bem funcional.

E uma dica:
Use DbclearFilter() no lugar de DbSetFilter() para limpar o filtro. Eu usava dbsetfilter() e aparecia um monte de erros aleatórios, depois que comecei a usar dbclearfilter() esses erros desapareceram...

Rubens

Problemas com DbUseArea() e NetErr()

10 Abr 2019 10:36

rubens escreveu:E uma dica:
Use DbclearFilter() no lugar de DbSetFilter() para limpar o filtro. Eu usava dbsetfilter() e aparecia um monte de erros aleatórios, depois que comecei a usar dbclearfilter() esses erros desapareceram...


#command SET FILTER TO => dbClearFilter( NIL )
#command SET FILTER TO <exp> => dbSetFilter( <{exp}>, <"exp"> )
#command SET FILTER TO <x:&> => if ( Empty( <(x)> ) ) ; dbClearFilter() ;;
else ; dbSetFilter( <{x}>, <(x)> ) ; end

Confundiu SET FILTER TO com dbSetFilter()
Isso é parte do arquivo std.ch, definição padrão do Harbour/Clipper.
Postar uma resposta