Importar desde sql server y anexar los datos en ta

Quiero ejecutar una consulta de paso a través en visual basic a un servidor sql ( my_ODBC ) y anexar los datos en una tabla, la consulta se ejecuta correctamente pero no se ven los datos y no se como anexarlos a mi tabla. Este es el código, la consulta de paso la cargo desde la tabla ERROR_sql_import a "myq" y lo ejecuto. Hace la consulta pero no me muestra los datos. Tampoco se como anexar los datos a la tabla con my_anexa. Muchas gracias
Set mydb = CurrentDb
Set myq = mydb.CreateQueryDef("")
myq.Connect = my_ODBC
myq.ReturnsRecords = False
Set my_sql = mydb.OpenRecordset("SELECT * FROM [ERROR_sql_import] WHERE [Nombre_Consulta] =1 ", dbOpenForwardOnly)
While Not my_sql.EOF
          myq.SQL = my_sql!sentence_my_sql
          myq.execute
          mydb.execute my_anexa
          my_sql.MoveNext
Wend
         Myq. Close
         Mydb. Close
End Function

1 Respuesta

Respuesta
1
Primero te sugiero que vincules tu taba de sql a tu db access y así podrás trabajar como si ambas fueran tablas de Acess, luego podrías usar una instrucción para insertar todos los registros de una sola vez
Dim Qry as string
Qry = " INSERT INTO TuTablaDestino (Campo1, Campo2,.......CampoN )
SELECT Campo1, campo2,.......CampoN FROM [ERROR_sql_import] WHERE [Nombre_Consulta] =1"
mydb.execute qry
Hola experto y gracias por tu pronta respuesta, te quería consultar con que sentencia tendría que hacer ese vinculo entre mi tabla de access ( ERRORES ) y la la de sql, esta es una consulta de paso a través y la cargo en myq.sql pero cuengo corre la sentencia myq.execute me da error " debe tener al menos un campo destino ", como hago para vincular con mi tabla y que los datos del querydef se anexen a ella. Muchísimas gracias por tu ayuda. Saludos
Desde la Pestaña de Tablas, haces Clic con el botón Derecho, ahí esta la opción de vincular Tabla, eliges el tipo de Archivo odbc y luego te mostrara el formulario para hacer el enlace a tu base sql
Gracias de nuevo jeddy, la consulta es la siguiente, de esa manera no lo puedo vincular ya que la información en el servidor no es una tabla mbd que pueda vincular o importar sino que son archivos del tipo dbo. ctsv / dbo. msmerge / dbo.sys / dbo. tsvw  e information_schema. Para la consulta de paso a través uso un store procedure " SSAMSE3.base de datos.nombre tabla.criterios, al ejecutar la consulta en access me devuelve correctamente los datos, el problema lo tengo al querer hacerlo en visual basic, como te decía cuando llego a la instrucción :
Set mydb = CurrentDb
Set myq = mydb.CreateQueryDef("")
myq.Connect = my_ODBC
myq.ReturnsRecords = False
myq.sql  = " el stored procedure "
myq.execute
Hace la consulta ( la ejecuta ) pero no devuelve datos. Ademas acá es donde no se como recuperar los datos del querydef y anexarlos a mi tabla ERRORES.
Muchas gracias !
Para poder conectarte y ejecutar Porcedimientos es mejor utilizar ADO, entonces si las siguientes instrucciones no las reconoce, desde un modulo debes habilitar la referencia ( Menu Herramientas / Referencias: ¿Marcar Microsoft Activex Data Objet 2.? Library)
Luego prueba estas instrucciones:
Dim db As ADODB.Connection
  Set db = New ADODB.Connection
  db.Open "PROVIDER=MSDASQL;dsn=TuDns;uid=;pwd=;database=TuBaseDeDatos;"
  Dim sp As String
  sp = "EXEC Tu_ProcedimientoAlmacenado"
  Set Rst = New ADODB.Recordset
  Set rs = db.Execute(sp)
Hola Jeddy, perdón creo que no me estoy explicando bien, la verdad es que soy nuevo en VB, el tema es que la conexión se ejecuta y la consulta también, hasta la instrucción myq.execute corre OK, lo que no logro hacer es anexar los datos obtenidos, que están en el querydef, ( no me los muestra pero creo que están almacenados en el querydef ) estos los tengo que anexar a mi tabla [ERRORES], probé definiendo una consulta de datos anexados "my_anexa" y después haciendo :
mydb.execute my_anexa
pero no lo toma, el tema es como recuperar los datos del querydef 
Set myq = mydb.CreateQueryDef("") 
Y anexarlos a [ERRORES]. Gracias de nuevo
Si ya tienes los registros, para grabarlos en una tabla, registro por registro, podrías usar un Insert +/- así:
Set mydb = CurrentDb
do While Not Rst.EOF
         Qry = " INSERT INTO TuTablaDestino (Campo1, Campo2,.......CampoN )
         Qry = " Values(" & Rst(0) & ",'" & Rst(1) & "',....... ," & Rst(n) & ")"
          mydb.execute qry
          Rst. MoveNext
loop
Si son texto deben ir entre comillas, si son valores numéricos, sin comillas y si son fechas ente ## y en formato mm/dd/aaaa
Jeddy muchas gracias por tu ayuda me fue de gran utilidad, la sentencia para asociar los datos del querydef a un recordset era:
set rst = myq.OpenRecordset
Luego inserte los datos fila por fila como me recomendaste.
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas