Clipper On Line • Ver Tópico - Dúvida sobre uso de DBFs em rede

Dúvida sobre uso de DBFs em rede

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Dúvida sobre uso de DBFs em rede

Mensagempor Mario Mesquita » 27 Mar 2015 10:51

Bom dia, amigos!

Ainda uso DBFs nos meus programas e ando procurando uma forma de dispensar o uso daquele caminho usando as letras de drive remoto ao configurar a rede no Windows (Z:, F:, etc.).

Mas olhando a documentação que tenho do Harbour e da HMG, parece que não tem como usar o caminho dos arquivos diretamente ("\\computador\drive\pasta").

É isso mesmo, pessoal? Não tem como chamar o arquivo sem usar aquelas letrinhas, que engessam o sistema e causam alguma confusão pois pode-se atribuir letras diferentes em cada máquina da rede.

Incrível se for assim, pois pode-se acessar as impressoras de rede, por exemplo usando "\\computador\impressora\"...

Não tem como fazer do modo que desejo?

Desde já, agradeço qualquer dica.

Abraço,
Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Pablo César » 27 Mar 2015 17:56

Oi Mário, você tentou fazer isto:

cDbf:="\\computador\drive\pasta\clientes.dbf"
Use (cDbf)

Porque tenho impressãoq ue deve funcionar. Em Clipper, você fazia assim ?

Com NETIO_CONNECT sei que dá pra usar IP.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Cavalo Marinho » 27 Mar 2015 20:45

Boa noite Mario
Use o letodb, assim você tem o servidor de banco de dados utilizando a mesma estrutura dos seus dbfs e cdx e não atem este problema de letra como você relatou, sem contar que tem até controle de transações.
vale a pena dar uma olhada.
Avatar de usuário

Cavalo Marinho
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 155
Data de registro: 01 Ago 2009 10:01
Cidade/Estado: Aracaju/Se
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Mario Mesquita » 29 Mar 2015 16:34

Boa tarde, amigos!

Pablo, nunca usei a abertura desse modo, funciona mesmo? Se for assim, posso capturar o caminho de rede e abrir as tabelas sem a famigerada letrinha do drive de rede.

Vou testar, vale a tentativa.

O uso com IP, tb nunca tentei. Mas acho que é um processo mais complicado, nunca se sabe como os clientes gerenciam suas intranets...

Cavalo Marinho, o LetoDb não roda só em Xharbour? Eu uso HMG com Harbour.

Se roda, funciona direitinho? Vc usa? Se for bom de usar, seria uma boa alternativa enquanto não migro pra SQL, uma coisa que quero fazer no futuro. Apesar de que não vejo muita vantagem de SQL em bases de pequeno porte.

Obrigado pelas dicas, volto pra dizer como resolvi a questão.

Abraço a vocês,
Mario,
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor MSDN » 30 Mar 2015 09:11

Amigo, um pequeno exemplo do que vc solicitou :

Set Default To '\\10.75.120.15\sistema\tabelas\'
- Fica como padrão para todo o sistema

Ou

public path_dbf_1 := '\\10.75.120.15\sistema\tabelas\'
public path_dbf_2 := '\\10.75.130.50\migracao\dados\'
- Atribuir o caminho das tabelas em variáveis públicas

Abraços
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Mario Mesquita » 03 Abr 2015 10:14

Bom dia, amigos.

Informo que segui a dica do Pablo e num teste de migração funcionou o uso do "\\computador\pasta". Porém tentando usar em outra operação, notei que tentando configurar o próprio computador que faz o papel do servidor não aceita diretamente essa forma, colocando o "C:\pasta\" mesmo pegando o caminho de rede, isso usando a função GETFOLDER(). Mas acho que dando o comando direto deve funcionar. Ainda vou fazer mais testes.

E usando o I.P. como sugere o MSDN? Roda certinho mesmo? É uma ideia também... E fazendo assim pelo SET DEFAULT, nem se precisa trocar os USEs dando-lhes o caminho, não é? Ele assume a pasta da maquina como o local das tabelas, certo?

E o LetoDb? Alguém usa? Funciona bem, tem vantagens?

Desde já agradeço e desejo boa semana santa a todos.

Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor yugi386 » 04 Abr 2015 00:20

O LetoDb ajuda muito sim. A única ressalva é que ele não trabalha com multi-Thread.

Exemplo de uso:

/*
Para compilar use:  hbmk2 t -lleto -lrddleto
Obs: a tabela [banco.dbf] deve estar no diretório do servidor letodb ou no path definido no arquivo letodb.ini
*/

func main()

   Local cServer := "//127.0.0.1"  // endereço do servidor(pode ser um NO-IP ou algum outro DNS)
   Local cPorta  := ":2812/"  // essa porta deve esta liberado no modem do servidor
   private cPath := cServer + cPorta   

   //dbcriar()
   REQUEST LETO
   RDDSETDEFAULT( "LETO" )
   leto_disconnect()

   IF ( leto_Connect( cServer+cPorta ) ) == -1
        alert("Não foi possivel conectar ao Servidor")
        quit
    endif

   cls
   
   use (cPath+"banco.dbf") exclusive   // acessando a tabela via leto em modo exclusivo
      do while flock() == .f.
         inkey(0.01)
      enddo
      zap
      unlock
   close
   
   gravar()   // gravando na tabela com LETODB

   leto_disconnect()

return nil

// =========================================================
function dbcriar()

   aDbf := {}
   AADD(aDbf, { "c1", "C", 20, 0 })
   AADD(aDbf, { "c2", "C", 20, 0 })
   AADD(aDbf, { "c3", "C", 20, 0 })
   DBCREATE("banco", aDbf)

return nil

// =========================================================
function gravar()
   use (cPath+"banco.dbf") shared new   // acessando a tabela via letodb em modo shared

   for ct:= 1 to 10000
      do while flock() = .f.
         inkey(0.01)
      enddo
         append blank
         replace c1 with "a" + str(ct,10)
         replace c2 with "b" + str(ct,10)
         replace c3 with "c" + str(ct,10)
      unlock

      if ct % 1000 == 0
         @10,10 say lastrec()
      endif
   next

   cls
   go top
   if flock()
      browse(01,01,24,79)
      unlock
   endif
   close

return nil


abs,

Yugi
yugi386
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 82
Data de registro: 24 Jul 2008 10:36
Cidade/Estado: Minas Gerais
Curtiu: 0 vez
Mens.Curtidas: 27 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Cavalo Marinho » 04 Abr 2015 17:21

Boa tarde
Sim, funciona e direitinho, ainda mais fiz o seguinte, num arquivo de configuração instanciei um variável chamada cConecta que tem o ip:porta (192.168.1.100:2812) se esta variável estiver preenchida eu faço o request para leto, se tiver vazia eu faço para CDX, pois tenho cliente que usa servidor linux e não conseguir ainda compilar o letodb para rodar em linux, mas eu chego lá, as vantagens são muitas: roda no servidor ou seja mesmo que uma estação saia da rede não corrompe os índices, tem controle de transação com commit e roolbak, agora tem macetes, por exemplo: você tem que liberar no firewall do servidor a porta, se não as estações não acessam o banco, aprendi isso no grito, com a configuração da variável cConecta eu posso rodar tanto com letodb como com rdd cdx normal, isso é bom para testar, já que com cdx tenho muito mais experiencia.
qualquer duvida e só falar, se eu souber ajudarei.
suporte@cavalomarinhoinformatica.com.br
Avatar de usuário

Cavalo Marinho
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 155
Data de registro: 01 Ago 2009 10:01
Cidade/Estado: Aracaju/Se
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Mario Mesquita » 08 Abr 2015 08:14

Bom dia, amigos.

Obrigado pelas dicas sobre o LetoDb. Sei que tem um tópico só pra ele em Banco de Dados. Vou dar uma nova olhada lá.

Mas parece que não é muito complicado pra instalar e administrar. Meu uso deve ser quase todo em ambiente intranet. Ele pode usar um servidor remoto via IP não é? Legal isso, pode ser útil no futuro.

E para suporte remoto, é tranquilo? Hoje em dia, isso é fundamental para atender clientes distantes da sua base.

No tópico do LetoDb tem a orientação como preparar os sistemas para usá-lo ou tem alguma documentação para orientar o programador?

Abraço,
Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Mario Mesquita » 02 Dez 2015 12:37

Boa tarde, amigos.

Upei o tópico pois estou instalando o programa em um servidor dedicado e agora as dicas dos colegas estão me valendo para configurar o acesso.

Criada a pasta, compartilhada, tudo instalado. Criado atalho, não funciona. ERROR 2, ou seja, não localizou as tabelas.

Aí pelo Windows Explorer, clico no aplicativo: Abre e roda, abrindo as tabelas.

Cravei o caminho no SET PATH: Abrindo as tabelas, fiz uma migração de dados, e indexei, funcionou. Uma consulta com Grid, ok... Mais testes virão.

Mas ficou um problema: Como deixar o caminho de rede em algo que possa pegar ao partir com o programa? Tenho uma tabela de parâmetros, mas se tentar abrir direto vai dar o ERROR 2. Pensei em uma variável armazenada em um .DAT, mas creio que de novo ele não vai localizar.

Então, pensei em pegar uma variável de ambiente, em um .INI, .SYS ou .NT para buscar o atalho do servidor, pois assim mantenho o programa flexível, senão eu teria que compilar toda hora o programa de acordo com o cliente e seu mapeamento.

Alguém já fez isso? tem como pegar uma variavél tipo o "SET CLIPPER=F235" no AUTOEXEC do CA-Clipper?

Desde já agradeço a ajuda.

Saudações,
Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor asimoes » 03 Dez 2015 07:49

As variáveis você pode por em um arquivo ini no servidor e ler o ini, por exemplo o nome do computador servidor e porta de acesso.


#include "rddleto.ch"

