Jump to content
Fivewin Brasil

Erro de Lock Required


jef2_tim

Recommended Posts

Ola amigos...

Estou tendo este problema em um sistema DOS meu.. nao entendo pq esta dando issu.. a rotina de abertura e criacao e gravacao é a mesma ... esta dando este erro em um cliente meu ... so num... em rede...

Se alguem tiver alguma ideia

A funcao de rec_lock

*-------------------

FUNCTION REC_LOCK

*-------------------

PARAMETER Lretry

PRIVATE Lforever

Lretry = IF(PCOUNT() == 0,50,Lretry)

Lforever = (Lretry == 0)

DO WHILE (!RLOCK() .AND. (Lretry > 0 .OR. Lforever))

@ 23,44 SAY SPACE(35)

IF Mens_Rede("Travando Registro Arq " + Dbf(),1) == 27

EXIT

ENDIF

Lretry--

ENDDO

IF (!RLOCK())

Mens_Rede("Travamento N„o Foi Completado !",2)

RETURN .F.

ENDIF

RETURN .T.

Funcao para append blanc no bd

*-------------------

FUNCTION ADD_REC

*-------------------

PARAMETER Lretry

PRIVATE Lforever,Lorder

Lretry = IF(TYPE("Lretry") != "N",50,Lretry)

Lforever = (Lretry == 0)

Lorder = INDEXORD()

SET ORDER TO 0

DO WHILE Lretry > 0 .OR. Lforever

APPEND BLANK

IF !NETERR()

EXIT

ENDIF

@ 23,44 Say Space(35)

IF Mens_Rede("Adicionando em " + DBF() + " ESC Cancela",1) == 27

EXIT

ENDIF

Lretry--

ENDDO

SET ORDER TO Lorder

IF NETERR()

Mens_Rede("Falha ao Adicionar Registros !",2)

Close_All()

@ 23,44 SAY SPACE(35)

RETURN .F.

ENDIF

RETURN .T.

Bem... é issu ae.. valeu amigos...

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

Ola amigos...

Estou tendo este problema em um sistema DOS meu.. nao entendo pq esta dando issu.. a rotina de abertura e criacao e gravacao é a mesma ... esta dando este erro em um cliente meu ... so num... em rede...

Se alguem tiver alguma ideia

A funcao de rec_lock

*-------------------

FUNCTION REC_LOCK

*-------------------

PARAMETER Lretry

PRIVATE Lforever

Lretry = IF(PCOUNT() == 0,50,Lretry)

Lforever = (Lretry == 0)

DO WHILE (!RLOCK() .AND. (Lretry > 0 .OR. Lforever))

@ 23,44 SAY SPACE(35)

IF Mens_Rede("Travando Registro Arq " + Dbf(),1) == 27

EXIT

ENDIF

Lretry--

ENDDO

IF (!RLOCK())

Mens_Rede("Travamento N„o Foi Completado !",2)

RETURN .F.

ENDIF

RETURN .T.

Funcao para append blanc no bd

*-------------------

FUNCTION ADD_REC

*-------------------

PARAMETER Lretry

PRIVATE Lforever,Lorder

Lretry = IF(TYPE("Lretry") != "N",50,Lretry)

Lforever = (Lretry == 0)

Lorder = INDEXORD()

SET ORDER TO 0

DO WHILE Lretry > 0 .OR. Lforever

APPEND BLANK

IF !NETERR()

EXIT

ENDIF

@ 23,44 Say Space(35)

IF Mens_Rede("Adicionando em " + DBF() + " ESC Cancela",1) == 27

EXIT

ENDIF

Lretry--

ENDDO

SET ORDER TO Lorder

IF NETERR()

Mens_Rede("Falha ao Adicionar Registros !",2)

Close_All()

@ 23,44 SAY SPACE(35)

RETURN .F.

ENDIF

RETURN .T.

Bem... é issu ae.. valeu amigos...

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

Ola amigos...

Estou tendo este problema em um sistema DOS meu.. nao entendo pq esta dando issu.. a rotina de abertura e criacao e gravacao é a mesma ... esta dando este erro em um cliente meu ... so num... em rede...

Se alguem tiver alguma ideia

A funcao de rec_lock

*-------------------

FUNCTION REC_LOCK

*-------------------

PARAMETER Lretry

PRIVATE Lforever

Lretry = IF(PCOUNT() == 0,50,Lretry)

Lforever = (Lretry == 0)

DO WHILE (!RLOCK() .AND. (Lretry > 0 .OR. Lforever))

@ 23,44 SAY SPACE(35)

IF Mens_Rede("Travando Registro Arq " + Dbf(),1) == 27

EXIT

ENDIF

Lretry--

ENDDO

IF (!RLOCK())

Mens_Rede("Travamento N„o Foi Completado !",2)

RETURN .F.

ENDIF

RETURN .T.

Funcao para append blanc no bd

*-------------------

FUNCTION ADD_REC

*-------------------

PARAMETER Lretry

PRIVATE Lforever,Lorder

Lretry = IF(TYPE("Lretry") != "N",50,Lretry)

Lforever = (Lretry == 0)

Lorder = INDEXORD()

SET ORDER TO 0

DO WHILE Lretry > 0 .OR. Lforever

APPEND BLANK

IF !NETERR()

EXIT

ENDIF

@ 23,44 Say Space(35)

IF Mens_Rede("Adicionando em " + DBF() + " ESC Cancela",1) == 27

EXIT

ENDIF

Lretry--

ENDDO

SET ORDER TO Lorder

IF NETERR()

Mens_Rede("Falha ao Adicionar Registros !",2)

Close_All()

@ 23,44 SAY SPACE(35)

RETURN .F.

ENDIF

RETURN .T.

Bem... é issu ae.. valeu amigos...

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

Ola Kapi... ja estou abrindo em modo EXCLUSIVE e mesmo assim da erro... testei com SHARED tbm da o mesmo problema...

Será q no momento de gravar o registro eu tenha de dar um reclock... ? Pq na funcao de add_Rec nao tem... Talvez um rec_lock antes do append precisa sera?

*-------------------

FUNCTION ADD_REC

*-------------------

PARAMETER Lretry

PRIVATE Lforever,Lorder

Lretry = IF(TYPE("Lretry") != "N",50,Lretry)

Lforever = (Lretry == 0)

Lorder = INDEXORD()

SET ORDER TO 0

DO WHILE Lretry > 0 .OR. Lforever

APPEND BLANK

IF !NETERR()

EXIT

ENDIF

@ 23,44 Say Space(35)

IF Mens_Rede("Adicionando em " + DBF() + " ESC Cancela",1) == 27

EXIT

ENDIF

Lretry--

ENDDO

SET ORDER TO Lorder

IF NETERR()

Mens_Rede("Falha ao Adicionar Registros !",2)

Close_All()

@ 23,44 SAY SPACE(35)

RETURN .F.

ENDIF

RETURN .T.

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Editado por - jef2_tim on 27/10/2005 13:15:02

Link to comment
Share on other sites

SE VOCE VAI DAR UM APPEND, PRIMEIRO, PRECISA TRAVAR O BANCO, PARA QUE OUTROS USUARIOS NAO ACESSEM O BANCO, DEPOIS QUE APPENDEAR, VOCE LIBERA O BANCO PARA TODOS OS USUARIOS.

REVEJA A LOGICA. VEJA NO LIVRO DO VILIAN COMO FAZER.

TERCEIRO ENCONTRO DE FIVEWINNERS NOVEMBRO DE 2005 EU APOIO E VOU.

Bad Boy - São Paulo.

kmt_karinha@pop.com.br

FW 2.3C CLIPPER 5.3B BLINKER 7.0 WORKSHOP.EXE

Link to comment
Share on other sites

Jef,

Em que linha do programa está dando o erro ??

Mostre o fonte onde você chama o REC_LOCK() e também o ADD_REC()

Provavelmente, após bloquear o registro ou dar o append blank, você desviou para outro registro ou dbf.

Detalhes:

. Tem que estar SET EXCLUSIVE OFF

. Para o APPEND BLAN não precisa do RLOCK()

. Kapiaba, onde você ouviu que precisa bloquear um DBF para se dar UM ÚNICO APPEND BLANK???

Paulo/CONTATO SISTEMAS

Clipper53b / FW26 / Blinker70

Ajudar é um prazer, agradecer é uma obrigação

PRESTIGIEM O III ENCONTRO DE USUÃRIOS DE FIVEWIN - 2005

Inscreva-se: http://www.installsis.com.br/encontro

Editado por - pauloaraujo on 27/10/2005 14:08:25

Link to comment
Share on other sites

. Kapiaba, onde você ouviu que precisa bloquear um DBF para se dar UM ÚNICO APPEND BLANK???

ERREI, ENTENDI ERRADO. LI ERRADO E RESPONDI ERRADO. É UM APPEND BLANK, NAO UM APPEND FROM... SORRY PAULO E JEF.

SÓ PRECISA TRAVAR O REGISTRO. KE DUREZA! É A SEDE DE BRAHMAS. hehehehehehe.

TERCEIRO ENCONTRO DE FIVEWINNERS NOVEMBRO DE 2005 EU APOIO E VOU.

Bad Boy - São Paulo.

kmt_karinha@pop.com.br

FW 2.3C CLIPPER 5.3B BLINKER 7.0 WORKSHOP.EXE

Editado por - kapiaba on 27/10/2005 14:55:37

Link to comment
Share on other sites

Ola paulo...

O Add_Rec e o Rec_Lock as funcoes estao na mensagem acima.. acho q na primeira mesagem. Eu nao entendo... estou abrindo em modo EXCLUSIVE o SET EXCLISVE ja esta OFF ... e nao entendo pq esta dando o Lock required

*-------------------

FUNCTION REC_LOCK

*-------------------

PARAMETER Lretry

PRIVATE Lforever

Lretry = IF(PCOUNT() == 0,50,Lretry)

Lforever = (Lretry == 0)

DO WHILE (!RLOCK() .AND. (Lretry > 0 .OR. Lforever))

@ 23,44 SAY SPACE(35)

IF Mens_Rede("Travando Registro Arq " + Dbf(),1) == 27

EXIT

ENDIF

Lretry--

ENDDO

IF (!RLOCK())

Mens_Rede("Travamento N„o Foi Completado !",2)

RETURN .F.

ENDIF

RETURN .T.

Funcao para append blanc no bd

*-------------------

FUNCTION ADD_REC

*-------------------

PARAMETER Lretry

PRIVATE Lforever,Lorder

Lretry = IF(TYPE("Lretry") != "N",50,Lretry)

Lforever = (Lretry == 0)

Lorder = INDEXORD()

SET ORDER TO 0

DO WHILE Lretry > 0 .OR. Lforever

APPEND BLANK

IF !NETERR()

EXIT

ENDIF

@ 23,44 Say Space(35)

IF Mens_Rede("Adicionando em " + DBF() + " ESC Cancela",1) == 27

EXIT

ENDIF

Lretry--

ENDDO

SET ORDER TO Lorder

IF NETERR()

Mens_Rede("Falha ao Adicionar Registros !",2)

Close_All()

@ 23,44 SAY SPACE(35)

RETURN .F.

ENDIF

RETURN .T.

Estas sao as funcoes quando vou grvar um registo eu chamo

Select 1

If Add_Rec()

Replace Cod With (M_Safuni-1), Nme With Mnme

Des_Lock(2)

Endif

A funcao Des_Lock é esta

*-------------------

FUNCTION DES_LOCK

*-------------------

Parameters Desativa

If Desativa = 1

Unlock

Else

Unlock All

Endif

If Comm_Ok

Commit

Endif

valeu amigos

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

tente isso, se é que eu entendi bem.

Funcao para append blanc no bd

*-------------------

FUNCTION ADD_REC

*-------------------

PARAMETER Lretry

PRIVATE Lforever,Lorder

