Clipper On Line • Ver Tópico - Acessar base de dados

Acessar base de dados

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Acessar base de dados

Mensagempor Itamar M. Lins Jr. » 11 Mar 2019 14:42

Ola!
mas para mim na logica os dois estariam fazendo o que eu preciso, claro que de forma diferente pois no navegador teria um link para abrir uma pagina para inserção dos dados,

Não. O navegador não usa Letodb. Usa, conversa com o APACHE/ISS...
O letodb quem usa são os programas criados pelo Harbour.
Se ainda deseja disponibilizar uma pagina de pedido, terá que aprender instalar e configurar o APACHE. E noções básicas em HTML.
Ou fazer um programa em Harbour e disponibilizar ele na internet para seus clientes baixarem, para assim ele(programa em Harbour) usando o Letodb, acessar seus DBF´s.
Mesmo assim a velocidade, nem se compara com Apache + HTML.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Acessar base de dados

Mensagempor Amparo » 11 Mar 2019 16:13

ola amigos

Itamar M. Lins Jr escreveu:Não. O navegador não usa Letodb. Usa, conversa com o APACHE/ISS..


Itamar, isso eu entendi, por isso que postei o código que estou montando para fazer os testes com o letodb.

Itamar M. Lins Jr. escreveu:Mesmo assim a velocidade, nem se compara com Apache + HTML.

no quesito velocidade acredito não ser problema porque o cliente vai entrar apenas 1 vez por mês para fazer o pedido, então creio que não levara muito tempo para ele colocar 1, 3 , 7 ou 50 itens no pedido.

quanto a funcionalidade do letodb é que estou em duvida e tentando resolver, por exemplo consegui fazer uma conexão dei NET STOP ... e depois NET START o erro dizendo que o sistema travou não acorreu mais, fiz até uma consulta no cadastro de cliente.

Só que, quando fui fazer a consulta novamente com o pessoal (-/+ 10 pessoas) usando o sistema em produção, da erro dizendo que a alias "CLIENTES" não esta em uso, isso acontece também na maquina local.

Error DBCMD/2001 Workarea nÆo est em uso: ORDLISTADD

ou seja o pessoal utiliza um sistema feito em harbour onde a abertura das tabelas é feita desta forma:
DBUseArea( .T., RTrim( F_ILES->FI_RDD ), cPath + RTrim( F_ILES->FI_DBF ), RTrim( F_ILES->FI_ALIAS ), .F. )


já tentei mudar para: e nada
 DBUseArea( .T., RTrim( F_ILES->FI_RDD ), cPath + RTrim( F_ILES->FI_DBF ), RTrim( F_ILES->FI_ALIAS ), .T. )


abraço
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Acessar base de dados

Mensagempor Giovany Vecchi » 11 Mar 2019 16:15

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/Sample.7z?t=1fs0ixpa

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

Qualquer duvida me chame no skype
giovany.vecchi
Giovany Vecchi
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 19
Data de registro: 28 Mai 2014 17:32
Cidade/Estado: Jales / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Acessar base de dados

Mensagempor Itamar M. Lins Jr. » 11 Mar 2019 18:16

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Acessar base de dados

Mensagempor Giovany Vecchi » 11 Mar 2019 20:42

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/adsweb/example_db/v1/__query?statement=Select%20*%20from%20PRODUTOS%20Order%20By%20PRODUTO&$format=json
Giovany Vecchi
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 19
Data de registro: 28 Mai 2014 17:32
Cidade/Estado: Jales / SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Acessar base de dados

Mensagempor Nascimento » 12 Mar 2019 00:22

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...
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Acessar base de dados

Mensagempor Itamar M. Lins Jr. » 12 Mar 2019 09:50

Ola!
Variáveis da aplicação cliente, não são vistas pelo servidor, é assim com qualquer SGBD.
Por exemplo:
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:
select cli
index on field->nome...


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 ?
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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Acessar base de dados

Mensagempor Nascimento » 15 Mar 2019 11:54

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


// 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

A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Acessar base de dados

Mensagempor Jairo Maia » 15 Mar 2019 13:09

Olá Nascimento,

Nascimento escreveu:é como se não usasse o indice recém-criado
Estranho mesmo... Tente fazer esse teste modificando essa parte:
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
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Acessar base de dados

Mensagempor Nascimento » 15 Mar 2019 14:20

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

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

    

A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Acessar base de dados

Mensagempor Jairo Maia » 15 Mar 2019 14:46

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:
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?
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Acessar base de dados

Mensagempor Nascimento » 15 Mar 2019 15:14

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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Acessar base de dados

Mensagempor Amparo » 18 Mar 2019 08:13

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
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Acessar base de dados

Mensagempor Amparo » 19 Mar 2019 10:58

ola amigos

bom dia a todos

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

abro desta forma:
USE (cPath+"pedidos") INDEX (cPath+"pedidos") ALIAS "pedidos" SHARED NEW VIA "LETO"


erro:
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:
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

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:
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
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Acessar base de dados

Mensagempor JoséQuintas » 19 Mar 2019 11:23

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 9 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