UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se puede subir archivos al foro, favor de hacerlo en servidor externo (Dropbox, Drive...) y dejan link. "Sin archivo no hay respuestas"

Favor de leer "Todos los temas" Click aquí.

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

1 CRUD EXCELMYSQL CON ADODB el 26/10/16, 03:53 pm

root2


Primero que nada saludar a todos los que participan en este foro, tal como indica en el tema de mi consulta debo mediante una hoja en excel recuperar informacion de la tabla de una DB MySQL en la hoja Excel existen muchas formulas que realizan calculos en funcion a las 7 variables que se recuperan de la DB, una vez que en excel las formulas calculan los 4 resultados nuevamente deben guardarse en la DB MySQL este procedimiento se debe realizar mas o menos cada 10 minutos.

Mi primer objetivo para comenzar a realizar lo descrito anteriormente era conseguir conectarme a la DB MySQL, para ello encontre la siguiente pagina:

http://forums.mysql.com/read.php?10,100302

Del codigo publicado en dicha pagina estoy usando la siguiente parte:


Código:
Option Explicit
Option Base 1

Sub excelmysql()
' VBA to perform various actions on MySQL tables using VBA
' Majority of the original code adapted from Carlmack http://www.ozgrid.com/forum/showthread.php?t=46893

' PLEASE DO THE FOLLOWING BEFORE EXECUTING CODE:
' 1)In VBE you need to go Tools/References and check Microsoft Active X Data Objects 2.x library
' 2)Install MySQL ODBC 3.51 Driver. See dev.mysql.com/downloads/connector/odbc/3.51.html or google "MySQL ODBC 3.51 Driver"

'-------------------------------------------------------------------------
' Connection variables
Dim conn As New ADODB.Connection
Dim server_name As String
Dim database_name As String
Dim user_id As String
Dim password As String

' Table action variables
Dim i As Long ' counter
Dim sqlstr As String ' SQL to perform various actions
Dim table1 As String, table2 As String
Dim field1 As String, field2 As String
Dim rs As ADODB.Recordset
Dim vtype As Variant

'----------------------------------------------------------------------
' Establish connection to the database
server_name = "127.0.0.1" ' Enter your server name here - if running from a local computer use 127.0.0.1
database_name = "pruebas" ' Enter your database name here
user_id = "prueba" ' enter your user ID here
password = "12345678" ' Enter your password here

Set conn = New ADODB.Connection
conn.Open "DRIVER={MySQL ODBC 3.51 Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name _
& ";UID=" & user_id _
& ";PWD=" & password _
& ";OPTION=16427" ' Option 16427 = Convert LongLong to Int: This just helps makes sure that large numeric results get properly interpreted
' Close connections
On Error Resume Next
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
On Error GoTo 0
End Sub

A ejecutar el codigo me da el mensaje "Error de Automatizacion Se ha producido el error -2147467259 (800004005) en tiempo de ejecucion"

Solicito vuestra clemencia debido a que mi dominio de VBA no es completa.

para realizar la conexion entre Excel y MySQL se descargo Conector Mysql ODBC 5.3 de la pagina de Mysql.
En las referencias VBA del proyecto estoy usando "Microsoft Activex Data Object 2.8 Library"
la version de la base de datos MySQL es la 5.7.
la version de excel que se esta usando es excel 2010.
la version del Sistema Operativo Windows 7 SP1.


Agradezco mucho su tiempo y gentil atencion.

Saludos cordiales.



Última edición por root2 el 26/10/16, 04:19 pm, editado 1 vez (Razón : agregado de datos)

2 CRUD EXCELMYSQL CON ADODB el 26/10/16, 05:33 pm

root2


Me respondo yo mismo Smile quite la version de ODBC que estaba usando e instale la version 3.5 segun indicacion del comentario del codigo, ya no tengo error, por lo que modifique el codigo para recuperar datos de la DB mostrarlo en la hoja excel y volver a guardarlo en otra tabla tal cual indico en mi consulta inicial, pero no consigo resultado alguno, tampoco me da error, el codigo modificado es el siguiente:


Código:
Option Explicit
Option Base 1

Sub excelmysql()
' VBA to perform various actions on MySQL tables using VBA
' Majority of the original code adapted from Carlmack http://www.ozgrid.com/forum/showthread.php?t=46893

' PLEASE DO THE FOLLOWING BEFORE EXECUTING CODE:
' 1)In VBE you need to go Tools/References and check Microsoft Active X Data Objects 2.x library
' 2)Install MySQL ODBC 3.51 Driver. See dev.mysql.com/downloads/connector/odbc/3.51.html or google "MySQL ODBC 3.51 Driver"

'-------------------------------------------------------------------------
' Connection variables
Dim conn As New ADODB.Connection
Dim server_name As String
Dim database_name As String
Dim user_id As String
Dim password As String

' Table action variables
Dim i As Long ' counter
Dim sqlstr As String ' SQL to perform various actions
Dim table1 As String, table2 As String
Dim field1 As String, field2 As String
Dim rs As ADODB.Recordset
Dim vtype As Variant

'----------------------------------------------------------------------
' Establish connection to the database
server_name = "127.0.0.1" ' Enter your server name here - if running from a local computer use 127.0.0.1
database_name = "pruebas" ' Enter your database name here
user_id = "prueba" ' enter your user ID here
password = "12345678" ' Enter your password here

Set conn = New ADODB.Connection
conn.Open "DRIVER={MySQL ODBC 3.51 Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name _
& ";UID=" & user_id _
& ";PWD=" & password _
& ";OPTION=16427" ' Option 16427 = Convert LongLong to Int: This just helps makes sure that large numeric results get properly interpreted

'-------------------------------------------------------------------------
' Various Actions

' Define variables (not all of the variables will be required for each action)
vtype = Array("Text", "LongText", "Int(10)", "Float", "Double", "Date", "Time") ' array of commonly used MySQL variable types
table1 = "dtinicial"
table2 = "resultado"
field1 = "dato1"
field2 = "dato2"


'---------------------------------------------
' Extract MySQL table data to first worksheet in the workbook
GoTo skipextract
Set rs = New ADODB.Recordset
sqlstr = "SELECT * FROM " & table1 ' extracts all data
rs.Open sqlstr, conn, adOpenStatic
With Worksheets("Hoja1").Cells("A1") ' Enter your sheet name and range here
.ClearContents
.CopyFromRecordset rs
End With
skipextract:

' Write new entries to a table from the first sheet of the workbook
GoTo skipwrite
With Sheets(1)
For i = 1 To 10000
If Cells(i, 1) = "" Then Exit For
sqlstr = "INSERT INTO " & table2 & " SET " _
& field1 & " = '" & Cells(i, 1) & "', " _
& field2 & " = '" & Cells(i, 2) & "'"
conn.Execute sqlstr
Next i
End With
skipwrite:

'-----------------------------------------------------------------------
' Close connections
On Error Resume Next
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
On Error GoTo 0
End Sub

nuevamente solicito clemencia ya que como mencione anteriormente soy neofito en vba.

Agradezco su gentil atencion.

Saludos cordiales.



Última edición por root2 el 26/10/16, 05:38 pm, editado 2 veces (Razón : Edicion de codigo)

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.