Clipper On Line • Ver Tópico - Harbour - SQLMIX x SQLRDD
Página 1 de 6

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 20 Fev 2015 08:45
por pauloa1
Olá Leonardo!

Nesta migração para harbour, como você vai fazer com sqlrdd ?

Paulo

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 11:00
por Itamar M. Lins Jr.
Harbour que está osso, mudou muita coisa tambem.

Esperou tempo demais. É o preço a pagar.

Ainda bem que ninguém está parado do lado de cá. Se só existisse o xHb com aquela equipe eu já estaria usando outra linguagem. 0% de confiança... Linguagens tem que ser mantidas pela comunidade, não apenas por empresas com interesses comerciais.

Saudações,
Itamar M. Lins Jr.

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 13:17
por janio
Eu imagino que o Leonardo use comandos SQL. Em sendo assim, ha outras libs no harbour 'de gratis' que faz a mesma coisa. Porém, imagino que o pulo do gato do SQLRDD seja o mesmo codigo (xbase ou sql) ser compativel com varios bancos de dados (mysql, postgree, firebird, etc). Esse talvez seja o impecilho para migração para harbour...

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 13:27
por Itamar M. Lins Jr.
seja o mesmo codigo (xbase ou sql) ser compativel com varios bancos de dados (mysql, postgree, firebird, etc).

Com SQLMIX no Harbour temos o mesmo resultado, até melhor talvez.
O bom do SQLRDD é que o trauma fica escondido. Depois vc aprende que tem que mudar tudo da mesma forma.
Remover Do WHILE, LOCATE..., Primeio vc migra depois aprende que para resultados melhores precisa refazer os códigos.

Saudações,
Itamar M. Lins Jr.

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 18:06
por sygecom
Itamar M. Lins Jr. escreveu:
seja o mesmo codigo (xbase ou sql) ser compativel com varios bancos de dados (mysql, postgree, firebird, etc).

Com SQLMIX no Harbour temos o mesmo resultado, até melhor talvez.
O bom do SQLRDD é que o trauma fica escondido. Depois vc aprende que tem que mudar tudo da mesma forma.
Remover Do WHILE, LOCATE..., Primeio vc migra depois aprende que para resultados melhores precisa refazer os códigos.

Saudações,
Itamar M. Lins Jr.


Negativo, o SQLRDD é 1000% superior a SQLMIX, por tratar todo o uso do XBASE como se fosse DBF, e com um ótimo desempenho, enfim não espero que você compreenda isso por que de fato nunca deve ter usado SQLRDD na pratica.
Sem duvida se tivesse SQLRDD para HARBOUR eu usaria. Para falar bem a verdade estou muito feliz com xharbour e MSVC, quero tentar usar o Harbour para poucas coisas mesmo, mas o Harbour mudou muito os nomes de funções, mas sem stress, a vida segue.

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 19:06
por Itamar M. Lins Jr.
enfim não espero que você compreenda isso por que de fato nunca deve ter usado SQLRDD na pratica.

Engano seu, o SQLRDD não é nenhuma novidade.
O pessoal do Protheus(TOTVS) usa isso eu tenho aqui instalado na minha maquina. SQLRDD é uma cópia...
O que para vc pode ser uma maravilha para outras pessoas é uma aberração, pois o pessoal quer é se livrar de DBF´s.
Isso foi adotado para não se perder o legado, lá da época da Microsiga...DbAcess, etc...
por tratar todo o uso do XBASE como se fosse DBF,

SQLMIX faz a mesma coisa com acesso nativo e o Harbour tem outras opções ODBC, ADO que funciona, e o pessoal não manda vc comprar nada.

Saudações,
Itamar M. Lins Jr.

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 20:24
por pauloa1
Também uso Sqlrdd e somente com comandos sql, ele tem bastante funções que ajudam no geral , como manutenção de tabelas, controles etc...
Uma pena não ter para harbour.

Quem usa Sqlrdd sabe do que estou falando.
Já fiz alguns testes com sqlmix, nem se compara, mas ainda acho que um dia vai ter algo semelhante para Harbour.

Paulo

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 22:03
por Itamar M. Lins Jr.
Me explique uma coisa:
Qual é o comando SQL que não se pode usar com SQLMIX ?
Programaticamente, tem como vc demonstrar porque é melhor ?
Partindo do principio que não queremos ver nada de comandos de manipulação usados no DBF.

Saudações,
Itamar M. Lins Jr.

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 23:14
por sygecom
É simples,pegue uma tela com uns 100mil registro abra usando Sqlmix e depois abra usando SQLRDD mostrando em um BROWSE() e sinta a diferença, como eu disse, não espero que compreenda, tire suas conclusões e boa sorte.

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 20 Fev 2015 23:38
por Itamar M. Lins Jr.
não espero que compreenda, tire suas conclusões e boa sorte.

Ué ? Então vc não sabe o que é LIMIT ? Quem em sã consciência vai trazer via SELECT 100.000 registros de vez ? Vai trazer o tanto que cabe no CACHE do Browse.
Se todos programassem com a cabeça no DBF seria da forma que vc está falando, mas felizmente quem usa SQL pensa de outra forma.
Lembrem-se quem usa SQL nas outras linguagens PHP, JAVA, também não fica chamando 100.000 registros de uma só vez.... Pense nisso usando WAN, não num ambiente LAN...Nem usamos DELETE, nem PACK, nem RECNO() e por ai vai.

SQLRDD cria o estilo de trabalhar com base de dados igual a um DBF, que para uns é bom, para outros é aberração. Só de requisições que faz ao servidor em um simples "USE" e outros testes que já tínhamos feito aqui não é brincadeira.

Saudações,
Itamar M. Lins Jr.

SET TIMER na HwGui 2.19 não funciona

MensagemEnviado: 21 Fev 2015 00:56
por Itamar M. Lins Jr.
Para não gerar polêmica de novo.
Acredito que o SQLRDD tem sua serventia. Mas não é para ser comparado com SQLMIX, uma vez que são propostas diferentes.
É a mesma coisa de comparar Pera com Biscoito.
O SQLMIX é aberto, todos podem verificar, mexer no código, pode trabalhar em conjunto com qualquer linguagem. Já o SQLRDD cria uma tabela exclusiva com campos extras que não pode ser acessada por outros programas. Uma tabela criada pelo SQLRDD simula um DBF, isso é um empecilho para quem domina outras linguagens de programação.

No mundo normal um "CREATE TABLE nome", só criará esse campo, no SQLRDD vai criar outros campos R_E_C_N_O, D_E_L_E_T_E_D, etc, etc..., vai fazer filtro para os deletados e outras coisas que não passa pela cabeça de quem está acostumando a usar SQL com outras linguagens.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 21 Fev 2015 07:51
por sygecom
Amiguinho Itamar, não sabes o que fala, reveja seus conhecimentos sobre SQLRDD.

Paulo,
Eu uso apenas PostgreSQL, então aos poucos estou migrando para SQLLIB Open Source mesmo em xHarbour, depois vou analisar novamente se migro ou não para Harbour.

Comecei esse negocio de migrar para tentar ajudar a Hwgui a continuar evoluindo, mas acabei percebendo que é melhor deixar quieto, a Hwgui do SVN regrediu de uma forma enorme, nem com Harbour e nem com xHarbour ela funciona mais, só roda o básico do básico, que é uma pena. Tenho a mais de um ano um projeto de migração de SQLRDD para SQLLIB e HWGUI para QT5XHB que é o que pretendo usar em meus aplicativos.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 21 Fev 2015 08:03
por pauloa1
Leonardo!

Qual a vantagem de migrar de SQLRDD para SQLLIB ?

Paulo

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 21 Fev 2015 08:09
por sygecom
Assim como não tem vantagem na SQLMIX não tem vantagem na SQLLIB. Eu estou fazendo isso para poder usar QT5xHB com Harbour, apesar que já consigo usar QT5xHB com xharbour+MSVC+SQLRDD, porém sinto o projeto maravilho como QT5xHB pode ser melhor usado com Harbour, se no final tudo ocorrer bem com QT5xHB então continuarei com SQLRDD, só por isso.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 21 Fev 2015 10:35
por pauloa1
Leonardo!

Qual é o caminho das pedras para compilar xHarbour com MSVC ?

Paulo

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 21 Fev 2015 10:56
por Itamar M. Lins Jr.
Amiguinho Itamar, não sabes o que fala, reveja seus conhecimentos sobre SQLRDD.

De novo ? O que já escrevi está errado ?
Por acaso o SELECT do SQLRDD é mais rápido do que o SELECT do SQLMIX ?
Quando usamos no SQLMIX dbusearea(...,select...) não é a mesma coisa que vc faz no SQLRDD porque simplesmente o SQLRDD engana o usuário. Na tabela de 100.000 registros na qual se refere quem disse que o SQLRDD traz(abre) os 100.000 registros ? ele traz só um pedaço... vc quer que no SQLMIX traga tudo ? Compara e acha que um é mais rápido do que o outro. Pode olhar que tem lá no SQLRDD o quantidade de registros p/ trabalhar.
Com SQLMIX trabalhamos diretamente via comandos SQL o resultado da QUERY é virtual não acessamos diretamente. Com SQLRDD trabalhamos direto na tabela tem SKIP na tabela, GOTO etc..., porque ? é como expliquei o SQLRDD simula DBF isso para uns é bom para outros, não é bom.
Com o SQLMIX temos SKIP, GOTO, mas na tabela virtual no resultado da QUERY, podemos apaga-la que não afeta nada na tabela MATRIZ, só temos acesso de leitura e gravação via comandos SQL, SELECT, INSERT, DROP...

E continuo não sabendo o que falo... é verdade....

E o pessoal do Harbour continua usando os principais motores SQL sem nenhuma falta de SQLRDD. Enquanto outros criam uma dificuldade porque entrou numa arapuca, e agora não sabe como sair.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 21 Fev 2015 11:25
por Itamar M. Lins Jr.
a Hwgui do SVN regrediu de uma forma enorme, nem com Harbour e nem com xHarbour ela funciona mais, só roda o básico do básico, que é uma pena.

É exagero da sua parte.
Eu uso a 2.19 estamos quase sozinhos nessa empreitada a mais de 1 ano, simplesmente o Alexander foi abandonado e ainda tem os que torcem p/ que tudo dê errado porque acha que a dele é a melhor.

Mas enfim, bom mesmo são as ideias dos outros... todas copiadas, dos incompetentes do GPL.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 21 Fev 2015 12:09
por sygecom
Itamar M. Lins Jr. escreveu:
Amiguinho Itamar, não sabes o que fala, reveja seus conhecimentos sobre SQLRDD.

De novo ? O que já escrevi está errado ?
Por acaso o SELECT do SQLRDD é mais rápido do que o SELECT do SQLMIX ?
Quando usamos no SQLMIX dbusearea(...,select...) não é a mesma coisa que vc faz no SQLRDD porque simplesmente o SQLRDD engana o usuário. Na tabela de 100.000 registros na qual se refere quem disse que o SQLRDD traz(abre) os 100.000 registros ? ele traz só um pedaço... vc quer que no SQLMIX traga tudo ? Compara e acha que um é mais rápido do que o outro. Pode olhar que tem lá no SQLRDD o quantidade de registros p/ trabalhar.
Com SQLMIX trabalhamos diretamente via comandos SQL o resultado da QUERY é virtual não acessamos diretamente. Com SQLRDD trabalhamos direto na tabela tem SKIP na tabela, GOTO etc..., porque ? é como expliquei o SQLRDD simula DBF isso para uns é bom para outros, não é bom.
Com o SQLMIX temos SKIP, GOTO, mas na tabela virtual no resultado da QUERY, podemos apaga-la que não afeta nada na tabela MATRIZ, só temos acesso de leitura e gravação via comandos SQL, SELECT, INSERT, DROP...

E continuo não sabendo o que falo... é verdade....

E o pessoal do Harbour continua usando os principais motores SQL sem nenhuma falta de SQLRDD. Enquanto outros criam uma dificuldade porque entrou numa arapuca, e agora não sabe como sair.

Saudações,
Itamar M. Lins Jr.


Itamar,
Não estou falando em QUERY. Com QUERY uso pgsql do Rodrigo Moreno ou a SQLIB Open Source que também é muito boa. Você precisa ampliar e testar o uso da SQLRDD para ver como funciona.

Sobre a HWGUI, como você disse que está sozinho é por que você se dispôs a arrumar e testar tudo que foi desfeito, infelizmente não tenho essa disponibilidade, tento seguir um cronograma, assim que ele quebra, eu paro e espero a solução, assim posso a voltar a ajudar, fora isso se torna inviável eu continuar testando sendo que os problemas não são corrigidos.

E na verdade o Alexander é que abandonou a Hwgui por 5 anos, onde o Basso assumiu e fez muitas melhorias e agora o Alexander voltou e jogou tudo fora olhando apenas para lado dele, em vez de adaptar tudo para rodar com GTK, mas o Alexander é um ótimo profissional e tem conhecimentos muito avançados, então acredito que ele saiba o que está fazendo, mas para muitos isso se tornou um grande problema que para ajudar ele se tornar mais problema ainda.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 21 Fev 2015 13:26
por Itamar M. Lins Jr.
Ola!
Concordo com muita coisa que vc escreve mas isso ai em baixo é um exagero da sua parte.
o Alexander voltou e jogou tudo fora olhando apenas para lado dele,


Ele copiou tudo p/ a pasta contribs\ext_controls
Estão lá os controles criados pelo Luis Basso. Só que ele não testou nada nem usa, e fez esse serviço mal feito.
Acredito ele ele achava que o pessoal iria testar e corrigir as possíveis falhas, quando ele viu que ninguém estava fazendo nada começou a corrigir sozinho.

A intenção dele é fazer a HWGUI compatível com UNICODE, UTF8, etc... e acredito que conseguiu.
Você precisa ampliar e testar o uso da SQLRDD para ver como funciona.


O funcionamento é como eu expliquei. Não tenho interesse em ficar refém de ninguém... Nenhum acesso moderno a base de dados SQL funciona da forma como funciona o SQLRDD. Já falei aqui DBF por DBF eu uso LetoDB ou NetIO.
Não estou falando em QUERY. Com QUERY uso pgsql do Rodrigo Moreno ou a SQLIB Open Source que também é muito boa.

Então é isso, SQLMIX trabalha com QUERYS e vc acessa com ele as principais bases de dados, PgSql, MySQL, MSSQL...
Não é possivel com SQLMIX dar um "REPLACE X WITH Y" ou usar "DBAPPEND()"... pode até usar na QUERY virtual mas não é salvo na tabela MATRIZ. Para acessar a tabelas Matriz só via INSERT INTO, UPDATE..., por isso não podemos comparar SQLMIX com RDDSQL, alias o SQLRDD não se compara com quase nada do mercado, apenas com o DbAccess que veio muito antes dele, e faz quase a mesma coisa.

Aqui um dos problemas de trabalhar imitando DBF no SQL causa.
https://groups.google.com/forum/#!topic/comp.lang.xharbour/hdQvLSZ72YI
E outros efeitos colaterais, inimagináveis... que só quem trabalhar com essa técnica sabe os pepinos que já passamos para resolver. Estou falando isso no caso de integração com outros programas.
Leia bem devagarinho isso ai em baixo...
Hi,
After transferring all my dbfs to SQL Server and linking applications with SQLRDD i've started to test my applications with SQLRDD in multiuser environment.
1. You can open exclusive tables by different instaneces of application
2. If opened exlusive: you can flock(), rlock() or update in both.
3. If opened shared: dbrlock() works as expected : can't dbrlock() locked record OK
4 If opened shared: you can't flock() if there is another flock() in other app. OK
5. If opened shared: you can flock() even if dbrlock() is done in other application, you can dbrlock() even if flock() is done also.
6. When rlock() is established and you try to update field (with no locking ) in locked record in other app then no error is thrown ( as in DBFCDX ) but infinite loop starts until dbunlock is issued in first app. Maybe this has something common with transactions levels i'm not aware of. ( still SQL newbie )

For me points 3 and especially 6 are the main problem because:

1. I use sometimes flock() which can't be successfull over rlock() (as in DBFCDX)
2. I planned to rewrite common parts of code to move to "try / catch" model with transactions and i've suppoused then inside this block the error will be thrown if a record/file is locked. Now I know this seems wrong assumption and rewriting of all code is needed because YOU CAN'T MIX RLOCK() WITH UPDATE ERROR CATCHING INSIDE TRANSACTION like is adviced. I'have a lot of personalized *.hrb procedures with CDX style coding i hoped to preserve some time after moving to SQL.

If i'm wrong or you can help me with understanding SQLRDD I will be gratefull.

Andrzej Morgiewicz

PS. For test and development:
I'm using SQL Server 2012,
I'm using SQLRDD libs from 2013.08.25 and 2014.08.11 ( i've got from Rafael, but this shows wrong numeric field len ),
I'm using current SVN xHarbour,
I'm also testing with xbscript linked with above libs.

PS. I can't install my current libs from xHarbour.com because after downloading and istalling i'm getting empty lib folder :(


E sou eu que não sei nada de SQLRDD... Para mim é o barato que sai caro só isso, uma arapuca, porque ninguém trabalha dessa forma no mundo moderno.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 07:26
por sygecom
Caraca, pelo jeito você nunca usou nenhum deles para saber a diferença entre SQLMIX, SQLRDD e DBACESS(TOTVS) que você citou antes. Vamos acrescentar o Mediator para explicar para todos a diferença entre eles ?

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 08:26
por janio
Se eu tenho um cadastro co 100.000 registros e eu chamo um browse pra eu procurar algum registro (cadastro de produtos com pesquisa letra-a-letra, por exemplo)... eu devo mostrar os 100.000 registros no browse num eh? ou não?

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 10:44
por pauloa1
Janio!

Depende, se for uma consulta via comando sql em postgres por exemplo, você pode usar o Limit + número de registros a retornar.
Exemplo, select codigo, nome from tabela limit 20 , vai trazer os primeiros 20 registros, depois em cada click pode trazer mais 20 e assim vai...

Depende também da lib Gráfica usada no browser, tem alguns browsers que só trazem os registros mostrados na tela.

Mas é tudo questão de como selecionar.

Paulo

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 11:31
por Itamar M. Lins Jr.
pelo jeito você nunca usou nenhum deles

Por favor melhore o nível de dialogo. Assim novamente não vamos a lugar nenhum.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 11:48
por aferra
Hummm, interessante essa discussão, onde encontro material sobre o SQLMIX?

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 12:20
por Itamar M. Lins Jr.
eu devo mostrar os 100.000 registros no browse num eh? ou não?

Pois é Janio ninguém em sã consciência faz isso, traz só o tanto que cabe no browse ou cache.
Até no letodb temos isso.
; The number of records to read into the cache
; Cache_Records = 10

Porque no SQLMIX temos que trazer tudo ? Por isso o que sygecom escreveu está totalmente errado. Se ele não traz os 100.000 registros no SQLRDD porque quer que o SQMIX traga ?
O tempo de resposta da QUERY a demora é do MOTOR(MySQL...) em questão não do SQLRDD ou SQLMIX, isso vai depender do tamanho do retorno dos dados.
Eu posso pedir uma query de 10 linhas e a demora ser de 10minutos, se nesta QUERY conter IMAGENS ou WAV. (SOM) por exemplo... porque isso gera trafego na rede, imagine numa rede sem fio por exemplo.

Por isso eles não sabem responder partem p/ ridicularização, quando o assunto é sintaxe SQL. Porque quando usamos SQL em tudo, fica tudo igual, não há diferença entre SQLRDD ou SQLMIX.

Quando escrevo "SELECT TABLE clientes LIMIT 50" é um comando UNIVERSAL para os SGBD que adotam a sintaxe SQL ANSI, então não muda NADA se vc usa SQLRDD, SQLMIX,...

Com a sua popularização e sucesso, organizações como o Instituto Americano Nacional de Padrões (ANSI) e a Organização Internacional de Padronização (ISO), resolveram padronizar a linguagem SQL. Em 1986 foi criado um padrão ANSI e em 1987 foi criado um padrão ISO. A partir de então, surgiram várias versões do padrão SQL, onde cada versão acrescenta novos comandos ou funcionalidades. Algumas versões do padrão ANSI existentes até a presente data são:
...


No quesito velocidade sempre irá depender do tamanho da MALHA, da QUERY em questão que está sendo manipulada.
Por isso os usuários do SQLRDD estão ajoelhados(sonhando) pedindo p/ o pessoal do xHarbour.com fazer uma versão p/ Harbour que compile no MingW por exemplo. Os caras não irão fazer. Já houve até promessa mas até agora nada. Essa conversa rola nos foruns já tem dois anos indo p/terceiro ano já.
E mesmo que faça seria p/ atender uma pequena parte de pessoas que acham interessante simular DBF em bases SQL. Porque no Harbour temos outras alternativas enquanto no xHarbour ninguém da manutenção na pasta contrib por exemplo. Ninguém ensina usar o DRIVE do Rodrigo Moreno p/ Postgree que é muito bom.
[editado]
O Rodrigo Moreno foi uma das pessoas mais boicotadas na historia do xHarbour. O Rapaz é uma sumidade entende profundamente desse assunto. E há anos não vejo mais nada dos posts dele. Foi mais um que o ".com" $$$$$ deu fim, assim como o rapaz que fez a GTWVW e muitos outros...

O Przemek fez ajustes no hb_serialize... por exemplo p/ poder compilar o SQLRDD no Harbour mas os caras estão morrendo de medo de ser o tiro de misericórdia, a pá de cal do xHarbour. Pelo menos acredito que os usuários brasileiros sujeito debandar tudo p/ Harbour ou os poucos que restam.

2013-01-23 08:56 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* harbour/src/vm/classes.c
* updated some comments
* renamed hb_setClsHandle() to __objSetClassHandle()
old function name covered by HB_LEGACY_LEVEL5 macro

* harbour/src/rtl/itemseri.c
+ added support for deserialization xHarbour HB_SERIALIZE() output.
All types except codeblocks are supported. I haven't added support
for xHarbour serialized data with cyclic references. If it's
really necessary then I can implement it.
I also added workaround for bug in xHarbour serialization code so
now Harbour correctly decodes data with LONGLONG numbers though
xHarbour cannot correctly decode its own stream.
Now Harbour can deserialize xHarbour data encoded by HB_SERIALIZE()
and stored somewhere. It can be important in migration process, i.e.
SQLRDD uses HB_SERIALIZE() to encode data in memos so now SQLRDD
port for Harbour should read old tables and decode xHarbour items
correctly. The same is for any other tools which saves HB_SERIALIZE()
output in xHarbour.


Não faz porque ? Tirem suas conclusões.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 13:02
por Itamar M. Lins Jr.
onde encontro material sobre o SQLMIX?

No Harbour, na pasta contrib\hbsql e em outras pastas tem exemplos.
na pasta \contrib\sddodbc\tests

Usando SQLMIX em BASE MDB (access) o SQLRDD não faz isso!!!

#require "rddsql"
#require "sddodbc"

#include "simpleio.ch"

REQUEST SDDODBC, SQLMIX

PROCEDURE Main()

#if defined( __HBSCRIPT__HBSHELL )
   rddRegister( "SQLBASE" )
   rddRegister( "SQLMIX" )
   hb_SDDODBC_Register()
#endif

   Set( _SET_DATEFORMAT, "yyyy-mm-dd" )

   rddSetDefault( "SQLMIX" )
   ? "Connect:", rddInfo( RDDI_CONNECT, { "ODBC", "DBQ=" + hb_DirBase() + "..\..\hbodbc\tests\test.mdb;Driver={Microsoft Access Driver (*.mdb)}" } )
   ? "Use:", dbUseArea( .T., , "select * from test", "test" )
   ? "Alias:", Alias()
   ? "DB struct:", hb_ValToExp( dbStruct() )
   Inkey( 0 )
   Browse()

   INDEX ON FIELD->SALARY TO salary
   dbGoTop()
   Browse()
   dbCloseArea()

   RETURN


Conectando e usando com MySQL.

#require "rddsql"
#require "sddmy"

#include "dbinfo.ch"
#include "error.ch"

REQUEST SDDMY
REQUEST SQLMIX

ANNOUNCE RDDSYS

FIELD RESIDENTS

PROCEDURE Main()

#if defined( __HBSCRIPT__HBSHELL )
   rddRegister( "SQLBASE" )
   rddRegister( "SQLMIX" )
   hb_SDDMY_Register()
#endif

   rddSetDefault( "SQLMIX" )

   ? "RDDs:"; AEval( rddList(), {| x | QQOut( "", x ) } )

   IF rddInfo( RDDI_CONNECT, { "MYSQL", "localhost", "test", , "test" } ) == 0
      ? "Unable connect to the server"
      RETURN
   ENDIF

   CreateTable()

   ? "Let's browse table (press any key)"
   Inkey( 0 )
   dbUseArea( .T., , "SELECT * FROM country", "country" )
   Browse()

   ? "Let's browse table ordered by resident count (press any key)"
   Inkey( 0 )
   INDEX ON field->RESIDENTS TAG residents TO country
   Browse()

   dbCloseAll()

   RETURN

STATIC PROCEDURE CreateTable()

   ? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )
   ? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" )
   ? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600), ('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" )

   RETURN


Conectando e usando com PgSQL(PostGres)
#require "rddsql"
#require "sddpg"

#include "dbinfo.ch"
#include "error.ch"

REQUEST SDDPG
REQUEST SQLMIX

ANNOUNCE RDDSYS

FIELD RESIDENTS, CODE, NAME

PROCEDURE Main()

   LOCAL tmp

#if defined( __HBSCRIPT__HBSHELL )
   rddRegister( "SQLBASE" )
   rddRegister( "SQLMIX" )
   hb_SDDPG_Register()
#endif

   rddSetDefault( "SQLMIX" )

   ? "RDDs:"; AEval( rddList(), {| x | QQOut( "", x ) } )

   IF rddInfo( RDDI_CONNECT, { "POSTGRESQL", "postgresql://localhost/postgres" } ) == 0
      ? "Unable connect to the server"
      RETURN
   ENDIF

   CreateTable()

   ? "Let's browse table (press any key)"
   Inkey( 0 )
   dbUseArea( .T., , "SELECT * FROM country", "country" )
   Browse()

   ? "Let's browse table ordered by resident count (press any key)"
   Inkey( 0 )
   INDEX ON field->RESIDENTS TAG residents TO country
   Browse()

   dbCloseArea()

   /* append and goto tests */

   dbUseArea( .T., "SQLMIX" , "SELECT * FROM country", "country" )

   FOR tmp := 500 TO 600
      dbAppend()
      field->CODE := StrZero( tmp, 3 )
      field->NAME := "Test append " + hb_ntos( tmp )
   NEXT

   dbGoto( 101 )

   INDEX ON field->RESIDENTS TAG residents TO country

   dbCloseAll()

   RETURN

STATIC PROCEDURE CreateTable()

   LOCAL tmp

   ? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )
   ? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int)" )
   ? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600), ('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" )

   FOR tmp := 1 TO 100
      rddInfo( RDDI_EXECUTE, "INSERT INTO country VALUES ('" + StrZero( tmp, 3 ) + "', 'TestSQL " + hb_ntos( tmp ) + "', 3369600)")
   NEXT

   RETURN


E com FB que eu mesmo usei aqui.
cRdd  := RDDSETDEFAULT( "SQLMIX" )
cAttributes:="Server=;Database=127.0.0.1:c:\dados\datafb.fdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cAttributes} )

IF nConn == 0
   hwg_Msginfo( "Não conectado ao servidor: " + str(RDDINFO( RDDI_ERRORNO )) + hb_eol() + RDDINFO( RDDI_ERROR ) )
   RDDSETDEFAULT( cRdd )
   RETURN
ENDIF

DBUSEAREA( .T.,"SQLMIX", "select * from PRODUTO", "xx" )
index on refere TO temp1
DBUSEAREA( .T.,"SQLMIX", "select * from TAB_PRECO", "xZ" )
index on StrZero(CODIGO,15) TO temp2
DBUSEAREA( .T.,"SQLMIX", "select * from TAB_PROD", "xy" )
index on StrZero(INPRODUTO,15) TO temp3


Com MSSQL que eu fiz tambem.
cRdd  := RDDSETDEFAULT( "SQLMIX" )
nConn := RDDINFO( RDDI_CONNECT, { "ODBC", "Driver={SQL Server Native Client 10.0};Server=localhost;database=DATA_Z;Uid=MATRIZ;Pwd=zzzz" })

IF nConn == 0
   hwg_Msginfo( "Não conectado ao servidor: " + str(RDDINFO( RDDI_ERRORNO )) + HB_EOL() + RDDINFO( RDDI_ERROR ) )
   RDDSETDEFAULT( cRdd )
   RETURN
ENDIF
DBUSEAREA( .T.,"SQLMIX", "select * from dbo.TB_PRODUTOS_", "tp" )
index on id_produto tag 01 to yy_temp

DBUSEAREA( .T.,"SQLMIX", "select * from dbo.VW_DADOS_", "xx" )
index on codigo   tag 01 to xhwg_temp
index on idproduto tag 02 to xhwg_temp


Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 13:32
por sygecom
Eu não disse para trazer 100 mil registros no Browse, eu disse para abrir uma tabela que tenha 100 mil registros ou mais. Itamar, você não entende o que você mesmo diz e nem lê, você não lê direito.
SQLRDD não precisa de um motor além do próprio SGBD, no lado cliente ele resolve todas as migração XBASE para SQL, já o MEDIATOR e DBACESS(TOTVS) resolve isso no lado servidor , por isso precisa instalar o aplicativo deles para para rodar no servidor.

SQLMIX por sua vez interpreta parte dos comando XBASE, ou seja, o SQLRDD consegue interpretar tudo, por sua vez posso usar um mesmo comando para rodar com POSTGRESQL, MYSQL, ORACLE e etc.... sem precisar colocar ou testar um IF para cada coisa.

Se você abrir usando o comando abaixo no SQLRDD ele vai abrindo conforme conforme vai navegando na tabela os registros.

use agenda alias agenda shared
browse()

Já para poder ter esse comportamento usando SQLMIX o programador já teria que programar uma paginação e etc...

Em fim, o SQLRDD tem milhares de pessoas/empresa usando, acho difícil enganar tanta gente assim, algo de bom ela deve ter, boa sorte e bons estudos.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 13:37
por sygecom
O pior cedo é aquele que não quer ver, o fanatismo deixa a pessoa cega...

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 14:54
por Itamar M. Lins Jr.
SQLRDD não precisa de um motor além do próprio SGBD, no lado cliente ele resolve todas as migração XBASE para SQL, já o MEDIATOR e DBACESS(TOTVS) resolve isso no lado servidor , por isso precisa instalar o aplicativo deles para para rodar no servidor.

Sim e o que que tem isso ?
É a forma que eles desenvolveram. Isso é só a instalação mas o funcionamento é parecido com o SQLRDD. SIMULAR DBF.

SQLMIX por sua vez interpreta parte dos comando XBASE, ou seja, o SQLRDD consegue interpretar tudo, por sua vez posso usar um mesmo comando para rodar com POSTGRESQL, MYSQL, ORACLE e etc.... sem precisar colocar ou testar um IF para cada coisa.

A conversa não foi essa. É sob a superioridade do SQLRDD em relação ao SQLMIX, eu só mostrei aqui que p/ uns é bom para outros é ruim.
São poucas pessoas que usam 3 ou mais bases diferentes. (MySQL/PostGres/MSSQL...) a pessoa escolhe um e segue... com o tempo faz possíveis alterações p/ outras bases. E tem ainda outras coisa que o pessoa está usando chamada STORED PROCEDURES.

Se você abrir usando o comando abaixo no SQLRDD ele vai abrindo conforme conforme vai navegando na tabela os registros.
use agenda alias agenda shared
browse()

É isso que estou dizendo o tempo todo. Para uns é bom para outros é ruim.
A pessoa não quer usar USE AGENDA .... nem DbGotop(),DBGoBottom(), nem DbSkip(), ela não usa isso nem sabe usar, ela usa comandos SQL!!!
Com SQLRDD vai continuar usando sintaxe xBase...
O pessoal do Xailer tem seu RDD nativo que faz isso tudo só que p/ MySQL e SQLITE...
Conexión con múltiples bases de datos: Nativo SQLITE y MYSQL, ADO y como Web Service


SQLMIX o programador já teria que programar uma paginação e etc...

Correto e é assim em qualquer lugar. Mas com SQLMIX não necessariamente, pois a QUERY é um DBF real não é simulado. é VIRTUAL.
Quem está usando SQLITE no Harbour tambem não trabalha com sintaxe DBF.

Pense nisso a nível de browse(FireFox/IE/Chrome...) o pessoal procura usa coisas genéricas, para adaptação no conceito geral.
Também por causa da adaptação no browse() do Harbour(skip,etc) o pessoal prefere usar ADO direto, que no Harbour também funciona.

Eu sei que o SQLRDD é uma ferramenta quer serve para vc por exemplo, só que não é o mesmo conceito da SQLMIX.

Vc que disse SQLMIX é inferior, compara e diz que SQLRDD é 1000% superior e eu que sou bitolado ?
Apenas estou tentando demonstrar aqui que são conceitos diferentes, que existe outras opções e opções boas p/ trabalhar com as principais bases de dados do mercado com harbour sem desembolsar nenhum centavo.

Enquanto vc defende um produto pago, eu estou mostrando a proposta de cada um. E não é de forma nenhuma a melhor opção para todos.
E ainda sou cego!

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 15:09
por Itamar M. Lins Jr.
tem milhares de pessoas/empresa usando, acho difícil enganar tanta gente assim,

Peça p/ essas pessoas usarem SQLRDD com C# ou com JAVA !!!!

Quem sabe vc vai conseguir entender o que estou falando.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 17:19
por aferra
Grato Itamar, irei estudar o que passou...

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 19:07
por Itamar M. Lins Jr.
Eu não disse para trazer 100 mil registros no Browse, eu disse para abrir uma tabela que tenha 100 mil registros ou mais. Itamar, você não entende o que você mesmo diz e nem lê, você não lê direito.

Só essa explicação que faltou. Vamos lá!

1)Para quem trabalha com SQL não importa se a tabela tem 1 ou 1.000.000.000 de registros
1.a) Não existe abrir tabela. Apenas solicitamos algo e o resultado vem. Só isso!
2)Não usamos DbGotop(),DBSEEK(), nem DbAppend()... Isso é para DBF!

É 100% ARRAY o tempo todo!!!

Nos Browses(IE/Firefox) da vida usamos um botão para trazer mais resultados. Limitamos isso a BOTÕES. <Antetior> <Próximo> nisso traz os resultados da consulta.

Por exemplo, quando vc escreve: "use clientes", o SQLRDD transcreve p/ isso!

21676  01/05/15 16:12:53 SELECT A.* FROM [PRXA_WKLADY_WOBR] A  WHERE 1 = 0 /* Open Workarea */ 


Aqui um log, completo do SQLRDD.
Here is sql commands log from SQLLOG.DBF:

........
  21645  01/05/15 16:12:53 SELECT * FROM [PRXA_WKLADY_WOBR] WHERE 0 = 2
  21646  01/05/15 16:12:53 COMMIT
  21647  01/05/15 16:12:53 COMMIT
  21648  01/05/15 16:12:53 DROP TABLE [PRXA_WKLADY_WOBR] /* create table */
  21649  01/05/15 16:12:53 COMMIT
  21650  01/05/15 16:12:53 DELETE FROM SR_MGMNTINDEXES WHERE TABLE_ = 'PRXA_WKLADY_WOBR' /* Wipe index info */
  21651  01/05/15 16:12:53 COMMIT
  21652  01/05/15 16:12:53 DELETE FROM SR_MGMNTTABLES WHERE TABLE_ = 'PRXA_WKLADY_WOBR' /* Wipe table info */
  21653  01/05/15 16:12:53 COMMIT
  21654  01/05/15 16:12:53 DELETE FROM SR_MGMNTLANG WHERE TABLE_ = 'PRXA_WKLADY_WOBR' /* Wipe table info */
  21655  01/05/15 16:12:53 COMMIT
  21656  01/05/15 16:12:53 DELETE FROM SR_MGMNTCONSTRAINTS WHERE TABLE_ = 'PRXA_WKLADY_WOBR' /* Wipe table info */
  21657  01/05/15 16:12:53 COMMIT
  21658  01/05/15 16:12:53 DELETE FROM SR_MGMNTCONSTRAINTS WHERE SOURCETABLE_ = 'PRXA_WKLADY_WOBR' /* Wipe table info */
  21659  01/05/15 16:12:53 COMMIT
  21660  01/05/15 16:12:53 DELETE FROM SR_MGMNTCONSTRTGTCOLS WHERE SOURCETABLE_ = 'PRXA_WKLADY_WOBR' /* Wipe table info */
  21661  01/05/15 16:12:53 COMMIT
  21662  01/05/15 16:12:53 DELETE FROM SR_MGMNTCONSTRSRCCOLS WHERE SOURCETABLE_ = 'PRXA_WKLADY_WOBR' /* Wipe table info */
  21663  01/05/15 16:12:53 COMMIT
  21664  01/05/15 16:12:53 SELECT * FROM [PRXA_WKLADY_WOBR] /* check dropped table */
  21665  01/05/15 16:12:53 COMMIT
  21666  01/05/15 16:12:53 COMMIT
  21667  01/05/15 16:12:53 CREATE TABLE [PRXA_WKLADY_WOBR] (    [CZLO_KEY] VARCHAR (36) ,
   [MSK_KEY] VARCHAR (46) ,
   [NP] CHAR (8) ,
   [TO] CHAR (10) ,
   [MR] CHAR (2) ,
   [RR] CHAR (4) ,
   [KO] VARCHAR (30) ,
   [KP] VARCHAR (30) ,
   [ST] NUMERIC (1,0) ,
   [SR] CHAR (3) ,
   [SD] CHAR (2) ,
   [ND] NUMERIC (6,0) ,
   [NK] NUMERIC (4,0) ,
   [KW] NUMERIC (14,2) ,
   [DD] DATE NULL ,
   [TP] DATE NULL ,
   [DR] DATE NULL ,
   [DK] DATE NULL ,
   [UW] VARCHAR (30) ,
   [PF] VARCHAR (25) ,
   [DKR] BIT,
   [USR] CHAR (1) ,
   [SR_RECNO] NUMERIC (15,0) IDENTITY,
   [SR_DELETED] CHAR (1)  NOT NULL
)
  21668  01/05/15 16:12:53 COMMIT
  21669  01/05/15 16:12:53 CREATE  CLUSTERED INDEX PRXA_WKLADY_WOBR_SR ON [PRXA_WKLADY_WOBR]([SR_RECNO])  /* Unique Index */
  21670  01/05/15 16:12:53 COMMIT
  21671  01/05/15 16:12:53 DELETE FROM SR_MGMNTTABLES WHERE TABLE_ = 'PRXA_WKLADY_WOBR'
  21672  01/05/15 16:12:53 COMMIT
  21673  01/05/15 16:12:53 INSERT INTO SR_MGMNTTABLES ( TABLE_ , SIGNATURE_, CREATED_, TYPE_, REGINFO_ ) VALUES ( 'PRXA_WKLADY_WOBR','MGMNT 1.72', '2015010516:12:53','TABLE',' ' )
  21674  01/05/15 16:12:53 COMMIT
  21675  01/05/15 16:12:53 SELECT MAX( [SR_RECNO] ) FROM [PRXA_WKLADY_WOBR] /* Counting Records */
  21676  01/05/15 16:12:53 SELECT A.* FROM [PRXA_WKLADY_WOBR] A  WHERE 1 = 0 /* Open Workarea */
  21677  01/05/15 16:12:53 COMMIT
  21678  01/05/15 16:12:53 SELECT TABLE_,SIGNATURE_,IDXNAME_,IDXKEY_,IDXFOR_,IDXCOL_,TAG_,TAGNUM_ FROM SR_MGMNTINDEXES WHERE TABLE_ = 'PRXA_WKLADY_WOBR' ORDER BY IDXNAME_, TAGNUM_
  21679  01/05/15 16:12:53 SELECT TOP    12 A.* FROM [PRXA_WKLADY_WOBR] A  ORDER BY A.[SR_RECNO]  /* GoTop */
  21680  01/05/15 16:12:53 COMMIT
..............

OLD LIB
USE PRXA_WKLADY_WOBR
? LEN(STR(KW))
14
NEW LIB (2014.08)
USE PRXA_WKLADY_WOBR
? LEN(STR(KW))
17

BUT...

OLD LIB
USE PRXA_WKLADY_WOBR
? LEN(STR(ND))
6
NEW LIB (2014.08)
USE PRXA_WKLADY_WOBR
? LEN(STR(ND))
6

SO I SUPPOUSE PROBLEM HAS SOMETHING COMMON WITH DECIMALS :)

Regards
Andrzej Morgiewicz


Tudo que nós escrevemos usando sintaxe para acesso a DBF ele transcreve para SQL.
Para o pessoal que já usa SQL isso é aberração... Nem passa por a cabeça deles isso.

É absolutamente diferente do SQLMIX. Não tem nada a ver.

Imagine ai o pessoal novo que está chegando agora no mercado saindo da faculdade ?
Vai aprender SQLRDD ? para trabalhar com PostGres ? As pessoas já sabem usar SQL é um empecilho a menos.
Vai querer usar a SQLMIX ou o DRIVER do Rodrigo Moreno, isso sim.

Já para outras pessoas do xBase o SQLRDD é uma mão na roda, uma maravilha.

Cada um escolha suas ferramentas e seja feliz, agora não é porque é livre(GPL) que é ruim.
No caso a pessoa que fez, fez para uso dela e teve a nobreza de disponibilizar p/ outras pessoas, tem erros ? sim podem existir, tem limitações ? depende do ponto de vista de cada um, ele fez p/ atender os problemas dele, não fez p/ vender, nem para atender problemas particulares dos outros, aqui estamos em comunidade, cada um ajuda da forma que pode.
Segue explicação do autor da SQLMIX de como ela funciona.
Simple SQL Interface for Harbour

1. Introduction

Simple SQL interface implements accessing SQL query result via RDD
interface. It is not intended to be replacement for "transparent" move of
DBFCDX application to SQL world.

I want to discuss this in more detail. Many current RDDs for SQL servers
(ex. SQLRDD from xHarbour.com) tries to make a feeling you are working with
DBF file, but not with SQL database. SQL server does not support many
features, ex. RecNo(), deleted flag, file locks, record locks. These RDDs
are emulating these features to make feeling of DBF. Deleted() function is
emulated by creating additional table columns to store delete flag. Some
"hidden system" tables are used to register locking operations and emulate
record and file locks in DBF style. The idea of SQL query is also lost. If
you do a simple loop

dbUseArea( , "select * from my_table" )
DO WHILE ! Eof()
somefunc( FIELD->some_sql_field )
dbSkip()
ENDDO

RDD usualy will read SQL rows in portions, let's say 100 records per query.
So, hidden queries are generated. If you are using indexes these queries
are really complicated. Let's have index on FIELD1 + Str( FIELD2 ). A seek
to value cValue1 + Str( nValue2 ) will generate a query like:

SELECT * FROM my_table
WHERE (FIELD1 == cValue1 and FIELD2 >= nValue2) or FIELD1 > cValue1
ORDER BY FIELD1, FIELD2, _RECNO
LIMIT 100

After evaluation of first 100 cached records, next query will be generated:

SELECT * FROM my_table
WHERE (FIELD1 == cLastField1 and FIELD2 == nLastValue2 and _RECNO > nLastRecno) or
(FIELD1 == cLastField1 and FIELD2 > nLastValue2) or
FIELD1 > cLastValue1
ORDER BY FIELD1, FIELD2, _RECNO
LIMIT 100

To optimize these queries the SQL index expresion should be
"FIELD1,FIELD2,_RECNO", but not "FIELD1,FIELD2" as written in INDEX ON
command.

"Simple SQL interface" is too long to repeat every time I want to
address this library. I'll also use acronym "SSI" to address it.

The idea of SSI is different. It does not make hidden queries. All
queries should be made explicitly by programmer. SSI gives access to query
result via RDD interface, it does not tries to emulate DBF and be
"plug-and-play" solution for DBF to SQL migration. If you do

dbUseArea( , "select * from my_table")

all query (it could contain millions of records!) will be cached.

The features of SSI approach are:

- It's possible to access SQL database of other applications. Other
applications usualy does not follow agreement of "plug-and-play" SQL drivers
about additional DELETED column, _RECNO in the end of index expression, etc.
Access of SQL database of other applications is sometimes not possible.

- It's query oriented. That means a simple DO WHILE ! Eof() loop will iterate
each records once and only once. This is not true for "plug-and-play" SQL
drivers, if indexing is used. Just like in the case of loop over DBF file.
It is not guaranteed that all records are included! Yes! If key value of the
first record in index is changed to be the last record in index during the
phase of record processing, DO WHILE ! Eof() loop will iterate only this
single records even if the database contains millions of records. Your sould
do FLock() on DBF to guarantee the records are not changed. Do you use FLock()
before readonly DO WHILE ! Eof() loops? :)

2. Architecture

+-------------+
| |
| SQLMIX RDD |
| |
+-------------+
| ^
V |
+-------------+ +---------+
| |--->| |
| SQLBASE RDD | | SDD |
| |<---| |
+-------------+ +---------+

SQLBASE RDD implements basic functionality for accessing SQL query result
via RDD interface. This RDD could be used, if indexing of query result is not
necessary or all indexing is done by SQL server (by using ORDER BY clause).

SQLMIX RDD implements indexing of query result. This indexing is not
related to SQL server ORDER BY clause. SQLMIX do indexing of the query on the
client side.

SDD is acronym for Sql Database Driver. RDD is used to implement access
of different database formats like DBF, SDF, etc. SDD is used to implement
access of different SQL databases. Every SQL server (MySQL, PostgreSQL, etc.)
has a corresponding SDD. SDD driver implements a specific part of data
exchange interface between SQLBASE and SQL server.

3. Modifying database

SSI presents a query result via RDD interface and generates no hidden
SQL queries. So, how database can be changed? Does dbAppend() and FieldPut()
works, or is it readonly SQL interface?
dbAppend(), FieldPut() and other similiar functions work on cached query
result, i.e. query can be appended by new rows and field values can be
changed, but SQL database is not changed. dbCreate() function can also be
used to create an "empty query result" but no table is created on SQL server.
So, SSI can also be used as implementation of "array RDD".
The programmer must call SQL command explicitly to modify SQL tables.
SSI provides a method to detect which cached rows was changed or appended.


Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 19:36
por sygecom
Itamar M. Lins Jr. escreveu:Só essa explicação que faltou. Vamos lá!

1)Para quem trabalha com SQL não importa se a tabela tem 1 ou 1.000.000.000 de registros
1.a) Não existe abrir tabela. Apenas solicitamos algo e o resultado vem. Só isso!

É 100% ARRAY o tempo todo!!!


Entendi, a TOTVS que é a maior empresa de Software da América Latina, faz também tudo errado, sei.

Você está olhando apenas para um simples SELECT agora faça algo mais complexo usando mesmo SQL para vários banco de dados(POSTGRESQL, ORACLE, MYSQL, FIREBIRD e etc...) ai vamos ver como você unifica tudo, vai morrer escrevendo IF para cada banco de dados.

2)Não usamos DbGotop(),DBSEEK(), nem DbAppend()... Isso é para DBF!

Sim, nem pode usar, não funciona !!! kkkkk nada é por acaso.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 23 Fev 2015 19:51
por Itamar M. Lins Jr.
Entendi, a TOTVS que é a maior empresa de Software da América Latina, faz também tudo errado, sei.

Depois eu que não sei ler...
Isso foi p/ garantir o LEGADO, nos bons tempos da Microsiga era tudo DBF! Até o Protheus 10 acredito que trabalha com DBF via ADS ou MSSQL que é o SGBD padrão.

vai morrer escrevendo IF para cada banco de dados.
Porquê ? se o povo do xHarbour.com não morreu ? ou será que morreu até hoje escrevem if´s ?? Não sabe o que é padrão ANSI SQL...

Sim, nem pode usar, não funciona !!! kkkkk nada é por acaso.

Não entendeu de novo ... deixa prá lá. A pessoa acredita que só existe sintaxe xBase p/ trabalhar com SGBD´s fazer o quê ?

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 08:19
por janio
Pra quem tá acostumado com dbf's... muito bom aprender esses conceitos sobre SQL!

Vlw Itamar!

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 12:08
por Itamar M. Lins Jr.
Pra quem tá acostumado com dbf's... muito bom aprender esses conceitos sobre SQL!

Pois é, DBF é DBF e SQL é SQL, são conceitos/usos totalmente diferentes.
O correto é a pessoa fazer um curso para poder saber como é a filosofia de como trabalhar com SQL.
Aprender, ter uma visão correta do MUNDO do SGBD.
A visão que temos a partir do DBF é muito limitada, não usamos nada dos antigos comandos/funções que usamos do DBF. Por isso simular DBF dentro de um motor SGBD é limitar demais o seu uso.
Quem quer migrar é melhor redesenhar tudo, estudar, não usamos OrdWildSeek, Set Filter to, DbSelectArea(), OrdSetFocus(),OrdScope()... nada disso existe nos comandos SQL.
Simular comandos DBF no SQL é pegar uma FERRARI, para andar na estada da roça. Dirigir avião debaixo d'água.
STORED PROCEDURES, Triggers, INNER JOIN, LEFT JOIN, etc... o pessoal do DBF nem sabe o que é isso, campos diferentes, replicação...
E uma das coisas mais importantes! Database Diagrams, RELACIONAMENTOS ENTRE TABELAS! isso é primordial.
http://www.devmedia.com.br/criando-relacionamentos-entre-tabelas-database-diagrams-sql-server/24453

Então não é só usar o SQLRDD que irá fazer todo esse trabalho, no meu modo de ver é varrer sujeira p/ debaixo do tapete.Procrastinar o verdadeiro aprendizado em SQL.
Quando o pessoal do SQLRDD começa a usar os comandos do SQL, não é mesma coisa que usar o SQLMIX ? Como ponte p/ aprendizado etc.. mas não como meta final, se prender no SQLRDD, como se tudo dependesse dele. SQLRDD não é o Santo Graal, é mais uma ferramenta como tantas outras.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 13:00
por janio
Realmente, pra quem usa comandos SQl (frise-se), não ha muita diferença entre SQLRDD e SQLMIX! A diferença seria que no SQLRDD vc evita os if's para cada banco de dados que for usar. Mas como já foi dito aqui... vc não usa 5 SGBD diferentes... vc escolhe um e passa a usar quase que exclusivamente aquele! A conexão com outros SBGD seria apenas em casos de migração de dados de outros sistemas para o nosso.

Agora para comandos xbase em SBGD, como é o meu caso que uso Mediator... realmente esses RDD's são uma mão na roda. Tem a questão de 'limitar' o potencial do SGBD... vai de cada um. Eu, por exemplo, ainda não tenho pego casos de lentidão em meu sistema, mesmo em casos de bases de dados enorme (9gb)

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 13:35
por Itamar M. Lins Jr.
vc evita os if's para cada banco de dados que for usar.

Não! isso é apenas para comandos do xBase! Nos comandos SQL quem faz a QUERY somos nós mesmos. Então vai ter que usar IF´s de qualquer forma para SQL.

casos de lentidão em meu sistema,

Não é apenas isso, acredito que não fica lento. São as outras coisas que deixamos de ter ao usarmos a técnica do DBF dentro do SGBD.
Estamos abrindo mão de melhores possibilidades.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 13:36
por JoséQuintas
Pois é, DBF é DBF e SQL é SQL, são conceitos/usos totalmente diferentes.
O correto é a pessoa fazer um curso para poder saber como é a filosofia de como trabalhar com SQL.


Só pra adiantar sobre o curso:

SQL = Structured Query Language, é uma linguagem estruturada pra resultados
DBF = Banco de dados em formato DBF

São coisas distintas, o mesmo que comparar DBF e linguagem xBase.

Acho que ele se confundiu, e quis dizer base de dados local e base de dados cliente/servidor.

Mas pra quem quiser começar testando SQL com DBF, aqui a string de conexão que usava no VB, compatível com Clipper + SIXCDX:

Case "ADSLOCAL"
    cString = "Provider=Advantage.OLEDB.1;" & _
    "Mode=Share Deny None;" & _
    "Show Deleted Records in DBF Tables with Advantage=False;" & _
    "Data Source=" & Sistema.PathDefault & ";Advantage Server Type=ADS_Local_Server;" & _
    "TableType=ADS_CDX;Security Mode=ADS_IGNORERIGHTS;" & _
    "Lock Mode=Compatible;" & _
    "Use NULL values in DBF Tables with Advantage=True;" & _
    "Exclusive=No;Deleted=No;"

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 13:48
por Itamar M. Lins Jr.
Ola!
DBF no sentido de usarmos os comandos de manipulação, Dbcreate, Dbseek, DbGoTop... que é uma pequena parte dos comandos xBase, agora com o Harbour foram mais ampliados e esses comandos não existem na linguagem SQL.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 16:05
por JoséQuintas
Uma explicação não técnica, apenas pra dar uma idéia sobre cliente/servidor.

Imagine o banco de dados no servidor ou internet.
Digamos que o bloco de comunicação da rede/internet seja de 10KB, vai transferir blocos de 10kb.

Imagine uma tela de pedidos, um pedido com 10 itens, onde voce vai pegar o pedido, os dados do cliente, cada produto dos pedidos, e também consultar a descrição dos produtos do pedido.
pedido + cliente + 10 x produtos do pedido + 10 x produtos (pra descrição)
Serão 22 consultas ao banco de dados, equivalente a 220kb.

Com cliente/servidor, pode pedir tudo isso de uma vez, e de repente o resultado ocupa 10kb, portanto 22 vezes mais rápido.

E imagine no caso de filtro, onde vém todo o banco de dados pra escolher o que quer.
Digamos que o banco tem 1.000 registros, ocupando 10mb, passando pela rede ou internet, mesmo quando só precisa de 1 registro.

Com cliente/servidor, pode pedir já somente o que quer, 1 registro ocupando o bloco de 10kb, 1.000 vezes mais rápido.

Tem também o acesso a índice, que acaba dobrando a quantidade de blocos, e se for internet tem também a variação da internet. Isso não acontece com cliente/servidor.

A diferença básica de cliente/servidor é essa: ao invés de trazer o banco de dados até o terminal, o servidor é que faz o trabalho pesado, e entrega ao terminal somente o que interessa, pronto pra uso.

As RDDs existentes no Harbour permitem trabalhar com cliente/servidor como se fosse com DBF, registro a registro, do modo demorado, então podem acabar sendo até mais lentas que DBF. A vantagem é ter o aplicativo convertido instantaneamente.
Então, depois de adotar alguma solução desse tipo, vai ter que fazer os ajustes pra ganhar velocidade, pra trabalhar como cliente/servidor mesmo, e já trazer tudo pronto do servidor.

A proporção não é essa que coloquei, mas acho que explica bem a diferença.
E a consulta ao servidor costuma ser por comandos SQL, por isso é comum chamarem isso de SQL.

Acho que isso serve pra mostrar que apenas mudar pra cliente/servidor não vai deixar mais rápido.

Já tem ganho no sentido de que apenas o servidor vai mexer na base de dados. Os terminais apenas vão pedir ou enviar as informações de/para o servidor, isso já evita problemas de queda de energia nos terminais, por exemplo.
Aquilo de parar todo mundo pra reindexar.... já era, não existe mais isso
Aquilo de parar todo mundo pra acrescentar um campo novo... já era, não existe mais isso.
Aquilo de abrir arquivo, abrir índice, escolher ordem... já era, não existe mais isso.
Mas as vantagens completas, só depois de realmente ajustar o aplicativo pra cliente/servidor.

Qual seria a outra opção?
Alterar todo o aplicativo pra "SQL" e só no final colocar em uso.
Então, melhor adotar a solução alternativa

Até aqui fui teórico, tudo depende se a SQLMIX funciona do jeito que parece.

Uma dúvida:
Essa SQLMIX deixa fazer APPEND, DELETE, GOTO TOP ou é igual RDDADO?
Qual seria a vantagem sobre ADO?

Esquece... reli tudo e vi que já foi explicado.
É igual RDDADO, apenas pra consulta.
A vantagem sobre ADO é... usar igual DBF, mesmo que somente pra consulta.

Funciona o GOTO TOP quando a consulta está vazia?
É que senão não funciona o tbrowse().

Pera aí....
Então convém alertar ao usuário o seguinte:
Vai ter que abrir e fechar os arquivos toda hora, senão as atualizações ao banco de dados não serão vistas.
Ao abrir o arquivo, só vai enxergar o que existir ali naquele momento e nada novo, mesmo horas depois, e não ser que reabra o arquivo.
É isso mesmo?

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 18:16
por janio
Muito bem, José Quintas! :)Pos

Tbm gostaria de ver as respostas para essas questões que vc levantou. Vamos ver o que dirão aqueles que já usam!

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 19:41
por Itamar M. Lins Jr.
Já foram respondidas.
Com o SQLMIX temos SKIP, GOTO, mas na tabela virtual no resultado da QUERY, podemos apaga-la que não afeta nada na tabela MATRIZ, só temos acesso de leitura e gravação via comandos SQL, SELECT, INSERT, DROP...

É a mesma coisa p/ quem usa PHP, JAVA... Ninguém fica remexendo no resultado da query.
A QUERY(questão) é feita, "SELECT * FROM clientes...", vem o resultado, digamos a aQuery(resposta) vc vai gravar e adicionar no resultado ? ou na tabela que gerou o resultado ?
INSERT INTO é na tabela de nome CLIENTES, não na QUERY(resultado da pergunta), que com SQLMIX é um ARRAY igualzinho a uma estrutura DBF.

DBUSEAREA( .T.,"SQLMIX", "select * from dbo.PROD_PESQ", "xx" ) // o Resultado se chama "XX", posso dar append, index, seek... é tudo na memoria RAM, não está sendo gravado nada no HD.
Se eu precisar gravar algo eu preciso usar comandos SQL "UPDATE, INSET INTO"
http://www.linhadecodigo.com.br/artigo/2975/comandos-basicos-em-sql-insert-update-delete-e-select.aspx
Essa é a facilidade do SQLMIX, pois podemos navegar no resultado, adicionar, alterar, e depois executar os comandos SQL p/ gravação FISICA da tabela.

Quando as outras perguntas por exemplo:
Então convém alertar ao usuário o seguinte:
Vai ter que abrir e fechar os arquivos toda hora, senão as atualizações ao banco de dados não serão vistas.
Ao abrir o arquivo, só vai enxergar o que existir ali naquele momento e nada novo, mesmo horas depois, e não ser que reabra o arquivo.
É isso mesmo?


Por isso é outro paradigma programar com bancos de dados relacionais.
Tem gatilhos(triggers), stored procedures.... etc, que é disparado enquanto uma tabela é modificada, fazendo refresh na tela, como vocês pensam que funciona um site ? submarino por exemplo ? Ou uma requisição que fazemos no site dos correios p/ pegar o CEP ? tem que estudar muito ler, p/ aprender os novos conceitos.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 24 Fev 2015 20:11
por Itamar M. Lins Jr.
É a mesma coisa do DBF.
Por exemplo, tem 10 pessoas modificando, incluindo, a base de dados "estoque.dbf" em um tbrowse() não fica lá piscando fulano alterou isso, beltrano adicionou aquilo... Fica estático! só depois que damos um refresh() os dados alterados são mostrados. Com SQL fazemos a mesma coisa, um refresh(), pode ser por exemplo um comando "SELECT * estoque from WHERE... LIMIT..." Colocamos um botão de REFRESH, com SQLMIX, ele vai lá na TABELA faz a requisição, e mostramos o resultado no tbrowse da mesma forma e é super rápido.
<editado>
Não precisa ficar preocupado se cabe ou não na malha do tbrowse(), é só limitar as linhas de acordo seus testes de velocidade. podemos trazer 100 linhas, 10 linhas... não precisamos ficar preocupados com eof(), bof()... isso é tratado com botões. na programação "CUI " essa do clipper, "if K_DOWN; dbskip()" isso funciona com SQLMIX, mas estamos navegando no resultado. O servidor já esta totalmente desafogado esperando outra requisição. Com DBF ou SIMULANDO um DBF é um paracé de coisas que acontecem, no servidor(pedidos). Com SQLRDD um dbskip(), faz uma requisição no servidor só para isso ! é mole ? Agora imagine ai 200 pessoas navegando em um tbrowse() com SQLRDD ?
Com SQLRDD, dbskip(), dbgoto(), DBSEEK(), vira tudo comandos SQL "SELECT..."
Enquanto SQLMIX, não precisamos de nada disso. Isso ninguém explica na ora de vender!
É só olhar no log do sujeito que postei mais acima.
Um "USE" vira: "SELECT A.* FROM [PRXA_WKLADY_WOBR] A WHERE 1 = 0 /* Open Workarea */"
Um "DGoTop()" vira: "SELECT..." se esses comandos para DBF não existem na linguagem SQL!
É "SELECT p/ todo lado"

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 08:44
por janio
Ok, to gostando!

Aquilo de parar todo mundo pra acrescentar um campo novo... já era, não existe mais isso.


Como é a história? Nao entendi essa parte. Tenho muita manutenção no meu sistema acrescentando campos e criando novos indices. Apesar de usar MySql, uso ainda como se fosse DBF com Mediator. Dae preciso pegar a nova estrutura, criar uma tabela temp, copiar os dados da antiga pra nova (append from), recriar indices... tudo isso com todo mundo parado.

Continuando...

Com SQL precisa bloquear a tabela antes de cada gravação??

Não tem mais commit??

SQL tem indices, mas estes não precisam ser setados... o SBGD ja seleciona o melhor índice conforme a consulta, éh isso??

Um índice INDEX on Str(Codigo) + Dtos(DatEmi)... eh possível? Se não, com seria a criação desses indices em SQL?

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 10:59
por JoséQuintas
SQLRDD - consultas em "SQL" no formato DBF, é LIB de terceiros
RDDADO - idem, tá na lib da RDDADO
ADOXB - idem, é LIB de terceiros
SQLMIX - idem, mas funciona Windows e Linux, tá na lib SQLMIX
ADO - Somente Windows e formato ADO, faz parte do Windows

Em todas, a consulta não é atualizada, teria que abrir sempre.
E Incluir, alterar, excluir é por comando SQL.

Exceto ADO, em todas o resultado da consulta é em formato dbf.
Em ADO, é igual a milhões de usuários de qualquer linguagem, o formato é ADO.
Abrir sempre é normal, porque cada consulta tem seu próprio resultado.

No SQL é o servidor que faz o serviço.
Quando inclui no terminal, ele avisa o servidor e é o servidor que inclui.
Commit? Se é o servidor que inclui, não existe commit no terminal.
Se as consultas são diretas no servidor, o resultado é sempre atualizado.
Se vai acrescentar um campo no arquivo, é o servidor que acrescenta, e pode decidir se congela as próximas consultas que necessitem dessa nova informação
O terminal não mexe em nenhum arquivo, o servidor faz o que quiser.
Até se quiser criar índice, pode criar em uso, o servidor sabe exatamente o que está fazendo.

Acredito que com as RDDs seja igual, não sei se bloqueiam igual DBF.

Só uso ADO, sem nenhuma RDD. O resto, é pelo que andei lendo por aqui.

ADO = Microsoft, todo Windows tem, só precisa do CreateObject() do Harbour.

Um post meu antigo, com exemplo simples de ADO com DBFs

http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=15386&hilit=+ado

Independente de qualquer outra coisa, funciona no Windows muito bem, só perguntar pra qualquer um dos milhões de usuários.
A parte de programação, querendo ou não as outras opções também precisam de mudanças no fonte.
No ADO é esquecer estilo DBF de vez.

O ADO é uma espécie de RDD, a diferença das outras é que não está no Harbour, mas sim no Windows, sendo usada ou Não.
E tem controle total, sem depender de atualizações, correções ou melhorias.

E de extra, se um dia decidir abandonar o xbase, vai poder continuar usando exatamente do mesmo jeito. (será por isso que não é divulgado?)

E isso é só o arroz com feijão de um servidor, por exemplo, MySql.
Pode chegar ao ponto de eliminar até validações de campos no aplicativo, e deixar por conta do MySql.
No MySql Server, até telas de aplicativos podem estar salvas no banco de dados.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 11:58
por janio
Entendi muita coisa!

Falta apenas a criação dos 'índices compostos' em SQL!

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 12:35
por JoséQuintas
O que chama de índices compostos? Mais de um campo?
Os campos são separados por vírgula, nada de somar.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 12:40
por janio
Como seria a criação em SQL do índice

Index ON Str(Codigo) + Dtos(DatEmi)

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 12:45
por JoséQuintas
Usando o programa de gerenciamento HeidSql:
Clica no arquivo, clica em criar índice, preenche nome e preenche chave com codigo,datemi

ou... usando um comando SQL.
Se fizer pelo HeidiSql, ele sempre mostra qual o equivalente se fosse por comando.
Digamos que o HeidiSql é o DBASE do SQL, uma das opções disponíveis.

Mas se for apenas pra receber a consulta em ordem, não precisa disso.
Já pede pro servidor entregar tudo pronto pro terminal, já na ordem que quiser.

Faltou falar de um grande diferencial:
No terminal não existe nenhum arquivo aberto, apenas a conexão.

Traduzindo mais ainda cliente/servidor, chamado popularmente de "SQL":

No terminal não existem arquivos.

Vamos supor que o temporário fosse TXT.
Voce passa o comando pro servidor, e o servidor te retorna um TXT com o resultado.
No caso das RDDs, o retorno é convertido pra formato DBF.
No caso do ADO, o retorno é convertido pra formato ADO.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 12:57
por JoséQuintas
Mais um exemplo... relatório de clientes em ordem alfabética:

oRetorno := cnMySql:Execute( "SELECT * FROM CLIENTES ORDER BY NOME" )


Se tiver milhões de registros no servidor, e essa consulta estiver demorada, vai lá no servidor e cria um índice por nome.
Não precisa mexer nada no programa.
O índice não precisa existir, mas se existir vai ser usado pelo servidor pra deixar a consulta mais rápida.

Mesma coisa se for por UF + Cidade + nome

oRetorno := cnMySqlExecute( "SELECT * FROM CLIENTES ORDER BY UF, CIDADE, NOME" )


Nota: o comando SQL é o mesmo em todos, mas este exemplo seria usando ADO.

Lógico, se vai emitir relatório só com nome, endereco, cidade e UF, vai ser muito mais rápido se pedir pro servidor somente esses campos:

oRetorno := cnMySqlExecute( "SELECT NOME, ENDERECO, CIDADE, UF FROM CLIENTES ORDER BY UF, CIDADE, NOME" )

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 13:07
por Itamar M. Lins Jr.
Em todas, a consulta não é atualizada, teria que abrir sempre.
E Incluir, alterar, excluir é por comando SQL.


Com RDDSQL é possivel fazer "REPLACE X WITH Y" ou DbAppend(), o recno() funciona! no RDDSQL, porque ele cria dois campos a mais lá na tabela os tais:
   [SR_RECNO] NUMERIC (15,0) IDENTITY,
   [SR_DELETED] CHAR (1)  NOT NULL

E começa a tratar tudo com se fosse DBF, o pessoal quer é se livrar de DBF, dessa tecnica, enquanto outros vem trazendo tudo isso p/ bancos relacionais gerando os mesmos problemas que existem na forma DBF de trabalhar.
O drive magicamente joga isso na tabela! Agora em ambiente multi usuário como fica isso ? delete(),flock(),rlock(),pack()... é isso que o povo do SQL pira... já que não precisa mais nada disso.
Imaginem dbgobottom() e depois o dbskip(), para posicionar o cursor no registro fantasma no MySQL criar registro fantasma na TABELA SQL ? e outras particularidades do DBF, que o pessoal do SGBD´s nem pensam nisso... isso p/ eles é doidice registro fantasma no MYSQL ?

Por isso as pessoas que já tem costume com SQL acha que é aberração, já outros adoram.

Saudações.
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 13:16
por janio
Ok,

Eu uso Mediator (similar ao SQLRDD), onde tbm eh possivel usar diretamente comandos SQL (Select * from ...). Nesse caso, no Mediator, eh criado uma tabela temporária la no servidor em que podemos manipulá-la como se dbf fosse. Agora estou vendo que mesmo um dbskip() nessa tabela temporia... eh feito um select no servidor!

O que por um momento mim passou pela cabeça foi que usando mediator fazendo as consultas em SQL, seu uso ficaria idêntico ao SQLMIX. Ocorre que não! Mesmo fazendo consultas em SQL no mediator, seu uso não se compara ao SQLMIX pq no momento em que fazemos um dbskip(), dbgotop() no resultado dessa consulta (feita em SQL), la no servidor ta sendo feito um Select * From para cada dbskip() ou comando xbase.

Outra coisa, há limite de criação de indices?

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 13:22
por JoséQuintas
Um exemplo de uso do rlock() seria pra atualizar estoque.
Como atualizar no MySql sem bloquear registro?
Não precisa, é o servidor que faz, então o servidor já vai atender um usuário de cada vez (e não pense que isso causa problemas pra milhares de usuários).

cnMySql:Execute( "UPDATE ARQUIVOESTOQUE SET QUANTIDADE=QUANTIDADE+1 WHERE PRODUTO=10" )


O terminal apenas pede pro servidor atualizar, o terminal não faz conta nenhuma.

Quanto mais fora do estilo DBF, melhor.
Acho que agora entendi porque não se importaram em fazer funcionar igual dbf os comandos append, replace, delete, etc.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 13:26
por Itamar M. Lins Jr.
Como seria a criação em SQL do índice
Index ON Str(Codigo) + Dtos(DatEmi)

Isso não tem necessidade Jairo, é coisa do passado.
Vc solicita ao servidor: "Me mande os campos tais, na ordem tal" e pronto, vem o resultado, vc imprime, mostra na tela faz o que desejar, o servidor está prontinho esperando outro pedido, isso é muito rápido.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 13:33
por JoséQuintas
Não é exatamente assim, índices ainda existem.
É só olhar meu post anterior.

E limites....
Pra quem usa DBF, nem precisa se preocupar com limites.
Talvez o limite seja quantos HDs poderá colocar na máquina.
Só imaginar que o google usa o MySql pra gerenciar as pesquisas mundiais.
Qual será o tamanho da base de dados do google?

Lógico... se tiver muitos índices, os índices terão que ser atualizados e levará tempo, então não vai ficar criando índice à toa.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 13:37
por janio
Ok,

Apesar de nomes iguais, o conceito eh diferente!

Pelas explicações de vcs, eu entendi que os INDICES em SQL servem para agilar uma consulta e não para trazer o resultado naquela ordem desejada. Diferentemente dos nossos indices em DBF que tanto servem para agilar a consulta (não precisar varrer o dbf inteiro), quanto para ter a ordem desejada!

Nomes iguais, conceitos diferentes! Como saber dessas coisas?? so tendo uma aula como essa q vcs estão dando!

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 13:50
por JoséQuintas
Talvez seja mais simples do que pensa.
USE.

Hoje seu terminal faz as coisas via rede.
A maioria das coisas vai ser mais rápida por fazer pelo servidor.
Assim que estiver usando, vai poder ver o que tem de recurso pra melhorar ainda mais.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 14:38
por JoséQuintas
Convém lembrar:
O DBF costuma ser usado por ser independente e não precisar instalar nada.
Com certeza com MySql, vai precisar instalar o MySql no servidor, e isso dependerá do servidor de cada empresa.
E nos terminais o "driver" de conexão, conhecido por ODBC. Do mesmo jeito que existe driver pra cada tipo de impressora, existe o driver pra cada tipo de banco de dados (MySql, SQL Server, Oracle, etc).
No Windows só vém pré-instalado o que é da Microsoft.

Quanto às RDDs mencionadas, confirme se é só isso mesmo, ou se dispensa o ODBC.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 14:43
por janio
- Com mediator precisa instalar no servidor o Mysql, o drive ODBC e o Servidor Mediator. Nas estações so o nosso executável mesmo;
- Com SQLRDD não precisa instalar nada no servidor, além do proprio mysql. Ja nas estações precisa de algumas dll's;
- SQLMIX... não sei!

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 15:03
por pauloa1
Janio!

Ao mudar de dbf para postgres eu eliminei mais de 80% dos índices.

Só uso em tabelas grandes e em casos de muito uso.

Com banco de dados, usar muitos índices pode dar efeito contrário, pode deixar lento, pois toda vez que adicionar ou alterar um registro, ele precisa atualizar o índice e também deixa o banco maior.

É na prática que você vai descobrir quando é será necessário ter um índice na tabela ou não.

Paulo

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 15:50
por janio
Itamar,

Fato concreto: No meu sistema com mediator (mysql), mas usando como se dbf fosse, em um cliente o relatorio de VENDAS DO DIA tem mais ou menos 5.000 registros.

Gero esse relatorio da maneira clássica:

Select Venda
DbSetOrder(1)
DbGoTop()
OrdScope( 0, Data )
OrdScope( 1, Data )
DbGoTop()
Do While !Eof()

...
DbSkip()

Enddo

Pergunta1: Quer dizer que a cada DbSkip() eh feito um novo select la no servidor? Num relatorio com 5mil registros, por exemplo, são feitos 5mil selects?

Pergunta2: Com SQLMIX esse select seria feito no servidor apenas uma vez e o DbSkip() será feito apenas na consulta devolvida, e não no servidor?

Ou seja, em vez de 5mil selects eu teria apenas 1 select?? eh isso?

Janio

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 15:51
por Itamar M. Lins Jr.
Com SQLRDD não precisa instalar nada no servidor, além do proprio mysql.

Precisa do Drive ODBC p/ MSSQL, mas p/ Postgres, MySQL não precisa.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 15:55
por Itamar M. Lins Jr.
Fato concreto: No meu sistema com mediator (mysql), mas usando como se dbf fosse, em um cliente o relatorio de VENDAS DO DIA tem mais ou menos 5.000 registros.


Eu não sei.
Eu sei que no SQLMIX isso é feito na memoria RAM, não é mais requisitado nada no servidor.
Tem que ver o log de requisições ai do servidor para ter certeza.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 18:44
por Itamar M. Lins Jr.
Pergunta2: Com SQLMIX esse select seria feito no servidor apenas uma vez e o DbSkip() será feito apenas na consulta devolvida, e não no servidor?


É isso mesmo. O servidor fica desafogado dessa tarefa.

Se o Mediator aceitar SELECT(comandos SQL), vc pode fazer a mesma coisa.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 25 Fev 2015 20:38
por Itamar M. Lins Jr.
Outra coisa.
Os comandos SQL, são universais, enquanto os comandos p/ manipulação do DBF só com DBF.
Então qualquer comando SQL que vc aprenda a usar, irá servir p/ qualquer linguagem.
"UPDATE ARQUIVOESTOQUE SET QUANTIDADE=QUANTIDADE+1 WHERE PRODUTO=10" 

Podemos usar isso ai em cima p/ JAVA, PHP, C#, qualquer linguagem, agora tem como usar isso ai em baixo no JAVA ?
Select Venda
DbSetOrder(1)
DbGoTop()
OrdScope( 0, Data )
OrdScope( 1, Data )
DbGoTop()
Do While !Eof()


É por causa dessas coisas que digo: Quem usa sintaxe xBase p/ tudo na manipulação de DBF´s dentro dos SGBD´s da vida, continua preso, não se libertou. Não sabe o que esta deixando de ganhar. Não entendeu nada do que é SGBD.(Sistema Gerenciador de Base de dados), e os gurus do Harbour sabem disso, por isso não temos no Harbour alguma coisa similar ao SQLRDD. Para eles a SQLMIX é melhor, ou acesso nativo ou ADO, SQLMIX acessa/trabalha tem um driver para OCI Oracle. Os caras estão lá na frente!

Tem o ADS também p/ DBF que trabalha com TCP/IP é free p/ 5 usuários se não me engano e aceita sintaxe SQL.

E eu cá traz com Letodb, estão fazendo tanta coisa boa no Letodb, está difícil abandonar... meus clientes não tem bases tão grandes assim que justifique usar PostGres por exemplo.

Quem usa Harbour+LINUX com DBF também não sabe o que é corromper indices.
Quem usa Harbour+Windows com DBF e Terminal Service IDEM.
Quem usa Harbour+Letodb+Linux ou Windows IDEM, não sabemos o que é indices corrompidos, nem lentidão de rede.
O Przemek aumentou p/ acima de 4TB com 64Bits os Indices CDX...

Tem muita coisa mais simples de usar com DBF´s e que podemos ganhar tempo p/ mudarmos completamente para bancos relacionais e usar todos os recursos destas ferramentas.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 31 Jul 2019 17:02
por sasquast
Muito obrigado a todos por tudo.

Estive estudando e acabei caindo nesse tópico na discussão entre SQLMIX x SQLRDD. Ao que me pareceu o SQLMIX seria, de forma básica e muito resumida, para o interessado em utilizar comandos SQL, ou seja, evoluir sua aplicação alterando seus fontes. Já o SQLRDD seria mais para quem quer manter seu fonte o mais inalterado possível, inclusive com os comandos de acesso a base DBF, mas que o SQLRDD faria essa ponte para o SQL. Estou correto ?

Outra dúvida é a seguinte, se falou em TOTVS, TOPConnect, DBAccess ... É possível, apenas para um teste, conectar uma aplicação xHarbour cujo fonte está totalmente voltado para DBF ao DBAccess e acessar um banco SQL, ou seja, como se falou que o SQLRDD é quase um clone do DBAccess da TOTVS , seria possível utilizar:

xHarbour + SQL através do DBAccess em vez do SQLRDD ?

Pergunto isso tendo a empresa optado por alterar o mínimo possível os fontes originais.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 01 Ago 2019 22:49
por sygecom
Não conheço muito de TOTVS, mas até onde sei, apesar de ser um xbase no PROTEUS, ele não compila com xharbour free. Eles tem o próprio compilador deles.
Então deduzo que não roda xHarbour + DBAccess

Acredito que o SQLRDD não é quase um clone do DBAccess da TOTVS, o DBAccess é muito mais parecido com o Mediator, que fica rodando no servidor um interpretador dos comando, para rodar ele em SQL, já o SQLRDD faz isso tudo no lado cliente e muito rápido.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 02 Ago 2019 10:51
por sasquast
Entendi,

É que como não tenho o SQLRDD, e aqui na empresa possuímos o ERP da TOTVS e consequentemente o DBAccess e MSSQL, pensei em fazer um teste para ver se conseguia conectar minha aplicação em Clipper xHarbour (Outro sistema) que hj roda toda em DBF, no SQL utilizando o que tenho em mãos.

O tópico é antigo, hoje em dia, 2019, que ferramenta free, caso exista, você recomenda apenas para esse teste inicial. Dependendo do que conseguirmos aí sim, investiremos em algo mais definitivo.

Muito obrigado.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 02 Ago 2019 11:42
por JoséQuintas
sasquast escreveu:O tópico é antigo, hoje em dia, 2019, que ferramenta free, caso exista, você recomenda apenas para esse teste inicial.
Dependendo do que conseguirmos aí sim, investiremos em algo mais definitivo.


Sei lá....
É só um teste inicial...
coisinha de nada...
todo o aplicativo funcionando com outra base de dados....
coisa à toa...

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 02 Ago 2019 13:22
por JoséQuintas
sasquast escreveu:pensei em fazer um teste para ver se conseguia conectar minha aplicação em Clipper xHarbour (Outro sistema) que hj roda toda em DBF, no SQL utilizando o que tenho em mãos.


Por acaso avaliou que vai ter que mexer em todos IF ! File( "arquivo.cdx" ) por exemplo?
Com certeza não existe LIB mágica, querendo ou não, vai ter que colocar a mão na massa, e pode não ser rápido fazer direto no aplicativo.

Pode até já ir mexendo nessa parte, que vai ter que ser feita pra qualquer que seja a opção usada depois.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 07 Out 2019 08:50
por Itamar M. Lins Jr.
Ola!
Vai depender de como vai conversar com os dados do Protheus. Acessar é fácil, basta a senha via ADO vc consegue ou até pelo SQLMIX.
Se está configurado para ter compatibilidade com DBF vc precisa prestar atenção nos campos extras que tem nas tabelas do MSSQL que emula os locks,delete do DBF. Se for só para ler é rápido, não precisa verificar os locks das tabelas.

Saudações,
Itamar M. Lins Jr.

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 07 Out 2019 12:28
por Fernando queiroz
Bom, to querendo começar a migrar ou não para um SGDB , pergunta:
Qual a opção menos traumática em termos de mudanças

Andei olhando vaias opções

LETODBF
MYSQL
ACCESS
MARIADB

Qual seria a Indicação dos nobres colegas que já usam um SGBD
Os objetivos seriam:

SEGURANCA
PODER GRAVAR OS XML /PDF NO ARQUIVO

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 07 Out 2019 21:54
por Ranier
Fernando queiroz escreveu:Bom, to querendo começar a migrar ou não para um SGDB , pergunta:
Qual a opção menos traumática em termos de mudanças
Andei olhando vaias opções
LETODBF
MYSQL
ACCESS
MARIADB

Qual seria a Indicação dos nobres colegas que já usam um SGBD
Os objetivos seriam:
SEGURANCA
PODER GRAVAR OS XML /PDF NO ARQUIVO

Estão aqui meus pitacos.
O melhor banco? PostgreSQL, sem dúvida nenhuma.
Vantagens:
Capaz de substituir o Oracle;
Suporte 100% ao SQL;
ACID 100%;
Rápido, estável e seguro (a versão 12 está um foguete);
Suporte a Blobs (grava qualquer binário, imagem, xml, pdfs, etc)
Suporte a gravação/leitura de xml;
Suporte a gravação/leitura de json;
Suporte a gravação/leitura de GIS (informações geográficas);

Desvantagens:
Insert mais lento que MySQL, pq é um banco totalmente MVCC, ou seja, todo e qualquer insert/update é criado um novo registro;

Segundo melhor banco? MySQL.
Vantagens:
Mais rápido que o PostgreSQL para gravar dados;
Suporte a Blobs (grava qualquer binário, imagem, xml, pdfs, etc)
Desvantagens:
Não têm suporte ao SQL 100%, (melhorou na versão 8)
Suporte a ACID somente com storage InnoDB;
Não têm suporte a gravação/leitura de xml;
Não têm suporte a gravação/leitura de json;

pergunta:
Fernando queiroz escreveu:Qual a opção menos traumática em termos de mudanças

Resposta curta, nenhuma. Passar do DBF para o SQL, exige mudanças, não têm como.

Com relação a forma de acesso, existe várias opções.
Livres:
SQLMIX
Vantagens: acesso nativo, multiplataforma
Desvantagens: sintaxe irregular, somente o básico, mistura acesso dbf/sql

ADO
Vantagens: sintaxe melhor, mais organizada, fácil de usar
Desvantagens: acesso ODBC (mais lento), somente Windows, suporte básico aos recursos do Banco

Não-Livres:
SQLRDD:
Vantagens: acesso nativo (alguns bancos), multiplataforma
Desvantagens: sintaxe irregular, mistura acesso dbf/sql, suporte básico aos recursos do Banco.

DBDDBD:
Vantagens: acesso nativo (PostgreSQL, Sqlite e MySQL), multiplataforma
Desvantagens: sintaxe dbf, mistura acesso dbf/sql

HBDBD:
Vantagens: acesso nativo (PostgreSQL, Sqlite e MySQL), multiplataforma, sintaxe clara e objetiva, api completa, fácil de usar, não mistura dbf/sql

Sobre a SQLRDD, aqui vai alguns comentários. Após estudar e implementar a API na biblioteca DBDRDD, para ter 100% do suporte da SQLRDD, posso dizer sem meias palavras que é a maior bagunça que já vi. Não aconselho pra ninguém que a implemente, ela acrescenta tantos problemas ao código, que é uma surpresa que consiga funcionar. A manutenção deve ser um pesadelo.

A mais fácil? Sem dúvida nenhuma a HBDBD, veja o exemplo dos fontes do HBSQL.
http://www.pctoledo.com.br/forum/viewtopic.php?f=39&t=23285&p=136353#p136353

Baseado em classes agora 100%.
Classe TConnnection, engloba todas as funcionalidades para se conectar ao Banco;
Classe TDataset, manipula o dataset de retorno;
Classe TPrepare, manipula "prepared queries";

Com a classe TDataset, pode-se usar um dataset dessa forma:
while(!oDS:Eof())
    hROW := oDS:RowHash()
    ? hROW["Nome"]
    oDS:Next()
End

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 08 Out 2019 00:27
por JoséQuintas
Fernando queiroz escreveu:Bom, to querendo começar a migrar ou não para um SGDB , pergunta:
Qual a opção menos traumática em termos de mudanças
Andei olhando vaias opções LETODBF, MYSQL, ACCESS, MARIADB
Qual seria a Indicação dos nobres colegas que já usam um SGBD
Os objetivos seriam: SEGURANCA, PODER GRAVAR OS XML /PDF NO ARQUIVO


Quase impossível tudo junto.
Quanto mais fácil, pior.
E sempre tem a questão de gosto pessoal e/ou forma de trabalho, que pode se alterar até mesmo durante a migração.

Segurança?
Bom... de DBF pra qualquer outra coisa, já ganha segurança.
Se tiver segurança demais... de repente a própria segurança pode te atrapalhar na migração.
Mas não sei se quer dizer segurança do ponto de vista de protegido, ou segurança do ponto de vista de não estragar.

Pode considerar o seguinte:
de DBF pra qualquer coisa.... vai ser complicado
De qualquer coisa pra outra coisa... vai ser mais fácil

Access - só se for uso local. Rede nem pensar, perigoso nos dias atuais
Mariadb - recebi comentário de problemas, diferenças com relação a MySQL
Letodbf - não sei dizer sobre salvar documentos, talvez tenha a limitação dos DBFs.
Sobrou da lista o MySQL.

Decidido por MySQL... aí vém outra coisa: como conectar ao MySQL? Há várias opções de fazer isso.
RddSql, SqlMix, a mais antiga do Harbour que se não me engano é hbmysql, ADO, Mediator, etc.

E depois tem o uso... de repente escolhe uma coisa, e na prática não acha confortável, ou vai aprendendo a usar o MySQL e decide tirar mais proveito dele...
Fora que pode escolher alguma coisa com bug, e nem saber que se trata de bug.

Sobre como conectar:
Em DBF não tem opção, é aquilo e pronto.
Em MySQL, há várias opções.
Mas nada impede de usar várias opções no aplicativo.
Então... num primeiro momento... o importante não é o que vai usar pra ir para o MySQL, mas sim ir para o MySQL.
Uma vez no MySQL, testa e escolhe o que quiser pra fazer uso dele.
Aprende como tirar proveito do que existe, e pode saber escolher outra alternativa.

MySQL: Salvo XMLs de nota desde 2008, há 11 anos, usando ADO.
Sou principiante ainda, muita coisa em MySQL, mas ainda principiante, fazendo pouco uso de recursos do MySQL.
MySQL é o melhor? ADO é o melhor?
Alguém me mostrou como usar Visual Basic 6 e ADO que era o uso comum do Visual Basic 6.
Também usei com DBF, simultâneo com Clipper. No VB6 usando comandos SQL e ADO pra usar DBF!!!!

Minha referência básica: funciona há 11 anos, nunca deu problema. Vou testar outra coisa pra que?

Nesse meio tempo, já usei servidor aqui comigo, servidor na internet, servidor nos clientes.... transferência de dados entre os servidores sem os clientes nem perceberem, etc.

Uma vez o cliente ligou pra mim: estou sem internet mas precisava da nota x... tem como pegar do seu servidor e enviar pra mim?
Eu só respondi: e quem disse que precisa do meu servidor ou da internet?, já está aí com você, já transferi tudo pro seu servidor!!!!
E ele consultou no aplicativo e viu que o XML, PDF, etc. tava tudo lá.

Sei pouco ainda do MySQL, tenho muito que aprender.
Mas... vou usando, e vou tirando proveito do que vou aprendendo.

Talvez não fizesse isso, se ainda estivesse tentando decidir o que usar.
Apenas vou testando, vendo o que é melhor ou pior, se dá pra melhorar ou não, e vou tirando cada vez mais proveito.

Tem mais rápido? tem mais eficiente? sei lá... só sei dizer que tá funcionando, e tá fazendo o que eu preciso.

Ainda não cheguei nessa parte de saber escolher o que poderia ser melhor....
Por enquanto só decidi fazer mais uso de MySQL... e acho que exagerei em mudar muita coisa ao mesmo tempo kkkkk
Corre o risco de voltar atrás para fazer uma coisa de cada vez.

É mudança de estrutura, mudança de nome de arquivo, mudança de chave de acesso, controle da numeração...
O problema é que me empolguei, e comecei a alterar uma coisa antes de terminar a outra...
Agora tá tudo incompleto kkkk
E complica conferir tudo de uma vez... chega uma hora que a gente começa a enxergar demais ou enxergar de menos.... kkkkk

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 08 Out 2019 00:34
por JoséQuintas
Não é exagero não....
Esta lista é SOMENTE DE HOJE, de fontes alterados HOJE.
A lista nem cabe na tela.
E não é por causa de migrar para MySQL, é porque decidi fazer mais coisas ao mesmo tempo.

mysql.png

Harbour - SQLMIX x SQLRDD

MensagemEnviado: 08 Out 2019 00:41
por JoséQuintas
tem as da lib que falta salvar - já andei salvando mais hoje.

libjpa.png


e tem da sefazclass, coisas que começaram hoje

sefaz.png


Pois é....
Como eu disse... muita coisa ao mesmo tempo....
Embolei MySQL com outras coisas...

E isso porque hoje teve as mudanças do governo, e fiquei quase o dia inteiro só tratando das mudanças do governo.
Sério.

Já nem sei mais o que falta fazer das mudanças do MySQL e afins...