Dúvida sobre uso de DBFs em rede
Moderador: Moderadores
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Dúvida sobre uso de DBFs em rede
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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Dúvida sobre uso de DBFs em rede
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.
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.
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.
- Cavalo Marinho
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 01 Ago 2009 10:01
- Localização: Aracaju/Se
Dúvida sobre uso de DBFs em rede
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.
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.
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Dúvida sobre uso de DBFs em rede
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,
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,
Dúvida sobre uso de DBFs em rede
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
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
Marcelo Neves
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Dúvida sobre uso de DBFs em rede
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.
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.
Dúvida sobre uso de DBFs em rede
O LetoDb ajuda muito sim. A única ressalva é que ele não trabalha com multi-Thread.
Exemplo de uso:
abs,
Yugi
Exemplo de uso:
Código: Selecionar todos
/*
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
Yugi
- Cavalo Marinho
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 01 Ago 2009 10:01
- Localização: Aracaju/Se
Dúvida sobre uso de DBFs em rede
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
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
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Dúvida sobre uso de DBFs em rede
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.
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.
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Dúvida sobre uso de DBFs em rede
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.
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.
Dúvida sobre uso de DBFs em rede
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.
Código: Selecionar todos
#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)
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)
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Dúvida sobre uso de DBFs em rede
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:
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
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:
Código: Selecionar todos
DBUSEAREA( .T., "DBFCDX", "BANCOS",, .T. )
SET INDEX TO BANCOS
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
Dúvida sobre uso de DBFs em rede
Uma correção do meu post:
cServidorDB:='//'+cIpAddServer+':'+cPortaServer+hb_PS()
O correto é:
cServidorDB:='//'+cIpAddServer+':'+cPortaServer+"/"
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)
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)
Dúvida sobre uso de DBFs em rede
Respondendo a pergunta do Mario Mesquita sobre o autoexec é fácil
Coloque no autoexec esta linha
Coloque no autoexec esta linha
Código: Selecionar todos
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"))
Dúvida sobre uso de DBFs em rede
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
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)
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)