Lretry = IF(TYPE("Lretry") != "N",50,Lretry)

Lforever = (Lretry == 0)

Lorder = INDEXORD()

SET ORDER TO 0

DO WHILE Lretry > 0 .OR. Lforever

APPEND BLANK

IF dbRlock() // trava o registro

IF !NETERR() //verifica se não tem erro de rede

EXIT

ENDIF

ELSE

EXIT

ENDIF

@ 23,44 Say Space(35)

IF Mens_Rede("Adicionando em " + DBF() + " ESC Cancela",1) == 27

EXIT

ENDIF

Lretry--

ENDDO

SET ORDER TO Lorder

IF NETERR()

Mens_Rede("Falha ao Adicionar Registros !",2)

Close_All()

@ 23,44 SAY SPACE(35)

RETURN .F.

ENDIF

RETURN .T.

Alessandro F. Silva - Ribeirão Preto/SP

aferracini@terra.com.br

FW2.0d + CL53b + Blinker 7.0

MSN: ferracini_silva@hotmail.com

Link to comment
Share on other sites

Não, Jef

Não te pedi para mostrar novamente as funções. Pedi para você mostrar a parte do programa onde elas são chamadas.

A do ADD_REC() você mostrou e pelo que ví não tem erro. Alías, "Lock Required" não dá nem a pau no APPEND BLANK.

A do REC_LOCK() você não mostrou.

Verifique em que linha está dando o erro, que provavelmente deva ser num REPLACE. Mostre o que está antes do REC_LOCK() até o REPLACE, que eu acho que o erro está aí.

Paulo/CONTATO SISTEMAS

Clipper53b / FW26 / Blinker70

Ajudar é um prazer, agradecer é uma obrigação

PRESTIGIEM O III ENCONTRO DE USUÃRIOS DE FIVEWIN - 2005

Inscreva-se: http://www.installsis.com.br/encontro

Editado por - pauloaraujo on 27/10/2005 15:11:24

Link to comment
Share on other sites

Paulo eu estou usando desta forma

A linha de erro eu nao tenho pq nao estou no cliente q esta dando o problema, estarei indo pra la agora. tem internet la e vou ficar on aqui no forum...

Assim eu uso para incluir um registro usando a funcao ADD_REC.

Select 1

If Add_Rec()

Replace Cod With (M_Safuni-1), Nme With Mnme

Des_Lock(2)

Endif

Eu nao to usando o rec_lock aqui...

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Editado por - jef2_tim on 27/10/2005 15:11:31

Link to comment
Share on other sites

Paulo...

Por eu nao ter mandado parametro para o lretry ele esta recebendo entao 50, ou seja... ele vai tentar 50 vezes...

Ele esta entrando do Do While Porem ele da o lock no momento de gravar o registro... tanto que apos o erro, se eu abrir o banco de dados... eu vejo um novo registro criado, porem vazio... sem nenhum dado em nenhum dos campos. O interessante é q isto esta acontecendo somente em um cliente meu... os outros, q usam o mesmo sistema nao da problema algum..

bem, estou indo pra la agora... e na rede deles vou comecar a mexer e fazer testes.. e entao ficara ate mais facil para trocar ideias...

t daqui a pouco amigos...

kAPIABA..... A Forma q eu abro os bancos é desta forma

*-------------------

FUNCTION OPEN_FILE

*-------------------

PARAMETERS Lfile,Lindex,Lexcl,Lretry,Lextsys

PRIVATE Lforever,Lntx1,Lntx2,Lntx3,Lntx4,Lntx5,Lntx6,Lntx7,Lntx8,Lntx9,Lntx10

Lindex = IF(TYPE("Lindex") != "C","",Lindex)

Lretry = IF(TYPE("Lretry") != "N",10,Lretry)

Lexcl = IF(TYPE("Lexcl") != "L",F_Arqsys,Lexcl)

Lextsys = IF(TYPE("Lextsys") != "N",1,Lextsys)

Lfile = ALLTRIM(Lfile) + "." + If(Right(Alltrim(Lfile),6) = [sAFCFG],[MEM],If(Lextsys = 1,F_Extsys,Mextalm))

Lforever = Lretry == 0

IF !FILE("&Lfile")

Mens_Rede("ARQUIVO NŽO EXISTE " + Chr(26) + " " + Lfile,2)

Close_All()

RETURN .F.

ENDIF

@ 10,10 clear to 12,20

@ 11,12 say lExcl

DO WHILE (Lretry > 0 .OR. Lforever)

IF Lexcl

USE (Lfile) EXCLUSIVE

ELSE

USE (Lfile)

ENDIF

IF USED()

EXIT

ENDIF

@ 23,44 SAY SPACE(35)

IF Mens_Rede("Aguardando &Lfile.. ESC Cancela",1) == 27

EXIT

ENDIF

Lretry--

ENDDO

IF USED()

Lntx01 = Open_Indx(@Lindex) ; Lntx02 = Open_Indx(@Lindex)

Lntx03 = Open_Indx(@Lindex) ; Lntx04 = Open_Indx(@Lindex)

Lntx05 = Open_Indx(@Lindex) ; Lntx06 = Open_Indx(@Lindex)

Lntx07 = Open_Indx(@Lindex) ; Lntx08 = Open_Indx(@Lindex)

Lntx09 = Open_Indx(@Lindex) ; Lntx10 = Open_Indx(@Lindex)

Lntx11 = Open_Indx(@Lindex) ; Lntx12 = Open_Indx(@Lindex)

For Tst_Ntx = 1 To 12

Cto_Ntx = Strzero(Tst_Ntx,2)

Nme_Ntx = Alltrim(Lntx&Cto_Ntx.)

If Len(Alltrim(Nme_Ntx)) > 0

IF !FILE("&Nme_Ntx.")

Saf_Ero(5,Nme_Ntx)

Close_All()

RETURN .F.

ENDIF

Endif

Next

SET INDEX TO &Lntx01.,&Lntx02.,&Lntx03.,&Lntx04.,&Lntx05.,&Lntx06.,&Lntx07.,&Lntx08.,&Lntx09.,&Lntx10.,&Lntx11.,&Lntx12.

RETURN .T.

ELSE

@ 23,44 SAY SPACE(35)

Mens_Rede("ERRO ABERTURA ARQUIVO " + Lfile,2)

Close_All()

@ 23,44 SAY SPACE(35)

RETURN .F.

ENDIF

eu chamo esta funcao desta forma

Select 1

If !Open_File("SAFUNI","UNIRAZAO.SAF")

Return(.T.)

Endif

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Editado por - jef2_tim on 27/10/2005 15:43:08

Link to comment
Share on other sites

Ola amigos...

o problema de lock required éra pq eu estava alterando a variavel para F no meio do caminho do sistema e entao ele abria o banco sem exclusive e ae dava o problema.. ja resolvi... mas agora surgiu um outro problema que é o seguinte:

Nem sempre, mas as vezes acontece do sistema nao conseguir abrir o banco de dados quando outra maquina esta usando o banco...

DO WHILE (Lretry > 0 .OR. Lforever)

IF Lexcl

USE (Lfile) EXCLUSIVE

ELSE

USE (Lfile)

ENDIF

IF USED()

EXIT

ENDIF

@ 23,44 SAY SPACE(35)

IF Mens_Rede("Aguardando &Lfile.. ESC Cancela",1) == 27

EXIT

ENDIF

o IF USED nao esta voltando true... e entao esta dando a mensagem de rede aguardando XXXXXXX Esc cancela... ele tenta 50 vezes e nao consegue e entao sai da tela...

o interessante é q nem sempre acontece isso... tem momentos q sim... oq pode ser?

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

Eu nao consigui entender ainda.. pq o sistema funciona normal em NNN clientes em rede XP, Novel, 98, 95, e aqui neste cliente com XP nao roda...

Kapi.. a forma que estou abrindo os arquivos esta errada? Eu os abro com exclusive... e nao com shared... qual a forma correta de se abrir os meus bancos de dados para que isso nao ocorra... será q pode haver algo com algum tipo de configuracao de rede?

valeu

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

SHARED, É QUANDO TODOS OS USUARIOS PODEM USAR.

EXCLUSIVE, É QUANDO APENAS UM USUÃRIO PODE USAR.

MAS, SE VOCE DIZ, QUE EM ALGUNS LUGARES FUNCIONA, E QUE SOMENTE EM UM CLIENTE, NAO, VERIFIQUE AS CONFIGURACOES DO ATUOEXEC.NT E CONFIG.NT E SE VOCE COPIOU O COMMAND.COM PARA O DIRETORIO RAIZ -> C:\

Abraços.

TERCEIRO ENCONTRO DE FIVEWINNERS NOVEMBRO DE 2005 EU APOIO E VOU.

Bad Boy - São Paulo.

kmt_karinha@pop.com.br

FW 2.3C CLIPPER 5.3B BLINKER 7.0 WORKSHOP.EXE

Link to comment
Share on other sites

Jef,

Como você disse, o sistema está instalado em outros clientes, sem qualquer problema, certo???

Tá me cheirando problemas na rede. Peça para o responsável por ela verificar placas com velocidades diferentes, cabos, virus, instalação elétrica, usuários desligando o micro com o pé e o sistema no ar, etc.

Agora, não me conformei com a sua resposta sobre o "lock required". Fala sério, esse erro dá na inclusão??? Nessa rotina que você mostrou aqui??? Como???

Um abraço

Paulo/CONTATO SISTEMAS

Clipper53b / FW26 / Blinker70

Ajudar é um prazer, agradecer é uma obrigação

PRESTIGIEM O III ENCONTRO DE USUÃRIOS DE FIVEWIN - 2005

Inscreva-se: http://www.installsis.com.br/encontro

Link to comment
Share on other sites

Ola paulo ...

Sim o erro da na inclusao de dados...

Ontem, no cliente, eu alterei a forma de abrir os bancos de dados... na rotina Open_File que postei, eu alterei a primeira linha do USE para SHARED, e a segunda USE para Exclusive... Entao funcionou normalmente... agora estou alterando alguns bancos de dados temporarios para chamar a opcao EXCLUSIVE que de uns errinhos pois eles nao podem ser compartilhados e estao sendo.. ae estou alterando...

Eu nao tenho muiiito conhecimento de programacao pra rede e tal... mas eu tbm fiquei perdido pq ... funciona normal em todo mundo usando o USE exclusive... Eu tbm acho q é rede mas la neste cliente é complicado pq pelo meu pouco conhecimento de rede eu teria de provar que é rede entao achei mais facil localizar uma forma de usar o sistema na rede deles...

Inclusive paulo... se vc puder me dar uma ideia de uma rotina de abertura de arquivos compartilhados e nao compartilhados... seria legal.. pq na instalacao do sistema eu digo se é MONO ou MULTI usuario... queria ver pq talvez esta rotina minha nao esteja muito certa....

Bem... é issu ae... valeu manos... um xharbraco... e se puder me dar uma dica ae de abertura dos arquivos... até mesmo baseado na forma q eu uso.. no open_file seria legal..

flow tches

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

Vou postar aqui a que eu uso icon_smile_big.gif

/**************************************************************************/

/* Programa de Tratamento de Arquivos para Multiusuario ou Mono Usuario */

/* Programador - Vagner Wirts */

/* Programa - Abre_Arq.Prg - Desenvolvimento 03/97 */

/**************************************************************************/

//

#Include "FiveWin.Ch"

/*---- Funcao Abre Arquivos ----*/

/* cArqui = Nome do Arquivo */

/* cIndex = Nome do Indice */

/* cAlias = Alias do Arquivo */

/*------------------------------*/

Func Abre(cArqui,cIndex,cAlias)

Local lRet_ := .F.

Local nTecla,aOp,nXx,lOk,aInd_1,nQtde := 0

Local lMens

Local cDrive := DbSetDriver()

lOk := .T.

If ValType(cIndex) # "U"

If !File(cIndex+Iif(cDrive=="DBFCDX".or.cDrive=="ADS",".Cdx",".Ntx"))

lOk := .F.

Endif

Endif

If !lOk

MsgAlert("Faça a Reorganização do Arquivo"+CRLF+cArqui,"Atenção !!")

Close Data

Else

If ValType(cAlias) == "U" ; cAlias := cArqui ; Endif

If Select(cAlias) # 0

Sele &cAlias

Close

Endif

lMens := .T.

Do Whil .T.

DbUseArea(.T.,Iif(cDrive=="DBFCDX","DbfCdx","ADS"),cArqui,cAlias,.T.)

If Used()

lRet_ := .T.

Exit

Endif

Enddo

If lRet_

Sele &cAlias

DbSetIndex(cIndex)

Endif

Endif

Rele aInd_,cArqui,cIndex,cAlias

Retu(lRet_)

/*---- Funcao para Trava Registro em Multi-Usuario ----*/

Func Trava()

Local nTrava_Tec,lTrava_Par := .F.

Do Whil (!Rlock())

nTrava_Tec := Inkey(0.01)

If nTrava_Tec == 27 ; lTrava_Par := .T. ; Exit ; Endif

Enddo

Retu(lTrava_Par)

/*---- Procedimento para Adicionar Registros em Multi-Usuario ----*/

Proc Adiciona()

Do Whil .T.

DbAppend()

If ! NetErr() ; Exit ; Endif

Enddo

Retu("")

/*---- Funcao para Eliminar Registros ----*/

Func Elimina()

Local lSn := MsgYesNo("Confirme a Exclusão ?")

Local lRe := .F.

If lSn

If !Trava() ; Dele ; lRe := .T. ; Endif

Unlock

Endif

Retu(lRe)

/*---- Funcao do XSetFocus() ----*/

Func XSetFocus(oObj)

Local oTempo := ""

Define Timer oTempo Interval 10 Of oObj:oWnd Action (oObj:SetFocus(),oObj:SetPos(0),oTempo:Deactivate())

Activate Timer oTempo

Retu("")

Como Usar :

Abertura do Arquivo, se retornar .T. - Abriu, caso contrário não conseguiu abrir

lOk1 := Abre(oSistema:cServidor__+oSistema:cArqu_Geral+".Dbf\Vendedor",oSistema:cServidor__+oSistema:cArqu_Geral+".Cdx\Vendedor","Vendedor")

Para Adicionar Registros

Adiciona()

Repl ....

Unlock

Para Travar o Registro para poder gravar :

Ele retorna .T. ->Não Travou, .F. ->Travou

If !Trava()

Repl ...

Endif

Unlock

Para Eliminar, (Nem me lembrava que tinha isso (heheheeh))

If !Elimina()

Registro nao pode ser eliminado

Endif

Vagner Wirts

Clipper 5.2 Lib 5.3 - Blinker 5.0 FW 2.0, Harbour 43.0 (Flex), xHarbour 99.1 99.2 99.3 (Simplex) FW 2.5 icon_smile_big.gif

Link to comment
Share on other sites

citação:

Vou postar aqui a que eu uso icon_smile_big.gif

/**************************************************************************/

/* Programa de Tratamento de Arquivos para Multiusuario ou Mono Usuario */

/* Programador - Vagner Wirts */

/* Programa - Abre_Arq.Prg - Desenvolvimento 03/97 */

/**************************************************************************/

//

#Include "FiveWin.Ch"

/*---- Funcao Abre Arquivos ----*/

/* cArqui = Nome do Arquivo */

/* cIndex = Nome do Indice */

/* cAlias = Alias do Arquivo */

/*------------------------------*/

Func Abre(cArqui,cIndex,cAlias)

Local lRet_ := .F.

Local nTecla,aOp,nXx,lOk,aInd_1,nQtde := 0

Local lMens

Local cDrive := DbSetDriver()

lOk := .T.

If ValType(cIndex) # "U"

If !File(cIndex+Iif(cDrive=="DBFCDX".or.cDrive=="ADS",".Cdx",".Ntx"))

lOk := .F.

Endif

Endif

If !lOk

MsgAlert("Faça a Reorganização do Arquivo"+CRLF+cArqui,"Atenção !!")

Close Data

Else

If ValType(cAlias) == "U" ; cAlias := cArqui ; Endif

If Select(cAlias) # 0

Sele &cAlias

Close

Endif

lMens := .T.

Do Whil .T.

DbUseArea(.T.,Iif(cDrive=="DBFCDX","DbfCdx","ADS"),cArqui,cAlias,.T.)

If Used()

lRet_ := .T.

Exit

Endif

Enddo

If lRet_

Sele &cAlias

DbSetIndex(cIndex)

Endif

Endif

Rele aInd_,cArqui,cIndex,cAlias

Retu(lRet_)

/*---- Funcao para Trava Registro em Multi-Usuario ----*/

Func Trava()

Local nTrava_Tec,lTrava_Par := .F.

Do Whil (!Rlock())

nTrava_Tec := Inkey(0.01)

If nTrava_Tec == 27 ; lTrava_Par := .T. ; Exit ; Endif

Enddo

Retu(lTrava_Par)

/*---- Procedimento para Adicionar Registros em Multi-Usuario ----*/

Proc Adiciona()

Do Whil .T.

DbAppend()

If ! NetErr() ; Exit ; Endif

Enddo

Retu("")

/*---- Funcao para Eliminar Registros ----*/

Func Elimina()

Local lSn := MsgYesNo("Confirme a Exclusão ?")

Local lRe := .F.

If lSn

If !Trava() ; Dele ; lRe := .T. ; Endif

Unlock

Endif

Retu(lRe)

/*---- Funcao do XSetFocus() ----*/

Func XSetFocus(oObj)

Local oTempo := ""

Define Timer oTempo Interval 10 Of oObj:oWnd Action (oObj:SetFocus(),oObj:SetPos(0),oTempo:Deactivate())

Activate Timer oTempo

Retu("")

Como Usar :

Abertura do Arquivo, se retornar .T. - Abriu, caso contrário não conseguiu abrir

lOk1 := Abre(oSistema:cServidor__+oSistema:cArqu_Geral+".Dbf\Vendedor",oSistema:cServidor__+oSistema:cArqu_Geral+".Cdx\Vendedor","Vendedor")

Para Adicionar Registros

Adiciona()

Repl ....

Unlock

Para Travar o Registro para poder gravar :

Ele retorna .T. ->Não Travou, .F. ->Travou

If !Trava()

Repl ...

Endif

Unlock

Para Eliminar, (Nem me lembrava que tinha isso (heheheeh))

If !Elimina()

Registro nao pode ser eliminado

Endif

Vagner Wirts

Clipper 5.2 Lib 5.3 - Blinker 5.0 FW 2.0, Harbour 43.0 (Flex), xHarbour 99.1 99.2 99.3 (Simplex) FW 2.5 icon_smile_big.gif


id=quote>id=quote>

MILAGRE! MILAGRE! MILAGRE! ATÉ QUE ENFIM, ENTENDI ALGUMA KOISA QUE O VAGNER ESCREVEU... hehehehehehe

TERCEIRO ENCONTRO DE FIVEWINNERS NOVEMBRO DE 2005 EU APOIO E VOU.

Bad Boy - São Paulo.

kmt_karinha@pop.com.br

FW 2.3C CLIPPER 5.3B BLINKER 7.0 WORKSHOP.EXE

Link to comment
Share on other sites

uauauauuaua Kapi c é flórida.. uauauauauauuauaua

Vag... eu estou tendo um problema q nao estou entendendo...

Eu crio um temporario que recebe produtos da minha venda, eu posso incluir e excluir estes produtos... o interessante é q nao hora q vou excluir um produto da lista ele me pede para usar modo exclusivo... eu nao entendo pq tenho de usar mdo exclusivo neste caso...

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...