Clipper On Line • Ver Tópico - ADO / SQLMIX / ADOXB

ADO / SQLMIX / ADOXB

Discussão sobre SQL

Moderador: Moderadores

 

ADO / SQLMIX / ADOXB

Mensagempor JoséQuintas » 08 Mai 2015 17:04

Só repassando a minha posição atual:

- Usando uma única conexão aberta para o aplicativo inteiro, abre no início e fecha no final.
- Log do sistema, usado no sistema inteiro, somente no MySql
- Alguns arquivos específicos, deixei no MySql pra eliminar DBF, como código de barras de produtos e outros.
- Alíquotas IBPT pra calcular imposto ao consumidor, também no MySql
- Mensagens da legislação, usadas na nota fiscal, também no MySql
- Somente 1 cliente emitente de nota fiscal está de fora do MySql, mas é um que emite uma nota por semana. Parece exagero instalar um servidor MySql só pra isso, mas será mais exagero ainda deixar o sistema com DBF só por causa dele.
- Clientes da parte contábil sem servidor MySql - ainda não entrei em contato

Até agora nenhum usuário percebeu diferença, e nenhuma mensagem de erro (Usuário só repara em mensagem de erro).
Como meu aplicativo envia erros por email, qualquer problema eu já saberia, mesmo sem que o usuário avisasse.

Continuo alterando sem pressa.
Já deu pra perceber que quando chegar em pedidos talvez não possa fazer por etapa.
Mas vou me preocupar com isso depois.

Ah sim... o backup
Defini a codepage na string de conexão pra usar ASCII.
O backup pelo sistema funciona, e consigo restaurá-lo pelo HeidiSql.
Mas pelo HeidSQL o backup é muito mais rápido pra fazer e restaurar.
De qualquer forma, como o sistema faz automático, estou fazendo minha parte pra não depender do usuário.
No meu backup não vinculo a uma base de dados específica. A vantagem é poder até voltar o backup pra outra base no mesmo servidor como teste.

Aumentei o limite da string MySql no aplicativo pra 1MB. Isso faz diferença no backup/restore.
O limite do servidor mostra como 4MB, mas não sei se é o HeidiSql, numa restauração limitou a 2MB.

Então... tudo continua tranquilo.

O que estou usando:
- Harbour 3.2
- Servidor MySql Community 5.6 (no servidor)
- Oracle ODBC MySql 3.51.30 (nas estações)
- HeidiSQL pra criar o banco de dados, testes de comandos SQL, e backup/restore
- Nenhuma LIB pra ADO, somente o ADO mesmo que já tem em todo Windows

Pra não dizer que não tive problema:
Por enquanto não consegui instalar o odbc mysql em terminais XP de uma rede com servidor e domínio mesmo com a senha do administrador, então vou precisar do administrador da rede pra liberar isso.
Achei até curioso isso: será possível que a segurança do XP em rede seja melhor, afinal nos terminais com W7 foi de primeira....

Esse é o único cliente meu "ativo" que ainda não uso MySql.

Agora só falta pensar num backup mais automático, pra fazer de madrugada aonde possível.
Se o Windows aceitar um programa como serviço, mesmo que possua tela, seria só carregar meu aplicativo.
Ele cria o backup ao entrar, e se ficar fora de uso ele se encerra, então daria pra usar ele mesmo.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 10263
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 653 vezes

ADO / SQLMIX / ADOXB

Mensagempor cjp » 23 Abr 2017 00:01

Estou estudando este tópico, com vistas a eventualmente mudar de RDDINFO para ADO, se for mais vantajoso.

Fiz um teste rápido, está dando erro antes desta linha:

oConexao:CursorLocation    := adUseClient // cliente


Fiz o teste assim:

function testesdiversos

...
// Início do aplicativo:
Conexao():Open()

oResultado := Conexao():Execute( "SELECT * FROM leitura" )

browse()

// final do aplicativo:
Conexao():Close()
...
return

// Função auxiliar
FUNCTION Conexao()
    STATIC oConexao
   local cMySqlDriver :="MySQL ODBC 3.51 Driver"
   local cServer :="mysql.inaciocarvalho.xxx.net"
   local cDatabase :="xxx"
   local cUser :="xxx"
   local cPassword :="xxx"

   IF oConexao == NIL
      oConexao := win_OleCreateObject( "ADODB.Connection" )

      oConexao:ConnectionString := "Driver=" + cMySqlDriver + ";Server=" + cServer + ";Option=131072;Stmt=;" + ;
         "Database=" + cDatabase + ";User ID=" + cUser + ";Password=" + cPassword + ";"
      oConexao:CursorLocation    := adUseClient // cliente
      oConexao:CommandTimeOut    := 60 // seconds
      oConexao:ConnectionTimeOut := 60 // seconds
   ENDIF
   RETURN oConexao


Não encontrei neste tópico nenhuma inicialização do ADO, como tenho do RDDINFO, assim:

#require "rddsql"
#require "sddodbc"
#include "dbinfo.ch"
   
//   REQUEST SQLMIX, SDDODBC, DBFNTX
#include "inkey.ch"
#include "hbgtinfo.ch"
//         #include "dbinfo.ch"
         #define RDDI_CONNECT     1001
         #define RDDI_DISCONNECT   1002
         #define RDDI_EXECUTE     1003
         REQUEST SQLMIX, SDDODBC, DBFNTX
         ANNOUNCE RDDSYS


Não precisa?
Inacio de Carvalho Neto
cjp
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 958
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 6 vezes
Mens.Curtidas: 8 vezes

ADO / SQLMIX / ADOXB

Mensagempor JoséQuintas » 23 Abr 2017 12:13

Cuidado está confundindo um pouco as coisas.
E só pra lembrar, no ADO vai ter que alterar muito os fontes, não sei se já percebeu isso.

Agora vamos lá:

Tudo funciona através da conexão. Não basta conectar, é necessário ter a variável da conexão, seja PUBLIC, PRIVATE ou STATIC.

oConexao := Conexao()
oConexao:Open()


Depois pra ler, gravar, atualizar, inserir, excluir, etc. é tudo pela conexão.

oConexao:Execute( "DELETE FROM ...." )
oConexao:Execute( "INSERT INTO ..." )
oConexao:Execute( "UPDATE ..." )
oConexao:Execute( "SELECT * FROM ..." )


Mas isso não é DBF, o retorno é justamente em formato ADO, como se fosse Access ou algo parecido.
Mas o ADO é um conjunto de funções pra banco de dados, tem tudo, mas não é DBF, não tem nada pronto pra ser usado no Harbour igual DBF.
Considere como sendo um arquivo temporário em formato ADO.

oConexao:Open() // pode ser uma única vez no aplicativo inteiro

oRs := oConexao:Execute( "SELECT * FROM CLIENTES" )
DO WHILE ! oRs:Eof()
   ? oRs:Fields( "CODIGO" ):Value
   ? oRs:Fields( "NOME" ):Value
   oRs:MoveNext()
ENDDO
oRs:Close()

oConexao:Close() // se não precisa mais da conexão


Não é simples trocar de DBF pra ADO, porque vai precisar alteração de todo tratamento de arquivos.
Vai ser bom montar sua própria biblioteca pra facilitar o uso.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 10263
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 653 vezes

ADO / SQLMIX / ADOXB

Mensagempor JoséQuintas » 23 Abr 2017 12:21

Não encontrei neste tópico nenhuma inicialização do ADO, como tenho do RDDINFO


Tá tudo aqui, na conexão:
O ADO faz parte do Windows, apenas está usando.
A única coisa que não faz parte do Windows, é o "driver" de MySQL, que precisa ser instalado, e já deve ter instalado pro componente que usa RDDINFO.

