Bom dia amigos, ja algum tempo mudei todas as minhas aplicações de clipper para harbour modo console (ainda) e está rodando 100% em Windows, acontece que um cliente está sendo obrigado a trocar parte da plataforma dele para linux, um servidor linux e estações linux e algumas windows por motivo de força maior, instalei algumas estações linux e com o WINE estou rodando minha aplicação compilada para windows, roda certinho até eu descobrir que nao consigo bloquear registros para gravação, cenário mais comum: estou com os arquivos aberto e mando indexar a base de dados, faço um teste antes mas o teste retorna falso, e aí indexa os arquivos como se tivesse sido aberto em modo exclusivo (ISSO NO WINDOWS RODA PERFEITO). Alguém tem uma luz? :% :%
Desde já agradeço a atenção:
Bloqueio de registro em rede com linux
Moderador: Moderadores
- Cavalo Marinho
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 01 Ago 2009 10:01
- Localização: Aracaju/Se
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Bloqueio de registro em rede com linux
Tente assim:
Código: Selecionar todos
Function Exemplo
//
// Exemplo de uso da função NET_REG
if .not. Arquivo->(dbseek(chave))
Arquivo->(dbappend())
//...(seu código aqui) gerar chave, etc...
endif
if .not. net_reg()
mensagem("Nao foi possivel incluir registro no arquivo",, 0)
return false
endif
Replace Arquivo->campo1 with OutroArquivo->campo1,;
Arquivo->campo2 with OutroArquivo->campo2
Arquivo->(dbunlock())
Arquivo->(dbcommit())
Return true
Function NET_REG(limite)
local savtela
local xvezes
local msgaviso
local windx
local wcontador
default limite to 0 // se limite > 0, aguarda N segundos e volta
// se limite == 0 fica aguardando
CLEAR TYPEAHEAD
savtela := savescreen(0, 0, maxrow(), maxcol())
savcolor := setcolor()
xvezes := 0
wcontador := 0
msgaviso := "Aguardando para gravar registro no arquivo " + alltrim(alias(select()))
do while true
if Rlock() // Se conseguir bloquear o registro
restscreen(0, 0, maxrow(), maxcol(), savtela)
return true // Retornar...
endif
//
if (xvezes < 6)
xvezes++
inkey(0.5)
loop
endif
aguarde(msgaviso) \\ janela padrão de Aguarde
mensagem(msgaviso) \\ rotina padrão de mensagem rodapé
@ maxrow()-1,00 say padc(msgaviso + ". Tecle ESC para interromper")
if inkey(0.5) = K_ESC // aguarda 0.5 segundo
setcolor(savcolor)
restscreen(0, 0, maxrow(), maxcol(), savtela)
return false
endif
wContador++
if limite > 0 .and. ; // se for informado limite
wContador > limite // aguarda o tempo especificado
restscreen(0, 0, maxrow(), maxcol(), savtela)
return false // aviso de erro. Nao bloqueou
endif
//
enddo
restscreen(0, 0, maxrow(), maxcol(), savtela)
return(true)
Function mensagem(vMsg, vJust, vtempo, vLinha, vTom)
// Apresenta mensagem padrao no rodape da tela ou na linha informada
// Se for informado TEMPO, faz pausa pelo tempo especificado
// Se for informado TOM, soa um sinal.
local savcolor
public cRealce := "W+/R,N/W,,,W+/R"
default vMsg to ""
default vJust to "E"
default vTempo to nil
default vLinha to maxrow()
default vTom to false
savcolor := setcolor()
vJust := upper(vJust) // padroniza parametro
if empty(vMsg)
setcolor("GR+/B")
else
setcolor(m->cRealce)
endif
do case
case vJust = "E"
@ vLinha, 0 say padr(vMsg, maxcol()+1)
case vJust = "C"
@ vLinha, 0 say padc(vMsg, maxcol()+1)
case vJust = "D"
@ vLinha, 0 say padl(vMsg, maxcol()+1)
endcase
if vTom
tone(440,1)
endif
if vTempo <> NIL
inkey(vTempo)
endif
setcolor(savcolor)
return
Function Aguarde(mensagem, linha, cor)
// Mostra mensagem hh:mm:ss aguarde...
//
local wcoli
local wlinf
local wcolf
local tammsg := 0
local savcolor
public cRealce := "W+/R,N/W,,,W+/R"
default linha to (maxrow()/2)-3
default cor to m->cRealce
savcolor := setcolor()
setcolor(m->cRealce)
mensagem := time() + " " + alltrim(mensagem)
tammsg := (maxcol() - (len(alltrim(mensagem)))) / 2
wlinf := linha + 3
wcoli := tammsg - 2
wcolf := (maxcol() - tammsg) + 1
janela(linha, wcoli, wlinf, wcolf, mensagem,, false, cor)
@ linha +2, wcoli+ 2 say mensagem
setcolor(savcolor)
return(NIL)
==================================================================
- Cavalo Marinho
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 01 Ago 2009 10:01
- Localização: Aracaju/Se
Bloqueio de registro em rede com linux
Boa tarde Kapiaba
Eu já trabalho com rede a muito tempo, e é assim mesmo que faço, no windows funciona 100%, o meu problema é que com estações linux Ubuntu rodando com WINE o sistema nao respeita os bloqueios:
Ex.: em uma estacão windows ou linux eu bloqueio um registro, se uma outra estacão linux for testar se o registro está bloqueado ela simplesmente ignora o bloqueio feito pela primeira estacão, mais alem, se eu abrir em modo exclusivo na estacão 1 não deveria abrir o arquivo em qualquer outra estacão, faço os testes com neterr(), reforçando tudo funciona perfeito nas estações windows com servidor linux ou windows, mas ao abrir nas estacoes linux surge o problema.
Eu já trabalho com rede a muito tempo, e é assim mesmo que faço, no windows funciona 100%, o meu problema é que com estações linux Ubuntu rodando com WINE o sistema nao respeita os bloqueios:
Ex.: em uma estacão windows ou linux eu bloqueio um registro, se uma outra estacão linux for testar se o registro está bloqueado ela simplesmente ignora o bloqueio feito pela primeira estacão, mais alem, se eu abrir em modo exclusivo na estacão 1 não deveria abrir o arquivo em qualquer outra estacão, faço os testes com neterr(), reforçando tudo funciona perfeito nas estações windows com servidor linux ou windows, mas ao abrir nas estacoes linux surge o problema.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Bloqueio de registro em rede com linux
Opa, eu acho que ai, é melhor você perguntar diretamente no forum de Linux:
https://www.vivaolinux.com.br/
Pode ser algum problema com seu Linux ou falta de alguma coisa do Linux. Por isso que eu adoro Windows. kkkkkk
Abs.
https://www.vivaolinux.com.br/
Pode ser algum problema com seu Linux ou falta de alguma coisa do Linux. Por isso que eu adoro Windows. kkkkkk
Abs.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Bloqueio de registro em rede com linux
Olá Pessoal,
Eu tenho um "pitaco" nessa questão. Não trabalho com Linux, mas apenas o seguinte:
Nas estações Windows, o executável é para Windows, e nas estações Linux para linux, é isso? Se sim, então um não reconhecerá mesmo quando um arquivo ou registro for bloqueado pelo outro.
Tenho em mente que cada um aloca essa informação e interage diferente. Apenas palpite...
Eu tenho um "pitaco" nessa questão. Não trabalho com Linux, mas apenas o seguinte:
Nas estações Windows, o executável é para Windows, e nas estações Linux para linux, é isso? Se sim, então um não reconhecerá mesmo quando um arquivo ou registro for bloqueado pelo outro.
Tenho em mente que cada um aloca essa informação e interage diferente. Apenas palpite...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- Cavalo Marinho
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 01 Ago 2009 10:01
- Localização: Aracaju/Se
Bloqueio de registro em rede com linux
Boa tarde Jairo
Não é bem isso, nas estações linux também é o executável para windows trabalhando com o WINE responsável por rodar programas windows/dos dentro da plataforma linux, o programa roda certinho exceto pelos bloqueios de arquivos e registros em rede, não sei o que ocorre, sé é alguma coisa no samba já que usamos uma pasta compartilhada no servidor (Linux). agora estou em busca de um letodb ou netio para linux já que o servidor é linux, para realizar testes e ver como se comporta, se alguém tiver opinião sobre estes dois por favor se pronuncie.
Não é bem isso, nas estações linux também é o executável para windows trabalhando com o WINE responsável por rodar programas windows/dos dentro da plataforma linux, o programa roda certinho exceto pelos bloqueios de arquivos e registros em rede, não sei o que ocorre, sé é alguma coisa no samba já que usamos uma pasta compartilhada no servidor (Linux). agora estou em busca de um letodb ou netio para linux já que o servidor é linux, para realizar testes e ver como se comporta, se alguém tiver opinião sobre estes dois por favor se pronuncie.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Bloqueio de registro em rede com linux
Ola!
Se não usa lib gráfica, melhor opção é usar tudo no Linux.
Nas máquinas com windows vc usa o SSH ou Telnet...
Mas se quer saber o que é, vc precisa ajustar o SAMBA e Wine as opções de Optismisc Looking... não sei se é assim que se escreve, faz tempo que não mexo no Linux... No LINUX não existe arquivo/registro exclusivo, tudo está em SHARED MODE!
Saudações,
Itamar M. Lins Jr.
Se não usa lib gráfica, melhor opção é usar tudo no Linux.
Nas máquinas com windows vc usa o SSH ou Telnet...
Mas se quer saber o que é, vc precisa ajustar o SAMBA e Wine as opções de Optismisc Looking... não sei se é assim que se escreve, faz tempo que não mexo no Linux... No LINUX não existe arquivo/registro exclusivo, tudo está em SHARED MODE!
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.