Clipper On Line • Ver Tópico - Servidor de banco de dados

Servidor de banco de dados

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

Servidor de banco de dados

Mensagempor JoséQuintas » 07 Jun 2010 14:06

Muitos divulgam LIBs pra facilitar acesso a MySql.
O uso de LIBs é bom, pois quando se tem muito fonte a ser alterado, elas reduzem o tempo necessário para a mudança deles.
Só que o uso estilo xbase não vai usar NENHUM recurso do MySql, e ao contrário, pode deixar tudo mais lento, e o servidor mais sobrecarregado.

Base de Dados

A base de dados é simplesmente o armazenamento dos dados.
Você salva e busca dados.
Isto é a base tradicional dos DBFs. Só salvar e buscar, e mais nada.

SQL/MySql

No MySql, trata-se de um gerenciamento de base de dados.
É um servidor, com programação própria, que lhe entrega tudo pronto.
Basta um comando SQL e todo processamento já vém pronto.

Exemplos práticos:

Imaginem um banco de dados com duas tabelas:
NOTAS FISCAIS: NUMERO, CODCLIENTE, DATAEMISSAO, VALOR
CLIENTES: CODCLIENTE, NOME

Vamos pegar um relatório médio:
- Somente totais por cliente
- Em ordem alfabética (em ordem de valores, o fonte ficaria muito grande)
- Somente valores acima de 5000

select 0
use notas index codcliente
select 0
use clientes index nome
Goto Top
Do While .Not. Eof()
   mSoma := 0
   Select notas
   Seek clientes->CodCliente
   Do While clientes->CodCliente == notas->CodCliente .And. .Not. Eof()
        mSoma := mSoma + notas->Valor
       Skip
   Enddo
   select clientes
   If mSoma < 5000
      Skip
      Loop
   Endif
   @ Row(), 0 Say notas->numero
   @ Row(), Col()+2 say notas->codcliente
   @ Row(), Col()+2 say clientes->Nome
   @ Row(), Col()+2 Say notas->DataEmissao
   @ Row(), Col()+2 Say notas->Valor
   @ Row()+1, 0 Say ""
   Skip
Enddo
close databases


Legal, funciona direito, e se usar uma lib Mysql não precisa mexer no fonte.
Vai acessar o Mysql durante o relatório inteiro, processar TODOS os registros do banco de dados, que irão chegar via rede, ou via internet.
Vai estar usando muito o servidor MySql, mas NADA/ZERO de seus recursos.
Numa base de 10.000 notas, e 1.000 clientes, vai estar trazendo para o terminal 11.000 registros, via rede ou via internet, e também fazendo várias consultas durante o relatório.

Já usando recursos do MySql...
Uma única consulta ao banco e já teria o relatório pronto.

SELECT CODCLIENTE, NOME, SUM(VALOR) SOMA FROM NOTAS GROUP BY CODCLIENTE WHERE SOMA > 5000 ORDER BY NOME

Digamos que existam 100 clientes que atendam essa condição.
No estilo xbase, haverá o tráfego de 11.000 registros pela rede/internet, e várias consultas à base MySql.
Usando recurso do MySql, com a query acima, haverá o tráfego de somente 100 registros pela rede/internet, em uma única consulta à base MySql.
Diferença mais prática?
Suponha a base na internet, e 100 bytes cada registro.
11.000 registros x 100 bytes = 1.100.000 bytes = 1.1MB
100 registros x 100 bytes = 10.000 bytes = 10kb
Numa banda larga de 1MB, que baixa a uns 100kb, o primeiro demora 11 segundos, e o segundo apenas meio segundo, isso sem contar as várias solicitações ao servidor executadas na primeira opção, senão será uma diferença ainda maior.
O programa fica muito mais rápido, e com menos fonte.

Agora, imagine as possibilidades....
Imagine que o relatório poderia ser por ordem de valor.
O fonte em xbase seria muito maior, já em SQL, só mudaria o ORDER BY.
E se fosse total por data?
O fonte em xbase seria diferente, já em SQL, só mudaria o GROUP BY

O SQL permite:
- Totalizar dados (reduz tráfego de dados)
- Relacionar tabelas (reduz consultas)
- Colocar em determinada ordem (reduz processamento local)
- Filtrar dados (reduz tráfego de dados)

Essa é só uma pequena parte das diferenças entre os DBFs e os bancos de dados relacionais.
Ficar preso ao estilo xbase não é interessante.

Ahhh... o fonte modificado... bom, depende da LIB ou linguagem.
Como o ADO é padrão, e no xHarbour fica igual, vai um simbólico meio xHarbour/VB...

Set Rs = Conexao.Execute("SELECT CODCLIENTE, NOME, SUM(VALOR) SOMA FROM NOTAS GROUP BY CODCLIENTE WHERE SOMA > 5000 ORDER BY NOME")
Rs.MoveFirst
Do While Not Rs.Eof()
   ? rs.Fields("NUMERO").Value
   ? rs.Fields("CODCLIENTE").Value
   ? rs.Fields("NOME").Value
   ? rs.Fields("DATAEMISSAO").Value
   ? rs.Fields("VALOR").Value
   Rs.MoveNext
Loop
Rs.Close


Obs. Uso o ADS no VB, e tudo isso também é permitido. Tudo bem, ADS usa DBF/CDX , mas ADS é um servidor de banco de dados, e não apenas DBF/CDX.
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: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Re: Servidor de banco de dados

Mensagempor lugab » 07 Jun 2010 16:51

Ótimas dicas, Quintas.

Eu nunca ia imaginar que seria assim tão fácil.

Migração à vista, principalmente se o Mysql for free

gabriel
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

Re: Servidor de banco de dados

Mensagempor Maligno » 07 Jun 2010 17:11

O Quintas deu um ótimo exemplo do que se perde ao insistir na velha cultura das tabelas locais. Isso que ele nem falou do resto: triggers, stored procedures, views, generators, domínios, UDFs, etc etc etc. Isso só pra comentar o básico que todo SGBD tem. Particularmente prefiro o Firebird, que é (também?) gratuito, pequeno, rápido, na medida pro que preciso. Aliás, robusto também: suporta bases extremamente volumosas.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Re: Servidor de banco de dados

Mensagempor JoséQuintas » 07 Jun 2010 17:38

Pois é.
E faltou dizer nesse básico, que talvez não tenham percebido.
Não precisa se preocupar com select ou set index.

Sobre o limite, já vi comentários de MySql de mais de 1TB.
Minha base de NFE ainda tá na casa de 1GB.
Mas limite, acho que a gente nem precisa se preocupar tão cedo.
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: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Re: Servidor de banco de dados

Mensagempor Itamar M. Lins Jr. » 11 Jun 2010 23:47

Muitos desses recursos hoje já é possivel com o LetoDB e como NetIO.
Coisas que só o ADS tinha. No mais é "quase" inquestionavel (para mim) a superioridade dos SGBD's em relação ao DBF.
Hoje todos os meus clientes que tem duas ou mais lojas fazem cunsultas de clientes/mercadorias, etc em todas as lojas num piscar de olhos. Isso usando ADSL de 300kb que num chega nem a 260kb, tem MSN, FM, Orkut, Cameras de video etc... tudo pindurado nesses links.

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Re: Servidor de banco de dados

Mensagempor sygecom » 16 Jun 2010 21:01

Realmente o LetoDB é bom, muito bom mesmo eu uso ele,inclusive coloquei a mais ou menos uns dois anos atrás um link para o pessoal baixar e testar e houve dia que teve mais de 50 usuários conectados, então ele da conta do recado dependendo da situação, principalmente o controle de transação que para mim na época foi muito bom, mas eu venho trabalhando com Postgresql 8.4 e os recursos são ilimitados, um deles que faz falta no LetoDB que já mandei a idéia para o Alexander é um comando LIMIT de poder retornar um limite máximo de registros ex:
USE AGENDA ALIAS AGENDA VIA "LETODB" LIMIT 5
Outro fato é que agora na maioria das empresas tem um TI e a primeira pergunta é: Qual é o banco de dados que usa seu sistema ? se diz DBF o cara as vez nem conhece e jogo na Google e diz que isso é ultrapassado e problemático, mas se diz que é Postgresql a historia muda...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7017
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes

Re: Servidor de banco de dados

Mensagempor JoséQuintas » 17 Jun 2010 00:10

Curiosidade: alguém sabia que o xHarbour, assim como a maioria das linguagens Windows tem ADO? e alguém sabe pra que serve o ADO?
O ADO é tipo um "driver" pra banco de dados. Se usar ADO, já tem acesso a qualquer base de dados, de graça.
Quer dizer... sei lá... algumas... tem que procurar se o fabricante da base fez o "driver". Uma lista que encontrei foi esta:
SQL Server 2008, SQL Server 2005 , SQL Server 2000, SQL Server 7.0 , SQL Server Compact Edition , Oracle , IBM DB2 , MySQL , Sybase Advantage Database Server , Sybase Adaptive Server Enterprise , Informix , Postgre SQL , IBM UniVerse , IBM UniData , AS/400 (IBM iSeries) , Progress, Firebird , Interbase , Paradox , Ingres , Mimer SQL , Lightbase , Pervasive , SQLBase , Caché , Teradata , VistaDB , DBMaker , Netezza DBMS , Valentina , Excel 2007 , Excel , Textfile , Access 2007 , Access , Visual FoxPro / FoxPro 2.x , DBF / FoxPro , SQLite , Filemaker ,

A lista é dos mais usados, está neste site aqui:
http://www.connectionstrings.com/

De qualquer forma, tudo depende do que está disposto a gastar, seja dinheiro ou mão de obra.
Se tem tempo de aprender, vai refazer os fontes reduzindo em muito, deixando muito mais rápido.
Se tem milhares de fontes, uma RDD faz a mudança instantânea, mesmo que não aproveite recursos.
O pessoal que vende as RDDs vai agradecer, porque para o ADO eles fazem tudo de graça.
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: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Re: Servidor de banco de dados

Mensagempor Toledo » 17 Jun 2010 08:09

JoséQuintas escreveu:alguém sabia que o xHarbour, assim como a maioria das linguagens Windows tem ADO? e alguém sabe pra que serve o ADO?


Dê uma olhada no primeiro tópico (fixo) desta seção, com o título "*** ADOxb - BIblioteca de funções de Acesso SQL ***".

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Re: Servidor de banco de dados

Mensagempor clrod » 23 Jun 2010 14:40

Alguém sabe dizer se esse ADO é o mesmo que se encontra entre os exemplos do Harbour?

Obrigado.
clrod
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 79
Data de registro: 17 Nov 2009 12:42
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Servidor de banco de dados

Mensagempor rochinha » 23 Jun 2010 23:07

Amiguinhos,

Toledo, obrigado pela lembrança e como sabemos, nosso forum é fonte de conhecimento, assim como um grande livro.

CLROD, os exemplos que voce encontra no mundo Harbour referentes a ADO são sim os mesmos.

Quintas, somente complementando, as linguagens Windows tem acesso ao ADO.

ADO é uma tecnologia de acesso a dados surgida com o uso do Access, suplantando o antigo método DAO.

Tornou-se notório quando a Micro$oft, na necessidade de implementar o sua linguagem comercial, o Basic, pegou os módulos de acesso a dados do Access emprestado, embutindo no mesmo, tornando-o mais compatível com outros tipos de arquivos de dados que não o TXT que o Basic manipulava.

A beleza de se usar o ADO em conjunto com Harbour é que o leque de opções acaba se tornando gigantesco, sendo é claro que as opções de databases serão sempre Firebird, MySQL e PostGres, nem sempre nesta mesma sequencia, en contrapartida das outras SQLs que só encareceriam nossos projetos.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes

Re: Servidor de banco de dados

Mensagempor JoséQuintas » 24 Jun 2010 13:02

A beleza de se usar o ADO em conjunto com Harbour é que o leque de opções acaba se tornando gigantesco


Pois é.
Já falei sobre isto nos tempos em que o xHarbour nem funcionava direito com DBFs.
De lá pra cá, o "leque gigantesco" continua de canto.
O ADO é totalmente grátis, é padrão, é usado pela Microsoft, os "fabricantes" de bases de dados fazem o que for necessário para suas bases funcionarem com ADO também grátis.
Só não tem pra Linux, não sei se é isso que impede o avanço.

Faltou citar nas bases de dados o SQL Server da Microsoft.
A versão Express é grátis, e se não me engano, o único limite é usar no máximo 1GB do servidor.
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: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Re: Servidor de banco de dados

Mensagempor rochinha » 24 Jun 2010 15:10

Amiguinhos.

Eis um verdadeiro exemplo de como programar usando sintaxe Basic em Harbour/xHarbour:
function main()
     ' Vbscript comment.
     Dim cn
     Dim rs
     Set cn = CreateObject( "ADODB.Connection" )
     cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;" & "User Id=Admin; Data Source=ado.mdb"
     cn.Open()
     Set rs = CreateObject( "ADODB.Recordset" )
     rs.Open( "Names", cn, 0, 1, 2 )
     do while not rs.eof()
            MsgBox rs.Fields( "First" ).Value
            rs.MoveNext()
     loop
     rs.Close()
     Set rs = Nothing
     'cn.Close
     Set cn = Nothing
return


O fato é que a possibilidade deste tipo de programação é dependente de um recurso que o Clipper passou a incluir a partir de sua versão 5.0 e ela vem sendo compatibilizada pelo tempo, os Include Files.

Então para enganar a visão mas não o compilador usamos os comandos extendidos para isto:
#define VBSCRIPT

#ifdef VBSCRIPT
   #command ' <*x*> =>
   #command Dim <vars,...> => Local <vars>
   #command Set <!id!> = <exp> => <id> := <exp>
   #command If <cond> Then => IF <cond>
   #command Loop => End

   #translate .<!id!> => :<id>
   #translate Not => !
   #translate And => .AND.
   #translate Or => .OR.
   #translate MsgBox <exp>[.<more>] => MessageBox( 0, <exp>[:<more>], "XBScript", 0 )
   #translate Nothing => NIL
   //#translate _ => ;
   #translate & => +   
#endif

#define adCmdTable 0


Agregando isto poderemos então fazer uso transparente da linguagem no que tange os bancos de dados.

Ainda é vendido um servidor xBase chamado de Fortress, pouco conhecido, mas sua intenção é manter a base xBase mais segura. http://www.grafxsoft.com/fortress.htm
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes




Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 12 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