Página 2 de 3

Acessar base de dados

Enviado: 11 Mar 2019 16:15
por Giovany Vecchi
Desde 2014 faço conexão por internet nos meus clientes. Uso Ads AIS (Advantage Internet Server) com dicionario de dados e tabelas ADT. A velocidade é impressionante. Uso comandos SQL e recursos API com advantage.
Se Voce usa dbf fica facil a migração.

Se quiser testar e acessar um pequeno exemplo aqui no meu notebook com windows 7 que uso para servidor de ftp baixe o programa aqui:
https://filebin.net/7qjgcz8gkxrrwbmf/Sa ... t=1fs0ixpa

A classe tAds aqui:
https://github.com/giovanyvecchi/tAdsGit.git

Qualquer duvida me chame no skype
giovany.vecchi

Acessar base de dados

Enviado: 11 Mar 2019 18:16
por Itamar M. Lins Jr.
Ola!
Uso o LetoDB desde quando ainda não estava totalmente funcional e ainda continua com alguns bugs.
Mas o LetoDb[f] está muito estável. Muita gente está usando no mundo todo, alguns até querendo Pagar o Elch pelo excelente trabalho, e foi um trabalho que o Elch fez, em cima, ou em conjunto com o trabalho do Alexander Kresin...
Use o LetoDBf do Elch.
Não use ALIAS, quando for "MEXER" com índices, o servidor não enxerga as variáveis do lado CLIENTE.

Abra outro tópico na sessão de Banco de Dados, já que o assunto mudou.
Não desista, assim como eu e muitos Outros que trabalhamos com o Harbour, Letodb[f], CGI etc... Funciona e muito bem, apesar de lermos vez ou outra comentários desanimadores... Mas aqui é forum de aprendizado(programação), mostrando nossos códigos, perguntando e o nosso sucesso, procurando melhorar a comunidade do PCTOLEDO, atenção redobrada aos INTERMEDIÁRIOS, pois esses só estão aqui pelo $$$$ só isso.
Melhor DOCUMENTO que existe são os códigos dos que ajudam a comunidade Harbour.

Talvez em HTML+ Harbour seja até mais fácil resolver seu problema do que vc está imaginando. E vai disponibilizar seus pedidos até para celulares...

Saudações,
Itamar M. Lins Jr.

Acessar base de dados

Enviado: 11 Mar 2019 20:42
por Giovany Vecchi
Uma listagem usando Ads WebServer.
Neste exemplo não esta usando nenhum framework.
Apenas dados. O retorno esta defnido em json. copie o endereço e cole no Mozila Firefox, o Firefox tem tratamento de dados json.

http://usuario:123@168.205.46.26:6272/a ... ormat=json

Acessar base de dados

Enviado: 12 Mar 2019 00:22
por Nascimento
Itamar M. Lins Jr. disse: Use o LetoDBf do Elch.
Não use ALIAS, quando for "MEXER" com índices, o servidor não enxerga as variáveis do lado CLIENTE.
nobre Itamar vc poderia ser mais claro neste ponto?, estou estudando o letodbf, e ainda estou apanhando bastante em algumas coisas...

Acessar base de dados

Enviado: 12 Mar 2019 09:50
por Itamar M. Lins Jr.
Ola!
Variáveis da aplicação cliente, não são vistas pelo servidor, é assim com qualquer SGBD.
Por exemplo:

Código: Selecionar todos

use clientes alias cli
Esse alias "cli" não é visto pelo servidor na hora de indexar.
index on cli->nome ... Esse alias "cli" está fora, foi "criado" "lá na maquina" CLIENTE.
forma correta:

Código: Selecionar todos

select cli
index on field->nome...

Código: Selecionar todos

index on dtos(nascido) for nascido >= dInicial .and. nascido <= dFinal
As variáveis dInicial e dFinal, não existem do lado do servidor, portando vai acontecer um erro.
Como resolver ?

Código: Selecionar todos

Local cQuery := dtos(field->nascido)  ' >=  " ' + dtos(dInicial) + ".and." + ' <= " ' + dtos(dFinal) + " ' "
index on dtos(nascido) for &cQuery
É assim com qualquer SGBD, não podemos usar VARIÁVEIS, que não estão na memória lá do servidor LETODB.
e ainda estou apanhando bastante em algumas coisas...
Basta especificar mais seus problemas, e também se eu souber explicar, blz!

Saudações,
Itamar M. Lins Jr.

Acessar base de dados

Enviado: 15 Mar 2019 11:54
por Nascimento
tamar disse : Basta especificar mais seus problemas, e também se eu souber explicar, blz!
I

um deles é tipo quando apago os indices e abro o programa, ele recria normalmente porem quando vou digitar a senha de operador não acha é como se não usasse o indice recém-criado eu tenho que fechar o programa e abrir novamente assim fica tudo normal

segue abaixo o modo uma parte do .prg que uso para criar os indices

Código: Selecionar todos


// modo de uso
    if (!net_use("OPERADOR", "OPE", "OPERADOR"))
      quit
   endif 

#ifdef _LETO
   #include "rddleto.ch"   
#endif   
Function Net_use()
  parameters cFiledbf,cAlias,cFilecdx,lexcl,lretry
  private lforever
  private aFilecdx
  private bFilecdx
  private bFiledbf
  private nomearq
  lretry   := iif(type("lretry") != "N",500,lretry)
  lexcl    := iif(type("lexcl") != "L",.F.,lexcl)
  lforever := lretry == 0
  bFiledbf:= cFiledbf+'.DBF'  
  cFiledbf := PathLeto+cFiledbf+'.DBF'
  aFilecdx:= cFilecdx+".CDX"
  bFilecdx:= cFilecdx                    //"MCOCUP"
  cFilecdx := PathLeto+cFilecdx+'.CDX'  //"MCOCUP.CDX" 
  #ifdef _LETO
     cDriver := "LETO"
  #else
     cDriver := "DBFCDX"
  #endif	
  if !vFile(bFiledbf)
      msginfo("VERIFIQUE SE O SERVIDOR ESTA LIGADO OU A CONEXAO ESTA ATIVA  "+bFiledbf)
     quit
  endif   
  protect (bFiledbf,"D")
  do while (lretry > 0 .or. lforever)
     if (lexcl)
        DbUseArea( .T., cDriver, cFiledbf, cAlias,  .F.  )
     else 
        DbUseArea( .T., cDriver, cFiledbf, cAlias,  .T.  )
*        msgdebug(cfiledbf)
     endif
     if (Used())
        exit
     endif
     lretry =- 1
  enddo
if (Used())
     *-------------------------------------------
     if (bFilecdx = "OPERADOR")  // observo que cria normalmente esse indice mais é como se não abrisse pra uso ou não atualizasse s
        if (!vFile(aFilecdx))          // o quando fecho e abro o aplicativo novamente fica tudo normal!
           nomearq := bFilecdx            
           index on codigo tag operador to (cFilecdx)
           index on nome tag nomeoper to (cFilecdx)           
        endif
        DbSetIndex( cFileCdx )
     endif

endif




Acessar base de dados

Enviado: 15 Mar 2019 13:09
por Jairo Maia
Olá Nascimento,
Nascimento escreveu:é como se não usasse o indice recém-criado
Estranho mesmo... Tente fazer esse teste modificando essa parte:

Código: Selecionar todos

if (bFilecdx = "OPERADOR")  // observo que cria normalmente esse indice mais é como se não abrisse pra uso ou não atualizasse s
   if (!vFile(aFilecdx))          // o quando fecho e abro o aplicativo novamente fica tudo normal!

      /////////////////////////////////////////////////////////////
      DbClearIndex()          // fecha todos os índices dessa área
      FileDelete( cFileCdx )  // apaga o arquivo de índices antigo
      /////////////////////////////////////////////////////////////

      nomearq := bFilecdx            
      index on codigo tag operador to (cFilecdx)
      index on nome tag nomeoper to (cFilecdx)           
   endif
   DbSetIndex( cFileCdx )
endif

Acessar base de dados

Enviado: 15 Mar 2019 14:20
por Nascimento
amigo jairo , lembre-se que é quando eu excluo todos os indices!, e o sistema cria os novos , como falei a cima eu boto codigo diz operador nao encontrado
então fecho e abro novamente , ja funciona normal, dai pra frente é tudo normal inclusão de operadores, exclusão em fim fica tudo certo

mais so na segunda abertura do soft após criar os indices

cenario: apago os indices abro o sistema , o sistem a recria os indices e por sua vez, não acha o operador "codigo inesistente operador não encontrado"
fecho o sistema "lembre-se que os indices ja foram criados", reabro o sistema pronto tudo normal!

essa parte que tem !vFile(blabla)

é esse trecho de codigo, para compatibilizar usando o letodb ou não , o #ifdef eu uso muito em .C como tambem pode ser usado no clipper e harbour
se não me engano em outras linguagens tambem, ajuda muito , pra vc não ter que esta fazendo 2 codigos fontes em um so vc tem 2 versões ou varias dependendo

Código: Selecionar todos

Function vFile()
  Parameters aFile
  local lReturn := .t.
  #ifdef _LETO	 
    lReturn := Leto_File(aFile)  
  #else
     aFile:= PathLeto+aFile
    lReturn := File(aFile)
  #endif  
Return (lReturn)

	  


Acessar base de dados

Enviado: 15 Mar 2019 14:46
por Jairo Maia
Nascimento escreveu:#ifdef eu uso muito em .C como tambem pode ser usado no clipper e harbour
Sim, sem problemas. Mas vamos então entender algo que para mim ficou confuso nas diretivas ao compilador. Vou comentar seu fonte:

Código: Selecionar todos

Function vFile()
  Parameters aFile
  local lReturn := .t.
  #ifdef _LETO    // se a diretiva informa que uso LETO, compile isso...
    lReturn := Leto_File(aFile)  
  #else  // senão, então não uso LETO, então compile isso...
     aFile:= PathLeto+aFile  // aqui fica confuso... porque PathLeto se vc não usa leto nesse trecho?
    lReturn := File(aFile)
  #endif  
Return (lReturn)
O problema ocorre quando usa LETO ou quando não usa LETO?

Acessar base de dados

Enviado: 15 Mar 2019 15:14
por Nascimento
O problema ocorre quando usa LETO ou quando não usa LETO?
quando eu ajustei o net_use() , ficou dando tanto no leto quanto normal

tirei o comando use blabla, para o dbusearea(blabla)
na parte da criação de indices pode se dizer que não foi mexido
aqui fica confuso... porque PathLeto se vc não usa leto nesse trecho?
Pathleto é uma variavel que pega infos em um arquivo.ini

pra entendimento seria mais ou menos isso

#ifdef _LETO
PathLeto := 192.168.2.43:2812/
#else
PathLeto := hb_dirbase()
#endif

Leto_File(aFile) // assim ele ja acha o arquivo que esta setado no letodb.ini

mais o file() tem que dar o caminho que ficaria por exemplo c:\meuarquivo.cdx

Acessar base de dados

Enviado: 18 Mar 2019 08:13
por Amparo
ola amigos

bom dia a todos

desculpem por estar retornando somente agora, mas devido a enchente ocorrida no sábado e domingo da semana passada aqui em SP tive meu tempo esgotado pois tive que recuperar servidor e estações de trabalhos que foi totalmente imundada pela água.

bem mais isso é outro problema.
Itamar M. Lins Jr. escreveu:Não desista, assim como eu e muitos Outros que trabalhamos com o Harbour, Letodb[f], CGI etc... Funciona e muito bem, apesar de lermos vez ou outra comentários desanimadores... Mas aqui é forum de aprendizado(programação), mostrando nossos códigos, perguntando e o nosso sucesso, procurando melhorar a comunidade do PCTOLEDO, atenção redobrada aos INTERMEDIÁRIOS, pois esses só estão aqui pelo $$$$ só isso.
com certeza não vou desistir, essa palavra não me acompanha.
Itamar M. Lins Jr. escreveu:Talvez em HTML+ Harbour seja até mais fácil resolver seu problema do que vc está imaginando. E vai disponibilizar seus pedidos até para celulares...
pretendo chegar a este ponto!


eu consegui fazer uma conexão, estou avançando, graças a ajuda de vocês, sei que ainda haverá pedras no caminho.

abraços
e obrigado a todos

Acessar base de dados

Enviado: 19 Mar 2019 10:58
por Amparo
ola amigos

bom dia a todos

estou tento problema ao abrir as tabelas no letodb conforme abaixo:

abro desta forma:

Código: Selecionar todos

USE (cPath+"pedidos") INDEX (cPath+"pedidos") ALIAS "pedidos" SHARED NEW VIA "LETO"
erro:

Código: Selecionar todos

Application: C:\FONTES\MINIGUI\LETODBII\LIMPIUM.EXE
Date: 19/03/2019 Time: 10:18:16
Time from start: 0 days 0 hours 0 mins 7 secs
Error DBCMD/2001 Workarea nÆo est  em uso: ORDLISTADD


Called from ORDLISTADD(0) 
Called from DBSETINDEX(0) 
Called from ACESSA_PEDIDO(314) in module: LIMPIUM.PRG 
Called from VERIFICA_LOGIN(288) in module: LIMPIUM.PRG 
Called from (b)ACESSOAOSISTEMA(199) in module: LIMPIUM.PRG 
Called from _DOCONTROLEVENTPROCEDURE(1857) in module: h_windows.prg 
Called from EVENTS(2272) in module: h_events.prg 
Called from DOMESSAGELOOP(0) 
Called from _ACTIVATEWINDOW(1498) in module: h_windows.prg 
Called from ACESSOAOSISTEMA(208) in module: LIMPIUM.PRG 
Called from (b)MAIN(73) in module: LIMPIUM.PRG 
Called from _PROCESSINITPROCEDURE(1671) in module: h_windows.prg 
Called from _ACTIVATEWINDOW(1486) in module: h_windows.prg 
Called from MAIN(147) in module: LIMPIUM.PRG 
o porque do erro, tenho um sistema de controle de vendas e tudo mais, decidi fazer um aplicativo para ser instalado nos clientes, onde eles vão digitar o seu pedido, acontece que o pessoal no escritório esta com o sistema aberto e fazendo os procedimentos normais, só que, quando o cliente executa este aplicativo e faz a conexão da o erro mencionado, se eu mudar a forma de abertura da tabela colocando READONLY ai o erro não acontece mas por outro lado não consigo gravar na tabela.

exemplo:

Código: Selecionar todos

USE (cPath+"pedidos") INDEX (cPath+"pedidos") ALIAS "pedidos" SHARED NEW READONLY VIA "LETO"
neste caso consigo ler o ultimo pedido de um cliente incluo mais itens tudo perfeito, mas quando vou salvar da erro

Código: Selecionar todos

Application: C:\FONTES\MINIGUI\LETODBII\LIMPIUM.EXE
Date: 19/03/2019 Time: 10:37:40
Time from start: 0 days 0 hours 0 mins 16 secs
Error LETO/1025 Escrita nÆo permitida


Called from DBAPPEND(0) 
Called from SALVAR_PEDIDO(791) in module: LIMPIUM.PRG 
Called from (b)MAIN(129) in module: LIMPIUM.PRG 
Called from _DOCONTROLEVENTPROCEDURE(1857) in module: h_windows.prg 
Called from EVENTS(1796) in module: h_events.prg 
Called from DOMESSAGELOOP(0) 
Called from _ACTIVATEWINDOW(1498) in module: h_windows.prg 
Called from ACESSOAOSISTEMA(208) in module: LIMPIUM.PRG 
Called from (b)MAIN(73) in module: LIMPIUM.PRG 
Called from _PROCESSINITPROCEDURE(1671) in module: h_windows.prg 
Called from _ACTIVATEWINDOW(1486) in module: h_windows.prg 
Called from MAIN(147) in module: LIMPIUM.PRG 
lembrando que estes erros só ocorre se eu estiver com o meu sistema em funcionamento e depois executar o aplicativo que estou desenvolvendo, se o pessoal não estiver usando o sistema ai não da erro algum, isto acontece tando na maquina local como remotamente.

em meu sistema a abertura é feita desta forma:

Código: Selecionar todos

DBUseArea( .T., "dbfcdx", cFile, cAlias, .T. )
fica aqui a pergunta, não vou conseguir abrir uma tabela via leto estando com outro sistema aberto e trabalhando com estas tabelas?

abraço a todos

Acessar base de dados

Enviado: 19 Mar 2019 11:23
por JoséQuintas
O aplicativo DBF/CDX é somente console?
Coloca em Linux e pronto.

Quer fazer um simulado básico?
Se tem Windows 10, fica extremamente facilitado fazer teste em Linux.
Depois, cria o servidor Linux, virtual ou não, e bola pra frente.

Acessar base de dados

Enviado: 19 Mar 2019 11:24
por Itamar M. Lins Jr.
Ola!
Cadê seu letodb.ini ?
Really important options commonly only are: DataPath, LogPath, Share_Tables, No_Save_WA.
If the server should use an existing DBF fileset, adapt 'Default_Driver' if DBFNTX was used.
Veja essa parte: No_Save_WA = 1
Esse é o padrão que eu uso.

Código: Selecionar todos

Port = 2812              
DEFAULT_DRIVER = CDX     
DATAPATH = c:\sistema\dados
ENABLEFILEFUNC = 1
CRYPT_TRAFFIC = 0
PASS_FOR_LOGIN = 0
PASS_FOR_MANAGE = 0
PASS_FOR_DATA = 0
Share_Tables  = 0
Cache_Records = 60
No_Save_WA = 1
[DATABASE]
DataPath = c:\sistema\dados\
Driver = CDX

Código: Selecionar todos

No_Save_WA = 1           -    server mode of internally handling database tables
                                    1  each dbUseArea() will cause a real file open operation by the OS,
                                       identical to what client requested, so workareas at the server are same as
                                       at client side. [ WA number, alias, filter conditions, relations ]
                                    0  each table is opened only one time, this workarea 'exchanged' in between client
                                       requests. so only one connection will have access to the table at a time.
                                       No relations active at server, Alias names at server are different from
                                       the client.
                                    Recommend '1' if you plan to execute functions at server side ( UDF ).
      Share_Tables = 0         -    other software simultanous access tables used by server,
                                    which changes logical or physical record locking -- in dependance:
                                    # No_Save_WA = 0
                                    0  server open all tables in exclusive mode, what leads to
                                       performance increase as e.g. record-/ file- locks are not applied by OS.
                                    1  tables are opened in the same mode [shared/exclusive] as client
                                       applications opened them, what allows LetoDB to work in coexistence with
                                       other applications [ non LetoDB users ] simultanous on the same DBF tables.
                                    # No_Save_WA = 1
                                    1  physical record-/ file- locks set with the OS are viewable for other
                                    0  only logical internally locking, don't respect other record locks
                                    * SAMBA: *
                                      co-work with Samba file-service needs very special treatment/ setup
and have limits of possibilities -- see chapter 4.4
Saudações,
Itamar M. Lins Jr.

Acessar base de dados

Enviado: 19 Mar 2019 12:24
por Amparo
ola amigos

bom dia Itamar

meu letodb.ini esta conforme abaixo, acrescentei a linha No_Save_WA = 1 e aparentemente resolveu vou fazer mais teste

Código: Selecionar todos

Port = 2812              
Logfile = "letodb.log"   
DEFAULT_DRIVER = CDX     
DATAPATH = c:\limpium\dados\
ENABLEFILEFUNC = 1
CRYPT_TRAFFIC = 0
PASS_FOR_LOGIN = 0
PASS_FOR_MANAGE = 0
PASS_FOR_DATA = 0
Share_Tables  = 0
Cache_Records = 50
[DATABASE]
DataPath = c:\limpium\dados\
Driver = CDX
muito obrigado amigo, tenha um bom dia

abraços