cIpAddServer  :=Obter_Ip_Maquina("pc-servidor")
cPortaServer  :=2812
nVezes:=1

cServidorDB:='//'+cIpAddServer+':'+cPortaServer+hb_PS()

DO WHILE Leto_Connect( cServidorDB ) == -1
     nRes := leto_Connect_Err()
     IF nVezes > 3
        Alert("Não foi possível conectar no servidor: "+cServidorDB)
       quit
     ENDIF
     nRes := leto_Connect_Err()
     IF nRes == LETO_ERR_LOGIN
        Alert("Falha no login")
        quit
     ELSEIF nRes == LETO_ERR_RECV
        Alert("Erro no servidor")
        quit
     ELSEIF nRes == LETO_ERR_SEND
        Alert("Erro de transmisão")
        quit
     ELSE
        Alert("Sem conexão com o servidor")
        quit
     ENDIF
     nVezes++
    Inkey(1)
  ENDDO

FUNCTION Obter_Ip_Maquina(cMaquina)
LOCAL aHosts := {}, cIp := "127.0.0.1", I
   hb_Default(@cMaquina, "")
   Try
      hb_InetInit()
      aHosts := hb_InetGetHosts( cMaquina )
      IF aHosts == NIL
         aHosts := hb_InetGetAlias( cMaquina )
      ENDIF
      IF Empty(aHosts)
         aHosts := hb_InetGetAlias( cMaquina )
      ENDIF
      FOR I:=1 TO Len(aHosts)
         cIp := aHosts[I]
      NEXT
      aHostIp := aHosts
      HB_InetCleanup()
   End
RETURN cIp
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Mario Mesquita » 05 Dez 2015 10:18

Bom dia, pessoal!

Asimoes, eu não uso o LetoDb ainda. Mas o ini estaria definido dentro do .CH? Eu uso os .DBFs do modo tradicional.

Aliás, ontem alguns problemas:

Em alguns momentos, o programa não quis abrir as tabelas acusando um DOS ERROR 2. Ora, mas os arquivos existem, claro. Só se ele não consegue acessar o servidor e ele procura as tabelas na maquina local.

Eu usei o SET PATH assim: SET PATH TO \\servidor\pasta. Seria recomendável usar o SET DEFAULT tb?

Para abrir as tabelas, uso assim:

DBUSEAREA( .T., "DBFCDX", "BANCOS",,  .T. )
SET INDEX TO BANCOS                   


Li que tem um SET EXCLUSIVE on, que por default as tabelas abrem em modo exclusivo e não shared. Isso pode afetar algo, mesmo abrido tudo como acima?

Meu receio é ter alguma incompatibilidade na rede, pois o servidor usa Windows 7 64 bits e as máquinas da rede são antigas com XP. Pra piorar, colocaram uma senha de acesso ao servidor que vc tem que dar ao clicar no ícone do sistema na primeira vez no dia. Será que esse Id/Senha não pode ser ativada pelo sistema ou em um .BAT, ou .INI?

Pergunta besta: Como velo clipperiro, eu coloco o .EXE na maquina servidora e nas outras atalho para esse .EXE. Seria melhor colocar uma cópia do .EXE em cada máquina usuária e aí sim, um arquivo tipo .INI que configura o acesso ao servidor?

Mais de vinte anos depois, nunca imaginei que voltaria a me preocupar com uso de tabelas em rede. Mas sim, estou preocupado pois tenho que substituir um programa em clipper por um que rode em Win 64, pois mais adiante vão trocar todas as máquinas e nem adiantar pedir Win 32 pois eles alegam que compram as maquinas prontas e isso faz com que a máquina perca a garantia...

Desde já agradeço qualquer ajuda.

Saudações,
Mario
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor asimoes » 05 Dez 2015 11:00

Uma correção do meu post:

cServidorDB:='//'+cIpAddServer+':'+cPortaServer+hb_PS()

O correto é:

cServidorDB:='//'+cIpAddServer+':'+cPortaServer+"/"
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Dúvida sobre uso de DBFs em rede

Mensagempor Paulao » 18 Abr 2016 15:10

Respondendo a pergunta do Mario Mesquita sobre o autoexec é fácil

Coloque no autoexec esta linha
Set oCaminhoDbfs = Z:\pasta do sitema\pasta do arquivo\

no seu sistema coloque

public setcaminho := alltrim(getenv("oCaminhoDbfs"))

Você também pode colocar no autoexec uma variável para identificar o terminal

Set Maq = MAQ01

No sistema capture esta variável

Public Terminal := alltrim(getenv("Maq"))
Paulao
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 183
Data de registro: 09 Jul 2004 11:03
Cidade/Estado: Franca
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Dúvida sobre uso de DBFs em rede

Mensagempor asimoes » 18 Abr 2016 15:55

O ideal é construir um acesso aos dbfs de forma segura, que não permita um usuário espertinho acessar a pasta de dados.

Tem 2 opções:

hbnetio
e
letodb

Ambos tem controle de acesso aos dbf´s com senha
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 11 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro