segunda-feira, 20 de maio de 2013

Macro VB - Conexão com BD ( Access; dBase; SQL Server)


A bastante tempo não trabalhava com macros, precisei mês passado e achei legal compartilhar.
Trabalho em um loja de materiais de construção e temos três maquinas de tintas. Solicitamos a equipe desenvolve nosso sistema para fazer uma integração com o banco de dados dessas maquinas de tintas, pra facilitar a operação. Eles colocaram alguns empecilhos para desenvolver pois teriam que estudar a estrutura dos BD e das formulas. Então fiz as macros para detalhar tudo pra eles.
Cada maquina trabalha com um banco de dados diferente. Uma utiliza SQL Server 2005, a outra Access e por ultimo dBase.


O Banco SQL Server, tinha uma funcao que retornava todas as tabelas em que eu precisaria em um RecordSet.


  1. Set Conn = CreateObject("ADODB.Connection")
  2. Set rs = CreateObject("ADODB.Recordset")
  3. Set Cmd = CreateObject("ADODB.Command")
  4.    Conn.Open "Provider=SQLOLEDB;Password=suasenha;Persist Security Info=True;User ID=seuusuario;Initial Catalog=seuBD;Data Source=seuUsuarioWindows\seuBD; Network Library=dbmssocn"
  5.    Cmd.ActiveConnection = Conn
  6.    sql = "comando sql aqui"
  7.    Cmd.CommandText = sql
  8.    Set rs = Cmd.Execute


O Banco Access e no dBase foram executados varios comandos sql e cada resultado preencia uma tabela diferente.


Access:


  1. Sub executaConsutla(varSQL As String)
  2. Dim varConn As String
  3.    Range("A10").CurrentRegion.ClearContents
  4.    varConn = "ODBC;DBQ=sua base  de dados por exemplo C:\exemplo.mdb;Driver={Driver do Microsoft Access (*.mdb)}"
  5.         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A10"))
  6.             .CommandText = varSQL
  7.             .Name = "Query-39008"
  8.             .Refresh BackgroundQuery:=False
  9.         End With
  10. End Sub


dBase: a base que esta em dBase é um pouco mais confusa por isso criei varias funcoes que fazem a consultas e salva em tabelas diferentes:

  1. Sub consultaProdutos()
  2. Dim varSQL As String
  3. Dim varConn As String
  4.    varSQL = "comando sql"
  5.    varConn = "ODBC;DBQ=caminho da base & ";Driver={Driver do Microsoft dBase (*.dbf)}"
  6.    
  7.    getTabela varSQL, varConn, “suaTabela”
  8.        
  9. End Sub
  10. Sub getTabela(varSQL As String, varConn As String, tabela As String)
  11.    Worksheets(tabela).Activate
  12.    
  13.    Range("A10").CurrentRegion.ClearContents
  14.  
  15.        With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A10"))
  16.             .CommandText = varSQL
  17.             .Name = "Query-39008"
  18.             .Refresh BackgroundQuery:=False
  19.         End With
  20.         
  21.    Worksheets("consulta").Activate
  22. End Sub


Para o caso de alguem estar com uma tarefa semelhante a minha:
As maquinas de tinta que eu vi armazenam suas formulas em onças, para passar para ml basta multiplicar por 29,5735295625. Também tem formulas armazenadas com divisoes de onças por exemplo: 1Y25+5/96 bas ta dividir segunda por 48 e a terceira por 96, o resultado seria (1+(25/48)+(5/96))*29,5735 = 46,5166 ml.

Nenhum comentário:

Postar um comentário