Uso de letodb

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

Moderador: Moderadores

leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Boa noite Itamar.
Então, já estou com o sistema rodando todos os módulos no LETO, fiz bastante testes de bancada, não coloquei em produção ainda em LETO, vou fazer testes de bancada com está configuração pra ver se há algum problema ou não.
Fiquei com esta dúvida não sei nem porque, mas fiz testes criando as tabelas em LETO e usando em DBFCDX e vice versa e funcionou normal, aparentemente não corrompeu nenhum índice.
Vou rodar mais uns testes pra enfim colocar em produção.
Obrigado.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Boa noite a todos.
Coloquei em produção e até agora estou muito satisfeito, principalmente pela velocidade em computadores usando wireless, isto já me anima a usar on LINE o sistema.
Muito obrigado pela ajuda recebida.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
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

Uso de letodb

Mensagem por Itamar M. Lins Jr. »

Olá!
É o quê venho explicando ao pessoal.
LetoDbf ativa novamente o uso do DBF. Tem o ADS que é pago e tem junto a sintaxe SQL. Quem sabe mais na frete venha a ter isso no LetoDbf.
Nunca tive problema de índice corrompido.
Meu sistema não tem nem a opção de INDEXAR. Nem existe isso. Quando eu preciso eu apago os CDX e reabro o sistema e o sistema recria os índices, mas só pq adicionei uma TAG a mais. Fora isso é ZERO de índice corrompido.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Boa noite, hoje notei no log do leto alguns erros.
Exemplo parsecomando algo assim só não encontrei nada sobre o assunto.
Não detectei nada de errado além destas mensagens de erro.
Ainda vou estudar mais sobre estas mensagens.
Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Bom dia Itamar.
Sobre o LETO novamente.
Ocorre o erro ainda

06.05.2024 17:01:14 ERROR leto_ParseCommand()
06.05.2024 17:01:14 w;57016320;02;

06.05 17:01:14.274 ERROR leto_SelectArea(57016320)! find Area failed

Pelo que entendi estes erros estão ocorrendo quando há uma perca de conexão com o servidor por algum motivo só não descobri ainda o motivo.
Ocorreu tbem a falha de conexão em um cliente meu que utiliza através da Wirelles, talvez seja por ocilação.

Pergunto, há alguma forma de detectar a falha de conexão e neste momento gerar nova conexão com servidor ?
Estou tentando montar dentro do errorsys, mas não consegui ainda entrar quando falha a conexão e reconectar.

Grato
Um abraço.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
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

Uso de letodb

Mensagem por Itamar M. Lins Jr. »

Olá!
Aqui apare outros tipos. Esses dai eu não peguei.
Aqui é falha dbseek(), falha select(), dbclose... mas é pq o pessoal desliga o servidor e as estações manda pra mim esses erros.
Ou alguma maquina muito lenta(RAM 2Gib, muito antigo) que gera na estação(só nela) algum erro.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Boa tarde Itamar.
Grato pelo retorno.
Então, ocorre pra mim estes tbem, fiz até teste desligando no meu ambiente de produção do sistema e da erro mas não chama a opção no errorsys de tentar a reconexão com o banco de dados.
Mas aqui nos meus clientes ocorreu a esmo sem aparente motivo, tipo desligamento da maquina ou desligamento de um Hub, simplesmente da o erro e o sistema envia pra mim aonde ocorreu o erro, e claro, nestes lugares são exatamente por perca de conexão.
Aí pensei em forçar uma reconexão com opção de CONTINUAR OU SAIR para o cliente ver que o problema não é no sistema e sim em alguma parte de comunicação com o servidor.
Grato pela ajuda.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
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

Uso de letodb

Mensagem por Itamar M. Lins Jr. »

Olá!
Esse erro que vc diz é o uso de filtros.
Como está o comando que vc usa ?
Coloque o código aqui pra ver se tem como mudar para "index temporary"

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Bom dia Itamar.
"Esse erro que vc diz é o uso de filtros."
Vc diz sobre SET FILTER? se for não utilizo filtro no sistema.

"Coloque o código aqui pra ver se tem como mudar para "index temporary""
Índices temporários eu uso criar como crio os principais, crio, utilizo e destruo ao fechar o modulo.
Vou testar o uso em memória e ver como será o andamento.

Realmente ocorre quando há alguma oscilação na rede, nada de errado no código do sistema.
Ocorre muito tbem quando é desligado o servidor no final do expediente e algum terminal ficou ligado dentro de algum módulo que usa o banco de dados.
É bem neste momento que tento fazer algo, finalizar ou retentar a conexão mas não obtive exito colocando na errorsys.

Estive pesquisando ontem a noite e encontrei uma postagem aqui no fórum que preferem usar TS do que usar LETO para acessar através de wirelles por exemplo.
Não tenho nada a reclamar do LETO usando wirelles, funcionou perfeitamente e rápido, então prefiro usar ele ao invés de fazer uma conexão com o servidor para usar dentro do servidor, não sou fã do usuário usando um login no servidor (opinião minha).

Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Bom dia.
Não estou conseguindo entender alguns processos do LETO.
Vejamos:
A função LETO_Connect() executa uma conexão com o servidor, correto, ela retorna se conectado ou não .T. ou .F., certo.
Executo ela no inicio do sistema e tudo bem e funcionando e conectado, até aí ok.
Estou fazendo o seguinte teste:

1-Executo o sistema acesso e tudo bem, banco de dados abre nos módulos do sistema, exemplo "orçamentos"
2-Efetuo uma DESCONEXÃO do banco de dados "NET STOP LETODBF_SERVICE", mesmo dentro do sistema mas os módulos fechados e banco de dados fechados.
3-Acesso o modulo "orçamentos" e o LETO_CONNECT() retorna verdadeiro, mesmo com o servidor parado como no item 2.

Estou entendendo errado a funçaõ?
Existe outro meio para descobrir se a conexão esta OFF ou ON?

Código:

Código: Selecionar todos

Function Connect_Server()
Local bRET:=.T.
Local nRES
w_vTXT:="Localizando o servidor em: "+oDB_PATH+"..."
ShowWaitProc()
WVW_PROCESSMESSAGES()

If oVia_RDD=="LETO"
   nConect := Leto_Connect( oDB_Path ) //aqui no inicio do sistema retornar corretamente, mas depois não mais, retorna sempre verdadeiro
   If nConect == -1
      w_vTXT:="Falha ao conectar com o servidor em: "+oDB_PATH+"..."
      ShowWaitProc()
      WVW_PROCESSMESSAGES()
      bRET:=.F.
      nRes := leto_Connect_Err()
      w_vTXT:="Não conectado ao servidor: "+oDB_PATH+"..."
      If     nRes == LETO_ERR_LOGIN
             w_vTXT:="Falha ao Logar: "+oDB_PATH+"..."
      ElseIf nRes == LETO_ERR_RECV
             w_vTXT:="Erro ao conectar: "+oDB_PATH+"..."
      ElseIf nRes == LETO_ERR_SEND
             w_vTXT:="Erro de envio de pacote: "+oDB_PATH+"..."
      EndIf
   Else
      w_vTXT:="Servidor conectado: "+oDB_PATH+"..."
   EndIf
  
Else //DBFCDX
	bRET:=wNetUse //.wT.
        w_vTXT:="Servidor conectado: "+oDB_PATH+"..."
EndIf   
ShowWaitProc()
WVW_PROCESSMESSAGES() 
Return bRET
Grato a todos.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
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

Uso de letodb

Mensagem por Itamar M. Lins Jr. »

Olá!
Leto_connect() retorna um NUMERO.
NET STOP -> não é comando do LetoDB, é um comando do windows que PARA o serviço do LETODB
NET STOP na estação não faz nada. Executando no SERVIDOR é preciso ter PRIVILEGIO de administrador.(root)
Para desconectar use leto_disconnect() que retorna .t. ou .f.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Bom dia Itamar.
"
NET STOP -> não é comando do LetoDB, é um comando do windows que PARA o serviço do LETODB
"
Sim, sei que não se trata de um comando LETODB, faço isto para simular a queda do servidor e realmente da certo mas só no inicio do sistema se eu usar outro LETO_CONNECT() dentro do sistema para refazer a conexão com o servidor retorna sempre .T. como se o servidor leto estivesse rodando.

Aí fiz um teste agora usando o LETO_DISCONECT() antes de tentar uma nova conexão e deu certo, com isto ele retorna .F. se o servidor estiver desconectado.

Leto_Disconnect() //com isto deu certo rodando antes de tentar uma nova conexão, tanto no inicio do sistema como dentro do sistema.
nConect := Leto_Connect( oDB_Path )

Só verifico e faço uma nova conexão somente se o sistema cair a conexão com o servidor, isto esta ocorrendo durante o uso do sistema.
Exemplo:
o terminal esta trabalhando normalmente no sistema e dentro de uns minutos de operação ao tentar entrar em outro modulo ao fazer a abertura dos arquivos através do LET_FILE() o sistema se depara na queda e não localiza o arquivo que esta lá certinho no servidor, mas em segundos tudo volta ao normal, mas como a minha função já retorna .F. (wnetuse), acaba tendo que o usuário sair do sistema e entrar novamente para isto, claro que se eu zerar a variável no inicio de cada modulo (wnetuse:=.T.) já resolveria o problema, mas compete alteração em todos os módulos e se a função de abertura de arquivos tentar uma nova conexão com o servidor e tendo localizado já retornando .T. assim atualizaria o sistema deixando abrir o banco de dados sem problemas.

Vou fazer uns testes para ver se resolve o problema de vez.
Valeu.
Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Boa tarde.
Fiz vários teste e 50% resolvido.
"
Leto_Disconnect() //com isto deu certo rodando antes de tentar uma nova conexão, tanto no inicio do sistema como dentro do sistema.
nConect := Leto_Connect( oDB_Path )
"
Desta forma deu certo, consigo acessar novamente o banco de dados sem o sistema sair quando starto o LETO novamente.
Problema:
Quanto chega no Dbsetrelation() da erro "alias não existe", não consegui identificar o problema.
Lembrando que sem desconectar o banco de dados o dbsetrelation() funciona normalmente.

Se alguém souber fico grato.
Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Uso de letodb

Mensagem por leandrolinauer »

Boa tarde.
Continuando com LETODBF.

Alguém já utilizou ou utiliza temporário em memória mas no LETODBF??

Pergunto, porque nos meus testes todas as formas deu errado.
o mesmo código temporário em memória no DBFCDX não funciona no LETODBF.

Outra pergunta, se funciona LETODBF e temporário na memória, da algum problema gerar na memória do servidor?

o arquivo mem ele é criado sempre?, porque quando não coloco a pasta direcionada o mem não aparece em lugar algum do sistema, mas quando coloco a pasta direcionada ele aparece, mas não consigo abrir, da erro.

Código: Selecionar todos


      DbCreate("mem:"+"&LArquivo.",Campos,cDriver,.T.,"memarea")
      NewIndexFile(Chave ,cD_Tempo,"mem:"+LArquivo,aOd,.F.,,"MEMAREA") //minha função funciona normal
      USE "mem:"+LArquivo ALIAS &LArquivo. //só consigo usar assim.
      //DbUseArea(.T.,cDriver,"mem:"+LArquivo,Nil,.F.,.F.) desta forma não consigo usar, da erro
      DbSetIndex("mem:"+LArquivo)

O código acima funciona em DBFCDX já no LETO não da certo.

Alguém usa??
Alguém sabe me informar se o selecionamento de dados para o temporário fica mais rápido jogando na memória?

Porque em ARRAY fica mais rápido mas não consegui ainda um BROWSE para mostrar, porque uso o DBEDIT.

Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
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

Uso de letodb

Mensagem por Itamar M. Lins Jr. »

Olá!
Arquivo em memoria é do lado cliente.

Código: Selecionar todos

DbCreate("mem:arquivo.dbf",aStru,'DBFCDX',.T.,"arq") //cria e abre o dbf na RAM
Index on Str(Descend(data_compr),7)+cod_mercad tag arq01 

//Aqui puxo do servidor para o cliente na RAM da estação.
cArqMes := cServidor+dAno+cNomeMes
//cServidor é o IP ou nome do servidor.
//dAno é uma subpasta
//cNomeMes é o arquivo
append from (cArqMes) for cod_mercad = eq->cod_mercad .AND. (nTQVDA += quantidade) via "LETO" 

etc...
etc...
arq->(dbCloseArea())
dbDrop("mem:arquivo.dbf",,"DBFCDX")
Saudações,
Itamar M. Lins Jr.
Responder