Discussão sobre a linguagem CA-Clipper.
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!
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
-
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.
07 Jun 2018 23:28
Obrigado Jairo, vou usar o strtran e ver se resolve.
07 Jun 2018 23:50
Resolvido Jairo !!!, Obrigado mais uma vez.
ArqD := strtran(GetEnv("computername"),"-"
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
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.
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.
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
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
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.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.