Clipper On Line • Ver Tópico - Comando SQL x XBASE

Comando SQL x XBASE

Discussão sobre SQL

Moderador: Moderadores

 

Comando SQL x XBASE

Mensagempor janio » 07 Jan 2015 20:44

Pessoal,

Uso ha alguns anos com sucesso o Mediator para Mysql! O legal desse RDD, assim como de outros semelhantes, eh que eles nos dão a oportunidade de escolher se continuamos usando comando xbase ou sql. Comecei minha vida de programação com xbase e este eh para mim a oitava maravilha do mundo. Ocorre parece haver em nós um certo complexo de inferioridade qndo usamos comandos xbase e achamos q aqueles q usam comandos sql estão em outro nivel, outro patamar, que deixou coisas "velhas" e agora ta na "modernidade".

Pois bem! Resolvi trocar os comandos xbase em alguns relatorios para sql. O resultado foi destroso qndo testei em uma base de dados mediana. Sql comeu poeira: 52 segundos para mostrar o relatorio na tela! Ja qndo usei comandos xbase... 2 segundos! eh uma diferença enoooooormeeeeeee!

Pode ser pq eu nao domine sql... quem sabe! Pode ser tbm que tenha a ver como os meus índices estao criados. Sinceramente, não sei. O que sei eh q de 52 segundos para apenas 2... eh de estranhar!

Em Sql
   cQuery = "SELECT a00ecf.marecf, a00ecf.nrfecf, a00ecf.identi, " + ;
            "SUM(a03ped.TOTPED) as Total " + ;
            "FROM a03ped " + ;
            "INNER JOIN a00ecf ON ( a03ped.ecfnrf=a00ecf.nrfecf ) " + ;
            "WHERE a03ped.is_deleted = 'N' AND a03ped.flgcan='N' AND a03ped.datemi>='&vDataI_' AND a03ped.datemi<='&vDataF_'" + ;
            "GROUP BY a03ped.ecfnrf"

   GERA_TAB()      
   use &dbftmp as cQuery NEW SCROLLABLE
   DbGoTop()
   
   Do While !Eof()
   
      nTotalGeral += total

      @ PROW() + 01, 01 SAY NRFECF
      @ PROW()     , 23 SAY Left(MARECF,15)
      @ PROW()     , 45 SAY IDENTI
      @ PROW()     , 66 SAY Total         Pict "@E 99,999,999.99"
   
      DbSkip()
      
   Enddo

   Use
    
   @ PROW() + 01, 50 SAY "Total --->>>"
   @ PROW()     , 65 SAY nTotalGeral     Pict "@E 999,999,999.99"


Em xBase
   aCampos := {} 
   aAdd( aCampos , { "NRFECF" , "C" , 21 , 0 } )
   aAdd( aCampos , { "MARECF" , "C" , 15 , 0 } )
   aAdd( aCampos , { "IDENTI" , "C" , 15 , 0 } )
   aAdd( aCampos , { "TOTAL"  , "N" , 15 , 2 } )

   dbCreate( "mem:test", aCampos, "DBFCDX" , .T., "memarea" )

   INDEX ON NRFECF TAG CHAVE1

   SELECT PEDIDO
   DBSETORDER(7)
   DBGOTOP()
   OrdScope( 0, Dtos(vDATAi) )
   OrdScope( 1, Dtos(vDATAf) )
   DBGOTOP()
   Do While !Eof()
     
      If FlgCan = "S"
         DbSkip()
         Loop
      Endif

      If EcfFab != pedido->ecfnrf
         Select Ecf
         DbSetOrder(2)
         DbGoTop()
         DbSeek( pedido->ecfnrf )
      Endif
      
      EcfFab = pedido->ecfnrf
      
      Select MemArea
      DbAppend()
      replace NRFECF with pedido->ECFNRF ,;
              MARECF with ecf->marecf    ,;
              IDENTI with ecf->identi    ,;
              TOTAL  with pedido->TOTPED
         
      Select Pedido
      DbSkip()
         
   Enddo
         
   OrdScope( 0, nil )
   OrdScope( 1, nil )

   Select MemArea
   DBSETORDER(1)     
   GOTO TOP   
   Do While !Eof()
   
      xEcf = NrfEcf
      xTotal = 0

      @ PROW() + 01, 01 SAY NRFECF
      @ PROW()     , 23 SAY Left(MARECF,15)
      @ PROW()     , 45 SAY IDENTI
      
      Do While xEcf = NrfEcf
      
         xTotal = xTotal + Total
         
         DbSkip()
         
      Enddo

      nTotalGeral += xtotal

      @ PROW()     , 66 SAY xTotal         Pict "@E 99,999,999.99"
         
   Enddo
    
   Close memarea
     dbDrop( "mem:test" )  // Free memory

   @ PROW() + 01, 50 SAY "Total --->>>"
   @ PROW()     , 65 SAY nTotalGeral     Pict "@E 999,999,999.99"