// Função auxiliar
FUNCTION Conexao()
  STATIC oConexao
local cMySqlDriver :="MySQL ODBC 3.51 Driver"
local cServer :="mysql.inaciocarvalho.xxx.net"
local cDatabase :="xxx"
local cUser :="xxx"
local cPassword :="xxx"

IF oConexao == NIL
   oConexao := win_OleCreateObject( "ADODB.Connection" )

   oConexao:ConnectionString := "Driver=" + cMySqlDriver + ";Server=" + cServer + ";Option=131072;Stmt=;" + ;
    "Database=" + cDatabase + ";User ID=" + cUser + ";Password=" + cPassword + ";"
   oConexao:CursorLocation  := adUseClient // cliente
   oConexao:CommandTimeOut  := 60 // seconds
   oConexao:ConnectionTimeOut := 60 // seconds
ENDIF
RETURN oConexao
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 10263
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 653 vezes

ADO / SQLMIX / ADOXB

Mensagempor cjp » 23 Abr 2017 23:38

Acho que te entendi, mas ainda não entendi o que estaria errado no meu teste.

Eu nunca usei Access, não faço nem ideia da diferença dele pro Harbour.

Não estou comparando com DBF. Já uso MySQL, só que com RDDINFO. Não sei se tem muita diferença. Isso eu sei que ainda vou precisa estudar.

Mas a questão inicial é esta: montei um teste com base no teu exemplo inicial. Está dando erro na linha:

oConexao:CursorLocation    := adUseClient // cliente


A dúvida é: o que há de errado aí?
Inacio de Carvalho Neto
cjp
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 958
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 6 vezes
Mens.Curtidas: 8 vezes

ADO / SQLMIX / ADOXB

Mensagempor JoséQuintas » 24 Abr 2017 01:56

Ok. Nessas horas ajuda muito compilar com -w3 -es2.
Provavelmente falta a definição de adUseClient

#define adUseClient 3
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 10263
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 653 vezes

ADO / SQLMIX / ADOXB

Mensagempor cjp » 24 Abr 2017 02:42

Coloquei o #define adUseClient 3, mas continuou com o mesmo erro.

Tentei compilar com -w3 e -es2, daí não compila. Dá o seguinte:

Harbour 3.2.0dev (r1404031226)
Copyright (c) 1999-2014, http://harbour-project.org/
Harbour 3.2.0dev (r1404031226)
Copyright (c) 1999-2014, http://harbour-project.org/
Harbour 3.2.0dev (r1404031226)
Copyright (c) 1999-2014, http://harbour-project.org/
Harbour 3.2.0dev (r1404031226)
Copyright (c) 1999-2014, http://harbour-project.org/

100

100

200

300

200

100

100

400

300

500

200

200

400

600

300

300

700

500

400
Compiling '\prg\TAGENDA.PRG'...

400

600

500

100

700

500

600
Compiling '\prg\BANCO.PRG'...

600

200

700

700

300
Compiling '\prg\COMUNS.PRG'...
Compiling '\prg\GETSYS.PRG'...

100

100

200

200

300

300

100

100

200

200

300

400

500

100

600

700

200

800

100

900

No code generated.

300

100

200

400

300

500

600

400

500

200

700

600

800

900

700

800

900

1000

100

200

1100

300

300

100

1000

1100

No code generated.

400

1200

1300

500

1400

1500

1600

600

1700

700

1800

800

900

1000

1100

1200

1300

1900

1400

1500

2000

1600

2100

2200

1700

1800

2300

1900

2400

2500

2000

2600

2100

2700

2200

2300

2400

2800

2500

2900

3000

2600

3100

2700

3200

2800

2900

3300

3400

3000

3500

3600

3100

3700

3800

3200

3900

4000

4100

3300

4200

3400

3500

4300

3600

3700

4400

3800

3900

4000

4100

4200

4500

4300

4400

No code generated.

4600

4700

4800

4900

5000

5100

5200

5300

5400

5500

5600

5700

5800

5900

6000

6100

6200

6300

6400

6500

6600

6700

6800

6900

7000

7100

7200

7300

7400

7500

7600

7700

7800

7900

8000

8100

8200

8300

8400

8500

8600

8700

8800

8900

9000

9100

9200

9300

9400

9500

9600

9700

9800

9900

10000

10100

10200

10300

10400

10500

10600

10700

10800

10900

11000

11100

11200

11300

11400

11500

11600

11700

11800

11900

12000

12100

12200

12300

12400

12500

12600

12700

12800

12900

13000

13100

13200

13300

13400

13500

13600

13700

13800

13900

14000

14100

14200

14300

14400

14500

14600

14700

14800

14900

15000

15100

15200

15300

15400

15500

15600

15700

15800

15900

16000

16100

16200

16300

16400

16500

16600

16700

16800

16900

17000

17100

17200

17300

17400

17500

17600

17700

17800

17900

18000

18100

18200

18300

18400

18500

18600

18700

18800

18900

19000

19100

19200

19300

19400

19500

19600

19700

19800

19900

20000

20100

20200

20300

20400

20500

20600

20700

20800

20900

21000

21100

21200

21300

21400

21500

21600

21700

21800

21900

22000

22100

22200

22300

22400

22500

22600

22700

22800

22900

23000

23100

23200

23300

23400

23500

23600

23700

23800

23900

24000

24100

24200

24300

24400

24500

24600

100

24700

24800

24900

25000

25100

25200

25300

25400

25500

25600

25700

25800

25900

26000

26100

26200

26300

26400

26500

26600

26700

26800

26900

27000

27100

27200

27300

27400

27500

27600

27700

27800

27900

28000

28100

28200

28300

28400

28500

28600

28700

28800

28900

29000

29100

29200

29300

29400

29500

29600

29700

29800

29900

30000

30100

30200

30300

30400

30500

30600

30700

30800

30900

31000

31100

31200

31300

31400

31500

31600

31700

31800

31900

32000

32100

32200

32300

32400

32500

32600

32700

32800

32900

33000

33100

33200

33300

33400

33500

33600

33700

33800

33900

34000

34100

34200

34300

34400

34500

34600

34700

34800

34900

35000

35100

35200

35300

35400

35500

35600

35700

35800

35900

36000

36100

36200

36300

36400

36500

36600

36700

36800

36900

No code generated.


Não entendi.
Inacio de Carvalho Neto
cjp
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 958
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 6 vezes
Mens.Curtidas: 8 vezes

ADO / SQLMIX / ADOXB

Mensagempor JoséQuintas » 24 Abr 2017 03:07

Só isso, nenhuma outra mensagem?
Tá igual a errorsys, sumindo com as mensagens?

Mas é um teste, ou um aplicativo inteiro?
Se tá pensando que vai colocar isso e não alterar nada no aplicativo, esqueça....
ADO exige muuuuita alteração nos fontes.
Conectar é a parte mais simples.
Talvez vários meses, trabalhando direto, e termina o aplicativo inteiro.

O uso será igual qualquer linguagem de programação, como VB, Delphi, ASP, VBScript, Windows Script, Foxpro, xBase++, etc., mas nada a ver com o tradicional DBF.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 10263
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 653 vezes

ADO / SQLMIX / ADOXB

Mensagempor cjp » 24 Abr 2017 16:48

Quando fiz da forma tradicional (hbmk2 tagenda.hbp -w3 -es2), apareceu várias mensagens na tela, mas passa muito rápido, não consegui ler. Daí eu tentei direcionar para um arquivo, assim: hbmk2 tagenda.hbp -w3 -es2 >teste.txt. Daí só apareceu o que te mandei.

Eu entendi que a conexão é só o início, e que eu teria que mudar bastante coisa no sistema. Entretanto, acho que devemos começar do início.

Mas já entendi que vc está me sugerindo que desista, pois não vou conseguir. É o que vou fazer. Obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 958
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 6 vezes
Mens.Curtidas: 8 vezes

ADO / SQLMIX / ADOXB

Mensagempor JoséQuintas » 24 Abr 2017 17:44

Mas já entendi que vc está me sugerindo que desista, pois não vou conseguir. É o que vou fazer. Obrigado.


Não. Estou apenas alertando que vai ter bastante trabalho, não é igual ao que usava antes.

Se ajustar a janela pra 1.000 linhas, por exemplo, vai ter uma lista mais completa de erros.

Se é o aplicativo inteiro, e nunca usou -w3 -es2, tente somente com o módulo do ADO.
É parecido com ADO, pra compilar o aplicativo inteiro usando -w3 -es2 vai ter que alterar muito os fontes, já que nunca usou.
Seria melhor tentar com um módulo em separado primeiro.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 10263
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 653 vezes

ADO / SQLMIX / ADOXB

Mensagempor JoséQuintas » 24 Abr 2017 17:50

Só pra comparação:

PROCEDURE Main
   ? K_ESC
   RETURN


d:\temp>hbmk2 test
hbmk2: Processing environment options: -comp=msvc
Harbour 3.4.0dev (5d434cf1f0) (2017-04-21 13:34)
Compiling 'test.prg'...
Lines 3, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_10gxdm.dir\test.c'... Done.
test.c


d:\temp>hbmk2 test -w3 -es2
hbmk2: Processing environment options: -comp=msvc
Harbour 3.4.0dev (5d434cf1f0) (2017-04-21 13:34)
Compiling 'test.prg'...
test.prg(2) Warning W0001 Ambiguous reference 'K_ESC'


Compilando SEM -w3 -es2, só vai dar erro na execução.
Compilando COM -w3 -es2, já avisou que tem algo errado no uso de K_ESC

Pra usar K_ESC, precisa do #include "inkey.ch".
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 10263
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 653 vezes

ADO / SQLMIX / ADOXB

Mensagempor Itamar M. Lins Jr. » 31 Ago 2017 07:17

Ola!
Msg de Inácio.
Estou estudando este tópico, com vistas a eventualmente mudar de RDDINFO para ADO, se for mais vantajoso.

e a msg de José Quintas:
Se tá pensando que vai colocar isso e não alterar nada no aplicativo, esqueça....
ADO exige muuuuita alteração nos fontes.


Por isso eu disse em outras postagens, que o SQLMIX é melhor do que o ADO...
Não é que a pessoa que está usando o SQLMIX, está trabalhando com DBF. Não tem fundamento essa afirmação.
Com qualquer linguagem o uso de "SQL" vc vai precisar trabalhar com o "RESULTADO" o "RETORNO" da sentença em SQL.
Usando SQLMIX esse resultado vem em DBF, em ADO vem de outra forma muito mais complicado para quem está acostumado com DBF.
Em outras palavras, usando o SQLMIX para adicionar um registro usamos "DBAPPEND" na malha DBF, e usando outras formas de acesso, usamos por exemplo aadd() em uma malha qualquer...(ADO/ODBC...) e depois fazemos um "SELECT UPDATE..."

Qual é mais vantajoso para quem está "ACOSTUMADO" com DBF ?
Sendo que SQLMIX é multiplataforma.

COM ADO:
RS:MOVENEXT
COM SQLMIX
SKIP
Qual é o mais intuitivo para nós ?

Mas isso é no resultado, para puxar e salvar na "BASE CENTRAL MySQL/Postgree etc..." temos que usar "SELECT..." tanto faz ADO ou SQLMIX.

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3436
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 98 vezes
Mens.Curtidas: 161 vezes

Anterior



Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro