Transacciones SQL Entre Access Y MySQL

Necesito sacar cada hora unos datos que están en un sistema Sybase, otros que están en access y alimentar con ellos una base MySQL que a su vez se utiliza para alimentar un web con PHP.
A Sybase accedo exclusivamente por un ODBC de sólo lectura que nos ha proporcionado la empresa ->DSN de sistema "Acceso al informacional" .
He instalado también el driver de ODBC para MySQL .
El caso es que si lo vinculo todo desde access, puedo hacer todos las consultas que quiera, sacando un campo de cada origen o bien actualizar el MySQL con los datos relacionados del Sybase y access.
Tengo que automatizar el proceso y estoy haciendo pruebas con .net. Logro conectarme con cada Origen, pero no soy capaz de hacer un select con un campo de cada tabla o insertar registros en MySQL con una columna de cada origen.
Lo máximo que he conseguido ha sido crear unas consultas en access que se puedan invocar desde .net y que me descarguen datos desde el ODBC de Sybase en Access pero soy incapaz de hacer un INSERT de los registros de Access a MySQL.
Este sería mi código:
' conectamos al Sybase con el ODBC..por ejemplo 
Dim odsCnn As New ADODB.Connection 
odsCnn.Open("dsn=Acceso al informacional;uid='" & strUser & "';pwd='" & strPassword & "';") 
'Conectando a Access ... Por ejemplo:
Dim odbCnn As System.Data.OleDb.OleDbConnection
Dim connectionString As String
path_Bd = TextBoxRuta.Text 'MsgBox(path_Bd)
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data source=" & path_Bd
odbCnn = New OleDb.OleDbConnection(connectionString)
odbCnn.Open()
'generando una tabla en acces con los datos de Sybase que funciona
Dim cmd = New OleDb.OleDbCommand(nombre_de_consulta_creacion_de_tabla_en_access, odbcnn)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.ExecuteNonQuery()
'Conectando a mySQL ... Así 
Dim myCnn As System.Data.Odbc.OdbcConnection
Dim myConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=abtc; " & _
"User=root; Password=root;Option=3;"
myCnn = New System.Data.Odbc.OdbcConnection(myConnectionString)
myCnn.Open()
'intento de pasar los datos de access a MySQL que no funciona
Dim cmd As Odbc.OdbcCommand
cmd = New Odbc.OdbcCommand('INSERT INTO tabla_de_mySQL SELECT * FROM tabla_de_access;', myCnn)
Cmd. ExecuteNonQuery()
No se como hacer esto último porque el sistema intenta buscar la tabla_de_access en MySQL.
No se como decirle que la coja del access.

1 Respuesta

Respuesta
1
Yo me encontré con el mismo problema.
Desde MySQL no puedes acceder a las tablas de Access. La solución a mi problema, fue exportar a un txt la tabla que quería. Y luego vincularla en ese mismo access.
Con esa tabla vinculada podía trabajar con Access normalmente y, ademas, podía conectar desde MySQL con ese archivo txt.
No se si esto te puede servir.
Hola,
Muchas gracias. He probado lo que me dices y funciona correctamente. Voy a implantar este sistema para salir del paso, de momento.
Llevo varios días buscando ésto por internet y no encuentro información al respecto. Está todo lleno de manejar MySQL desde access con ODBC o exportar Access a MySQL, pero las pocas preguntas que he visto como la mía no tienen respuesta. No me puedo creer que no haya nada.
Lo dicho, un millón de gracias y un cordial saludo.
Óscar
De nada.
Finaliza la pregunta cuando puedas
Hola de nuevo. Al final he conseguido pasar los datos de access a MySQL de la siguiente manera. Quizás te pueda servir a ti también
'conectando a access
Dim connectionString As String
Dim odbCnn As System.Data.OleDb.OleDbConnection
path_Bd = TextBoxRuta.Text
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data source=" & path_Bd
odbCnn = New OleDb.OleDbConnection(connectionString)
odbCnn.Open()
'Conectando a MySQL
Dim myCnn As System.Data.Odbc.OdbcConnection
Dim myConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=abtc; " & _
"User=root; Password=root;"
myCnn = New System.Data.Odbc.OdbcConnection(myConnectionString)
myCnn.Open()
Dim myReader As OleDbDataReader
Dim cmd As OleDbCommand
cmd = New OleDb.OleDbCommand("SELECT * FROM tabla", odbCnn)
myReader = cmd.ExecuteReader()
Dim schemaTable As DataTable
schemaTable = myReader.GetSchemaTable()
Dim myfield As DataRow
Dim camposDestino As String = ""
Dim valores As String = ""
Dim i As Integer = 0
For Each myfield In schemaTable.Rows
<span style="white-space: pre;"> </span>'MYFIELD(0) ES EL NOMBRE DE LA COLUMNA
<span style="white-space: pre;"> </span>If i = 0 Then
<span style="white-space: pre;"> </span>camposDestino = (myfield(0).ToString())
<span style="white-space: pre;"> </span>valores = valores & "?"
<span style="white-space: pre;"> </span>Else
<span style="white-space: pre;"> </span>camposDestino = camposDestino & "," & (myfield(0).ToString())
<span style="white-space: pre;"> </span>valores = valores & ",?"
<span style="white-space: pre;"> </span>End If
<span style="white-space: pre;"> </span>i = i + 1
Next
Dim cmdMy As System.Data.Odbc.OdbcCommand
cmdMy = New System.Data.Odbc.OdbcCommand("INSERT INTO averias_ods (" & camposDestino & ")" & _
        " VALUES(" & valores & ")", myCnn)
' decrementamos una vez i porque en el último for ha salido con una de más
i = i - 1
Dim j As Integer
While myReader.Read()
<span style="white-space: pre;"> </span>cmdMy.Parameters.Clear()
 <span style="white-space: pre;"> </span>For j = 0 To i
<span style="white-space: pre;"> </span>cmdMy.Parameters.AddWithValue(j + 1, myReader(j))
<span style="white-space: pre;"> </span>Next
<span style="white-space: pre;"> </span>cmdMy.ExecuteNonQuery()
End While
myReader.Close()
Un cordial saludo.
Óscar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas