Minha classe intermediária pra ADO

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Minha classe intermediária pra ADO

Mensagem por JoséQuintas »

Primeiro entenda o ADO e SQL, depois use a classe.
Basicamente é só um wrapper, só rotinas intermediárias.

Primeira coisa: precisa da variável com conexão, pública ou outro modo pra multithread.

Código: Selecionar todos

AppConexao := ConexaoMySQL() // crie conforme seu servidor

Código: Selecionar todos

PROCEDURE LISTASIMPLES

   LOCAL cnSQL := ADOClass():New( AppConexao )

   WITH OBJECT cnSQL
      :cSQL := "SELECT * FROM CLIENTES ORDER BY NAME"
      Execute()
      DO WHILE ! :Eof()
           ? :String( "NOME", 30 )
           ? :String( "ENDERECO", 30 )
          ? :String( "CIDADE", 30 )
         :MoveNext()
    ENDDO
   :CloseRecordset()
   ENDWITH
RETURN
Em tbrowse, semelhante, seja console, gtwvg, hwgui, minigui, ou outra.

Pra facilitar conversão, tem rotina pra DBF e SQL.
É trocar o REPLACE campo WITH conteudo por :QueryAdd( "campo", conteudo )

Código: Selecionar todos

WITH OBJECT cnSQL
   :QueryCreate()
   :QueryAdd( "CODIGO", nCodigo )
   :QueryAdd( "NOME", cNome )
   :QueryAdd( "ENDERECO", cEndereco )
   :DBFQueryExecuteInsert() // em DBF
   :QueryExecuteInsert( "CLIENTES" ) // MySQL
   // tem também DBFQueryExecuteUpdate()
   // e QueryExecuteUpdate( "CLIENTES", "codigo=5" ) // pra atualizar o SQL precisa saber a chave
ENDWITH
Durante a migração pode:

a) Executar somente o de DBF
Continua tudo funcionando, apenas trocou o fonte. continua rodando nos clientes normalmente

b) Depois pode executar DBF e SQL
Continua tudo funcionando, mas agora também salva no MySQL
Pode instalar nos clientes e acompanhar o funcionamento
Pode alterar o fonte que quiser, da tabela que quiser, pra deixar de usar DBF e usar MySQL, afinal, tem tudo nos dois

c) Depois deixa só o SQL
Quando não precisar mais do DBF, apenas apaga a linha de salvar em DBF
Já vai estar tudo testado e funcionando.

A classe está mais voltada pra MySQL, mas não impede o uso em outras bases de dados

Com certeza essa é apenas uma parte das funcionalidades.
Mas se aí faz leitura e gravação (inclusão/atualização).... acho que tem a parte mais importante.

Lógico, precisa entender de ADO, SQL, e da base que vai usar, afinal, vai criar tabelas, criar índices, definir o tipo de cada campo como incremental, int, double, decimal, char, varchar, text, date, datetime, etc., codepage do banco de dados, codepage da conexão, etc. precisa conhecer essas coisas primeiro, pra não ter problemas depois.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

Minha classe intermediária pra ADO

Mensagem por malcarli »

Bom dia Mestre, está classe está disponível?

obrigado
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Minha classe intermediária pra ADO

Mensagem por JoséQuintas »

Vou deixar mais independente do aplicativo pra colocar no github.

Eu tinha feito browse em hwgui e minigui, mas não sei se ainda estão por aqui.
Só passei a salvar testes a partir do dlgauto.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Minha classe intermediária pra ADO

Mensagem por JoséQuintas »

De repente até altero o dlgauto pra gerar automático pra SQL além de DBF....

Código: Selecionar todos

METHOD First() CLASS frm_Class

   IF ::lIsSQL
      ::cn:Execute( "SELECT " + ::cDataField + " FROM " + ::cDataTable + " ORDER BY " + ::cDataField + " LIMIT 1" )
      //
      ::cn:CloseRecordset()
   ELSE
      GOTO TOP
   ENDIF
   ::UpdateEdit()

   RETURN Nil

METHOD Last() CLASS frm_Class

   IF ::lIsSQL
      ::cn:Execute( "SELECT " + ::cDataField + " FROM " + ::cDataTable + " ORDER BY " + ::cDataField + " DESC LIMIT 1" )
      //
      ::cn:CloseRecordset()
   ELSE
      GOTO BOTTOM
   ENDIF
   ::UpdateEdit()

   RETURN Nil

METHOD Next() CLASS frm_Class

   IF ::lIsSQL
      ::cn:Execute( "SELECT " + ::cDataField + " FROM " + ::cDataTable + " WHERE " + ::cDataField + ;
         " > " + ::axKeyValue + " ORDER BY " + ::cDataField + " DESC LIMIT 1" )
      //
      ::cn:CloseRecordset()
   ELSE
      SKIP
      IF Eof()
         GOTO BOTTOM
      ENDIF
   ENDIF
   ::UpdateEdit()

   RETURN Nil

METHOD Previous() CLASS frm_Class

   IF ::lIsSQL
      ::cn:Execute( "SELECT " + ::cDataField + " FROM " + ::cDataTable + " WHERE " + ::cDataField + ;
         " < " + ::axKeyValue + " ORDER BY " + ::cDataField + " LIMIT 1" )
      //
      ::cn:CloseRecordset()
   ELSE
      SKIP -1
      IF Bof()
         GOTO TOP
      ENDIF
      ::UpdateEdit()
   ENDIF

   RETURN Nil
Por enquanto só está anotado.
No dlgauto tem a situação de trabalhar sem chave de acesso, e não pensei como resolver essa questão.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Minha classe intermediária pra ADO

Mensagem por fladimir »

qual odbc instala pra usar com ela?
uma vez cheguei a tentar testar, mas não funcionou
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Minha classe intermediária pra ADO

Mensagem por JoséQuintas »

fladimir escreveu:qual odbc instala pra usar com ela?
uma vez cheguei a tentar testar, mas não funcionou
Qualquer uma, mas tenho usado MySQL 5.3, tanto pra MySQL quando MariaDB.

Lembrando: harbour 32 bits, é tudo 32 bits, incluindo o ODBC.

É só fazer um teste sem a classe, se funcionar sem a classe também funciona com a classe.

Código: Selecionar todos

oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := "string" // conforme o odbc
oConexao:CursorLocation := 3
oConexao:Open()
oRs := oConexao:Execute( "SELECT 10 AS QTD" )
? oRs:Fields( "QTD" ):Value
oRs:Close()
oConexao:Close()
Isso acima é sem a classe.
Se isso funcionar, a máquina tá pronta pra ADO e pra classe.

O que a classe vai usar é a conexão, a mesma criada aí encima.

Se criar pra Excel, SQLite, PostGres, MySQL, SQLServer, Access, DBF, tanto faz.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder