LetoDBf (fork) -> LetoDb com espinafre

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por Jairo Maia »

Porter, como está definido o comando DataPath = em seu arquivo letodb.ini?

Se estiver dessa forma DataPath = C:\ESTOQUE\, então apenas use:

Código: Selecionar todos

USE PRODUTOS.DBF EXCLUSIVE
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por porter »

Olá Jairo,
Porter, como está definido o comando DataPath = em seu arquivo letodb.ini?
Se estiver dessa forma DataPath = C:\ESTOQUE\, então apenas use:
Estou tentando entender como abrir os arquivos com o LetoDBf, o DataPath está correto, DataPath= C:\ESTOQUE.
Eu uso arquivos temporários, esses arquivos existem tanto nas estações como no servidor, se abrir o arquivo dessa forma: USE PRODUTOS.DBF EXCLUSIVE,
como o sistema vai saber se é para abrir o arquivo que está no computador local no C:\ESTOQUE, ou é para abrir o arquivo que está no F:\ESTOQUE lá no servidor, existem arquivos que preciso abri-lo localmente no C:\ESTOQUE e outros no F:\ESTOQUE, entendeu.
Obrigado.

Harbour 3.2.0 dev
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

No final coloque VIA "DBFCDX" ou "DBFNTX" para temporários local
►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 do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por Jairo Maia »

Olá Pessoal,
porter escreveu:Eu uso arquivos temporários
Não sei dizer sobre arquivos temporários, eu não uso.
porter escreveu:esses arquivos existem tanto nas estações como no servidor
As estações trabalham com arquivos independentes da rede? Desculpe mas não entendi.
porter escreveu: se abrir o arquivo dessa forma: USE PRODUTOS.DBF EXCLUSIVE,
como o sistema vai saber se é para abrir o arquivo que está no computador local no C:\ESTOQUE
Você terá que diferenciar arquivo que está local ou no servidor. Tem como, e falaremos sobre isso depois se você postar um trecho de código que um arquivo que tem que ser aberto na máquina local, e não no servidor. Tenho esse situação, tenha paciência para podermos ajudar. Poste um exemplo dessa situação e como você está tratando isso.

Nota: Se usar USE PRODUTOS.DBF EXCLUSIVE, o arquivo abero será o do servidor, desde que em seu .ini esteja como eu disse antes: DataPath = C:\ESTOQUE\
porter escreveu:existem arquivos que preciso abri-lo localmente no C:\ESTOQUE e outros no F:\ESTOQUE, entendeu.
Putz, acho que entendi. Abrir arquivo localmente é uma coisa, abrir no servidor é automático. Poste um exemplo que fica mais fácil explicar.
asimoes escreveu:No final coloque VIA "DBFCDX" ou "DBFNTX" para temporários local
Isso é definido no arquivo letodb.ini, definindo no comando Default_Driver = CDX ou NTX. Exemplo: Default_Driver = CDX
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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

A cláusula VIA é para informar qual RDD deseja utilizar,
LETO, DBFCDX ou DBFNTX

Se não informar vai utilizar o que foi definido em
RddSetDefault
►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 do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por Jairo Maia »

asimoes escreveu:A cláusula VIA é para informar qual RDD deseja utilizar,
LETO, DBFCDX ou DBFNTX
Sim. Quando mudei para o RDD LETO, também alterei todos os comandos USE, que eram poucos por esse como está no exemplo do Toledo:

Código: Selecionar todos

DbUseArea( .T.,  "LETO", PathLeto + cArqDbf,  cAlias,  .T.  )
Sintaxe:

Código: Selecionar todos

DbUseArea( [<lNewArea>]  , [<cRddName>]  , <cDatabase>  , [<cAlias>] , [<lShared>] , [<lReadonly>] , [<cCodePage>] , [<nConnection>] ) --> NIL
<lNewArea>
If .T. (true) is passed for <lNewArea>, the function selects the next unused work area before the database is opened. The default value is .F. (false), which opens the database in the current work area. If the current work area is used, all files are closed before the new database is opened.

<cRddName>
<cRddName> is an optional character string with the name of the RDD to use for opening the database file. It defaults to the return value of RddSetDefault().

<cDatabase>
This is a character string holding the name of the database file to open. It can include path and file extension. The default file extension is DBF.

<cAlias>
This is the symbolic alias name of the work area as a character string. It defaults to the file name of <cDatabase> without extension.

<lShared>
Specifying .T. (true) for <lShared> opens the database in SHARED mode. The default value depends on the SET EXCLUSIVE setting. If set to ON, <lShared> defaults to .F. (false).

<lReadonly>
Specifying .T. (true) for <lReadonly> opens the database in READONLY mode. The default value is .F. (false) which opens the file for read and write access.

<cCodePage>
This is a character string specifying the code page to use for character strings stored in the database. It defaults to the return value of HB_SetCodePage().

<nConnection>
This parameter specifies a numeric server connection handle. It is returned by a server connection function which establishes a connection to a database server, such as SR_AddConnection() of the xHarbour Builder SQLRDD. When <nConnection> is passed, the function opens a database on the server.
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por porter »

Putz, acho que entendi. Abrir arquivo localmente é uma coisa, abrir no servidor é automático. Poste um exemplo que fica mais fácil explicar.
Olá Jairo,
O arquivo ARQTEMP, está presente em todas as estações e no servidor, nele é inserido registros, e após terminar o processo, todos esses registros
do ARQTEMP, são inseridos em VENDAS, que existe somente no servidor, em seguida todos os registros de ARQTEMP são deletados, faço da seguinte forma:

Código: Selecionar todos

SELECT 2
USE C:\ESTOQUE\ARQTEMP EXCLUSIVE
APPEND BLANK
REPLACE CODIGO WITH cCODIGO
REPLACE DESCRICAO WITH cDESCRICAO
REPLACE VALOR WITH cVALOR

SELECT 3
USE F:\ESTOQUE\VENDAS SHARED

SELECT 2 ; GOTO TOP
DO WHILE !EOF()
     cCODIGO := CODIGO
     cDESCRICAO := DESCRICAO
     cVALOR := VALOR
     SELECT 3
     APPEND BLANK
     REPLACE CODIGO WITH cCODIGO
     REPLACE DESCRICAO WITH cDESCRICAO
     REPLACE VALOR WITH cVALOR
     SELECT 2
     SKIP
ENDDO
SELECT 2
DELE ALL ; PACK
Harbour 3.2.0 dev
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por Jairo Maia »

Porter, quando você falou em arquivo temporário achei que seria um arquivo criado na memória. No seu caso, ambos são arquivos físicos, apenas um deles, ARQTEMP, recebe dados temporários, mas é um arquivo físico.

Vou sugerir da forma que faço. Além do RDD LETO, coloque também o RDD DBFNTX, mantendo como padrão o RDD LETO. Exemplo:

Código: Selecionar todos

REQUEST LETO
REQUEST DBFCDX
Abaixo da Function Main coloque o RDD padrão:

Código: Selecionar todos

Function Main()
...
...
RDDSetDefault( "LETO" )
E tente dessa forma, veja se vai funcionar:

Código: Selecionar todos

SELECT 2
//USE C:\ESTOQUE\ARQTEMP EXCLUSIVE
DbUseArea( .F.,  "DBFCDX", "C:\ESTOQUE\ARQTEMP", "ARQTEMP",  .F.  )
APPEND BLANK
REPLACE CODIGO WITH cCODIGO
REPLACE DESCRICAO WITH cDESCRICAO
REPLACE VALOR WITH cVALOR

SELECT 3
//USE F:\ESTOQUE\VENDAS SHARED

// se na variavel DataPath de seu letodb.ini terminar com barra (\) use:
DbUseArea( .F.,  "LETO", "VENDAS", "VENDAS",  .T.  )

// se na variavel DataPath de seu letodb.ini estiver sem a barra no final use:
//DbUseArea( .F.,  "LETO", "\VENDAS", "VENDAS",  .T.  )

SELECT 2 ; GOTO TOP
DO WHILE !EOF()
     cCODIGO := CODIGO
     cDESCRICAO := DESCRICAO
     cVALOR := VALOR
     SELECT 3
     APPEND BLANK
     REPLACE CODIGO WITH cCODIGO
     REPLACE DESCRICAO WITH cDESCRICAO
     REPLACE VALOR WITH cVALOR
     SELECT 2
     SKIP
ENDDO
SELECT 2
ZAP
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por porter »

Jairo, realmente se trata de um arquivo físico, me expressei mal, estou fazendo alguns testes com
USE C:\ESTOQUE\ARQTEMP EXCLUSIVE VIA "DBFCDX", até agora está dando certo, mas pretendo também testar
da forma que você sugeriu, irei postando os resultados, porquê com certeza, deverão ser feito mais ajustes.

Obrigado.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por Itamar M. Lins Jr. »

Ola!
banco de dados danifica menos e os índices corrompem menos também quando ocorre por exemplo um pique de luz.
E parece que também à um ganho de velocidade na operações e outros benefícios tipo, acesso remoto/local via TcpIP, etc...

Seria isto ?
Sim.
Outra questão levantada. É abrir o DBF ou SGBD, qualquer. Podemos fazer isso, basta MUDAR no use "VIA LETO", "VIA DBFCDX"... Até "VIA SQLMIX" que abre o MariaDB, etc... Tudo junto.

Porter, com o Letodb vc não precisa mais trabalhar da forma que vc está trabalhando criando esses arquivos temporários(físico no HD) da estação. Não tem mais necessidade.
Quando lemos temporário pensamos ser um índice temporário ou na memória RAM.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por porter »

Olá,

Com esse comando, USE arqPARAM SHARED, consigo abrir esse arquivo normalmente se executar o sistema no servidor,
mas se executar o sistema na estação para acessar esse mesmo arquivo lá no servidor, está dando o erro:

Error LETO/1001 Erro de abertura: arqPARAM

Aqui, se eu tentar conectar com o IP do servidor, não conecta, somente da certo se cPath = "//localhost:2812/"
executando o sistema pela estação.

Código: Selecionar todos

cPath := "//192.168.0.202:2812/
PROCEDURE ConectaLetoDbf(cPath)
    nConect := leto_Connect( cPath)
    // Faz o teste de conexao
    IF nConect == -1
       SetColor( "GR+/B" )
	   CLS
       nRes := leto_Connect_Err()
       IF nRes == LETO_ERR_LOGIN
          alert( "Falha ao Logar" )
       ELSEIF nRes == LETO_ERR_RECV
          alert( "Error ao conectar" )
       ELSEIF nRes == LETO_ERR_SEND
          alert( "Erro de envio" )
       ELSE
          MsgExclamation( "Nao conectado ao servidor: " + cPath )
       ENDIF
       Return .F.
  	ENDIF
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

127.0.0.1 é o IP local
Na computação, o termo localhost se refere à localização do sistema que está sendo usado. É um dispositivo loopback ao qual é atribuído o endereço IP 127.0. 0.1
►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 do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por Jairo Maia »

Olá Pessoal,

No servidor, identifique qual é o IP do servidor. Uma forma simples de fazer isso é NO SERVIDOR, ir ao prompt de comando e digitar: ipconfig. Identifique o IPv4 do servidor, abra o sistema na estação, e informe o IP de onde está instalado o LetoDBf, ou seja, o IP do servidor.

Nas estações, não precisa ser instalado o LetoDBf, apenas informar o IP de onde ele está instalado.
Figura1.jpg
Figura2.jpg
Guarde essa informação como achar melhor, eu optei por guardar em um arquivo .HBV em cada estação, deixando claro que no Servidor sempre deixo o IP fixo.

Adaptado a meus sistemas. Crédito: Toledo (em exemplo postado nesse fórum).

Nota: Sempre lembrando a importante colaboração do Itamar , precursor em compartilhar dicas e informações sobre o LetoDBf.
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)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por fladimir »

Jairo ou outro colega, mesmo q não trabalhe com indice temporario, mas q esta testando ou usa o LETO, se possível fazer o seguinte teste:

Crie um rotina teste em LETO pra acessar uma tabela de clientes por exemplo
Criar um indice temporario na memoria filtrando no indice via FOR algo, tipo q nasceram em outubro ou outro filtro
Depois chame um Browse e poste os resultados

Grato.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por Jairo Maia »

Olá fladimir,

Na verdade não trabalho com índice temporário, mas dá para montar um exemplo. Se nenhum colega se antecipar, assim que puder monto e posto aqui.
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)
Responder