28 de octubre de 2015

MS-Excel Automation y OLEDB a través de Visual FoxPro

Una manera más de llevar registros hacia Excel, esta vez usando OLEDB. Cortesía de Çetin Basöz, MVP de VFP.

Local oRS as AdoDB.Recordset,oRS2 as AdoDB.Recordset,oCon as AdoDB.Connection
oCon = CreateObject('ADODB.connection')
oCon.ConnectionString = "Provider=VFPOLEDB;Data Source="+_samples+"data\testdata.dbc"
oCon.Open
oRS = oCon.Execute('select * from employee')
oRs.Save('disconnectme.rst')

oRS2 = CreateObject('ADODB.Recordset')
oRs2.Open('disconnectme.rst')

oExcel = Createobject('Excel.Application')
With oExcel
  .Workbooks.Add
  .Visible = .T.
  .ActiveWorkbook.ActiveSheet.QueryTables.Add( oRS2, .Range("A1")).Refresh
Endwith
Erase 'disconnectme.rst'

Nota del editor: Lo anterior no se limita a extracción de datos de Visual FoxPro, puede ser para cualquier otro manejador de base de datos del cual se tenga un OLEDB Provider instalado (MS-SQLServer, MySQL, PostgreSQL, Oracle, etc).

Çetin Basöz
MS Foxpro MVP, MCP

3 comentarios :

  1. Quizas me puedas ayudar ya que me quebre un rato al cabeza y no lo logre, al usar esta linea:
    oRS = oCon.Execute('select * from employee')
    Si uso el SELECT condicionado me dice que la columna no existe
    Ej: oRS = oCon.Execute('select * from employee where Campo = Variable') entiendase campo por el campo de tu table y variable la variable que estas comparando. Pues ahi es exactamente donde me da el error.
    Pregunta, que estoy haciendo mal, alguna sugerencia?
    Muchas gracias por cualquier respuesta.

    ResponderBorrar
    Respuestas
    1. Hola...

      Ten en cuenta que el método Execute no reconoserá variabale al ejecutar el select. Lo que puedes hacer es ensamblar el select pasando el contenido de la variable, also así:

      oRS = oCon.Execute("select * from employee where Campo = '" + alltrim(Variable) + "'")

      Borrar
  2. Hola...
    Ten en cuenta que el método Execute no reconoce variables, por lo cual deben ensamblar el select pasando el contenido de la variable, algo así:

    oRS = oCon.Execute("select * from employee where Campo = '" + alltrim(Variable) + "'")

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.