Indices
            INDEX ON PEDIDO                           TAG CHAVE1
            INDEX ON STR(CODCLI)+DTOS(DATEMI)         TAG CHAVE2
            INDEX ON FLGIMP                           TAG CHAVE3
            INDEX ON STR(CODVED)+DTOS(DATEMI)         TAG CHAVE4
            INDEX ON STR(CODPRZ)+DTOS(DATEMI)         TAG CHAVE5
            INDEX ON STR(CODCLI)+DESCEND(STR(PEDIDO)) TAG CHAVE6
            INDEX ON DTOS(DATEMI)                     TAG CHAVE7
            INDEX ON ECFNRF+Dtos(EMIDAT)+Str(COONUM)  TAG CHAVE8
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Comando SQL x XBASE

Mensagempor janio » 07 Jan 2015 21:02

Esclarecendo:

A tabela teste tem quase UM MILHAO de registros! Porém eu pedi o relatorio de apenas uma data que tem cerca de 3000 registros!
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Comando SQL x XBASE

Mensagempor alxsts » 07 Jan 2015 21:56

Olá!

Qual gerenciador de banco de dados você usa?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Comando SQL x XBASE

Mensagempor janio » 08 Jan 2015 09:55

Ola,

HeidSql 8.3
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Comando SQL x XBASE

Mensagempor Poka » 08 Jan 2015 11:12

Janio, falando em velocidade, estou começando a mexer com Firebird + odbc.
Fiz um teste simples somente criando uma tabela com campo codigo e inserindo 100.000 registros. No Firebird demora +- 3 minutos, no Harbour+dbf 3 (TRES) SEGUNDOS.

Poka.
Avatar de usuário

Poka
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 509
Data de registro: 25 Out 2004 21:26
Cidade/Estado: Leme/SP
Curtiu: 0 vez
Mens.Curtidas: 23 vezes

Comando SQL x XBASE

Mensagempor alxsts » 08 Jan 2015 23:25

Olá!

HeidiSQL é uma ferramenta para manejo e administração de bancos de dados.

Um Sistema Gerenciador de Banco de Dados Relacional (SGBDR) é o software que gerencia suas instâncias nos servidores.

Com o HeidiSQL, você pode manejar instâncias dos SGBDRs MySQL e MS SQL Server.

Qual delas você está utilizando?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Comando SQL x XBASE

Mensagempor janio » 09 Jan 2015 08:59

Oxente,

Na primeira msg deixei claro que uso MYSQL!

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Comando SQL x XBASE

Mensagempor Itamar M. Lins Jr. » 09 Jan 2015 11:28

Esta velocidade é lenda.
Na época tudo era DBF ou COBOL, o SQL era para os eleitos... até onde sei no COBOL era criado tudo pelo programador não tinha RDD
Era melhor quando em rede PONTO a PONTO o pessoal do SQL ria dos DBF´s corrompia indices uma bagunça, estragava o HEAD do DBF etc...
Mas era uma questão da arquitetura CLIENTE/Servidor, não um problema do DBF em si, depois com o ADS, CACHÉ e outros com uso via TCP/IP parou esses problemas.
o Dbf é rápido para o propósito que foi feito, não perde p/ SQL, o problema é que não tinha os motores (LetoDB, NetIO...) para DBF em rede.
Agora podemos discutir no bom sentido os comandos do SQL que não tem no DBF, mas que não é uma limitação do DBF e sim dos motores(daemons) no ADS podemos usar sintaxe SQL... o pessoal sente falta dos INNER JOINS... mas como tudo tem os prós e contras. Eu por exemplo não fico com desdém de quem usa DBF eu uso, tem muita gente usando SQL e não sabe metade das coisas de quem usa DBF. Por exemplo criando campos desnecessários gigantes, abusando dos processadores, megalomaníacos do SQL..., compram o RDDSQL e depois são ensinados a remover, os "Do wihile" por "SELECT", "REPLACE" por "UPDATE" e assim vão trocando tudo por SQL, era melhor usar logo SQLMIX que é gratuito, ou ADO entre outros. Porque não adianta só colocar duas linhas e dizer agora eu uso SQL, é preciso fazer toda uma adaptação, remodelar tudo para tirar proveito e se não fazer isso não adianta. No meu ponto de vista é redundância, usar conversor de sintaxe DBF p/ SQL, é comprar Ferrari p/ andar em estrada de barro.

A manutenção do MySQl, Postgree não se compara com DBF, para quem sabe trabalhar com DBF, está cada vez mais difícil abandona-los temos boas ferramentas.

Dois top de linha que usam DBF

http://www.intersystems.com/our-products/cache/cache-overview/
http://scn.sap.com/community/ads

Pena que são caros.

Eu vou de LetoDB por enquanto.

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

Comando SQL x XBASE

Mensagempor janio » 09 Jan 2015 12:46

Nao posso dizer que sei programar e muito menos que 'sei' trabalhar com dbf, até pq programo por hobby e não como meio de vida.

Mas desde comecei com este negocio q NUNCA tive índices corrompidos, nunca tive perda de dados... nunca tive problemas nenhum com dbf. Fui para MySql com Mediator por justamente achar q quem usa dbf ta 'atrasado'. Nessa época não tinha o LetoDB e nem esse negocio de criar dbf na memoria, isso eh o maximo!

Se fosse hj continuaria com dbf em todos os meus sistemas!

Mininuuuu tu precisa ver o que eh sofrimento eh qndo precisamos restaurar algum backup em mysql. Pelo amor de Deus! Eh o dia inteirim recriando os índices, enquanto q o mesmo serviço, se em dbf fosse, seria alguns minutos.

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Comando SQL x XBASE

Mensagempor frazato » 09 Jan 2015 16:36

Boa tarde! também faço parte de pessoal que já inicie o processo de mudar de DBf para SQL usando na epoca o MEDIATOR, ficou muito lento na época e acabei desistindo, hoje tenho um sistema de ERP para supermercado com base DBF/CDX com mais de 12 milhões de registro e um 1gb de tamanho sem nenhum problema de indice ou velocidade, uso atualmente GTWVW e xharbour 0.99.70 todos os terminais fazem acesso remoto usando o GO-Global com velocidade muito rápida tanto pra consulta quanto para geração de relatórios.

Tenho um terminal de cotação online para digitação de preço fora do mercado usando LETODB ( fantástico) muito rápido, baste apenas pegar as funções e gerar um executável aparte usando o LETODB+harbour e libere o acesso ao servidor pela porta compartilhando os dados locais ou seja tenho um terminal 100% online.

Nunca tive problema de quebra de indice ou perda de dados. Tive que fazer ajustes no sistema pra trabalhar usando GO-Global, imagine que você tem vários usuarios usando ao mesmo tempo a mesma maquina, no meu caso crie pastas temporarias de acordo com a variavel de usuario.

Todo a parte de configuração e montagem do servidor foi feita por uma amigo meu de São josé dos campos ( Matriz nossa ) a parte de impressão e normal, gero o arquivo txt de sai e depois imprimo ou pela ltp ou pelo win_prn.

Frazato
Anexos
tela_foruma.jpg
frazato
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 219
Data de registro: 08 Jul 2004 07:45
Curtiu: 0 vez
Mens.Curtidas: 4 vezes

Comando SQL x XBASE

Mensagempor paiva » 12 Jan 2015 11:21

BOM dia.

Gostaria de tirar uma DUVIDA. Referente ao tema.

Pessoalmente uso em TODOS os clientes o TS (2003 2008) OU um programa gerenciador de MULTI TASK que funciona em xp W7 etc http://deepxw.blogspot.com.br/2009/04/u ... patch.html

em REDE o sistema fica uma carroça por este motivo Não utilizo desta forma.

DUVIDA em LETODB ou NETBIOS ou outros como funcionam de FATO ?

ex: se acesso pela rede uma base GRANDE e vou lendo reg a reg e montando um relatório,
os registros UM a um NAO seriam transportados para o TERMINAL para o Prg selecionar e ver o que fazer com ele ?

SOMENTE seria processado no servidor ALGUNS comandos ? Tipo reindexação

SE tiver uma forma OTIMA para usar em rede usando algum desses produtos, Poderia coexistir na forma de acesso por TS e por este produto em REDE ?

Desde já agradeço
paiva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 248
Data de registro: 04 Ago 2005 10:28
Curtiu: 0 vez
Mens.Curtidas: 9 vezes

Comando SQL x XBASE

Mensagempor rochinha » 12 Jan 2015 11:59

Amiguinhos,

Janio, como você tem certeza que mesmo usando o Mediator, no momento da filtragem é este RDD que está ativo?

O RDDCDX por natividade pode estar sendo carregado e atrapalhando o RDD Mediator. Quando voce comanda USE arquivo INDEX indice TAG nometag, este comando está mesmo sendo usado pelo RDD Mediator?

O fato de levar menos tempo, pode ser o RDD nativo trabalhando.
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: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Comando SQL x XBASE

Mensagempor janio » 12 Jan 2015 12:20

Rochinha,

Acho q vc não entendeu... minha base de dados eh MySql, ok? Como uso Mediator, posso usar comandos xbase ou fazer as consultas diretamente em comandos sql (Select *).

Postei dois exemplos: Um usando SELECT * FROM bla bla, Outro usando nosso velho Do While (lendo registro a registro). Nas duas maneira a base eh a mesma (MySql), mas na segundo crio um dbf temporário pra facilitar a organização dos dados!

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Comando SQL x XBASE

Mensagempor JoséQuintas » 13 Jan 2015 18:41

No SELECT de datas, tem que colocar a data no formato do MySql.
Pra facilitar uso algumas funçõeszinhas, por exemplo, DateSql().

cSql := "SELECT * FROM banco WHERE data > " + Quoted( DateSql( Data ) )

FUNCTION Quoted( cString )
   RETURN [']  + cString + {'}

FUNCTION DateSql( dData )
   IF Empty( dData )
       // mysql strict mode
       RETURN "NULL"
       // RETURN Quoted( "0000-00-00" )
   ENDIF
   RETURN Quoted( Transform( Dtos( dData ), "@R 9999-99-99" ) )


Sobre velocidade:
No MySql ou qualquer banco server, tudo funciona até mesmo sem índice.
Se houver índice que agilize a pesquisa, o MySql vai fazer uso dele.
Então pra agilizar é criar índices.

E se usar registro a registro, tipo do while .not. eof(), aí não tem server que deixe rápido.
Tente fazer um SELECT que traga tudo o mais pronto possível.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Comando SQL x XBASE

Mensagempor Karine Lima Almeida » 15 Jun 2015 15:38

Olá,

Janio, gostaria de saber se você conseguiu resolver o problema da lentidão do sql X comando xbase. Pois enfrento esse mesmo problema!
Minhas querys em sql levam em torno de 12 segundos para um arquivo de 1 milhão de registros, sendo que usando sintaxe xbase, levam 1,5 segundo.
Quando ultilizo somente "Use as "select *" sem o : NEW SCROLLABLE , é um pouco mais rápido, só que eu não posso usar "skip -1", :/
Enfim, tudo tem " um porém" no Mediator pra mim!
Avatar de usuário

Karine Lima Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 25
Data de registro: 27 Set 2013 10:38
Cidade/Estado: Limeira-SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Próximo



Retornar para SQL

Quem está online

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