{"id":7748,"date":"2015-03-25T13:05:06","date_gmt":"2015-03-25T12:05:06","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=7748"},"modified":"2015-03-25T14:00:27","modified_gmt":"2015-03-25T13:00:27","slug":"como-conectar-con-un-erp-apoyado-en-oracle-desde-visual-studio-para-rescatar-y-procesar-datos","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/como-conectar-con-un-erp-apoyado-en-oracle-desde-visual-studio-para-rescatar-y-procesar-datos\/","title":{"rendered":"C\u00f3mo conectar con un ERP apoyado en Oracle desde Visual Studio, para rescatar y procesar datos."},"content":{"rendered":"<p>La idea de esta entrada es demostrar que podemos crear agentes programados que conectan con una base de datos de cualquier ERP para generar ficheros alternativos que nos puedan servir para cualquier finalidad.<\/p>\n<p>Por ejemplo podr\u00edamos crear desde Visual Studio un agente que se ejecute en modo <strong>systray (VxD)<\/strong> y que cada cierto tiempo conecte con una base de datos del ERP que empleemos en la empresa, \u00a0en concreto \u00a0extraer cierta informaci\u00f3n de la base Oracle instalada en la Intranet (modo protegido del exterior) y subir un fichero Microsoft Access generado (mdb), y una serie de im\u00e1genes a Internet.<\/p>\n<p><!--more--><\/p>\n<p>El proyecto lo realice hace tiempo de forma remota mediante conexi\u00f3n <strong>VNC<\/strong>.\u00a0La conexi\u00f3n se puede efectuar mediante VNC personal (requiere licencia). Es necesario configurar el router y activar el puerto <strong>5900<\/strong>, y el <strong>NAT<\/strong> para redirigir las peticiones al ordenador desde el que deseamos conectar (cada router se realiza de una forma en concreto, el modelo que trabaje fue el <strong>3COM<\/strong>).<\/p>\n<p>Muy importante. Para conectar desde Visual Basic con Oracle, es necesario instalar el complemento <strong>OO40<\/strong>, el Oracle Objects For\u00a0OLE.<\/p>\n<p>El servidor con que que desplegu\u00e9 el proyecto es un\u00a0<strong>Oracle 10g<\/strong>, mediante una ip local 192.168.1.101 y al puerto <strong>TCP 1521<\/strong>.<\/p>\n<p>Se programa mediante el objeto de <a href=\"http:\/\/docs.oracle.com\/cd\/B28359_01\/win.111\/b28378\/intro.htm\" target=\"_blank\"><strong>oracle 0040<\/strong><\/a>(ver documento desarrollador), para ello es necesario instalar \u00a0el cliente de Oracle (<a href=\"http:\/\/www.oracle.com\/technetwork\/database\/features\/instant-client\/index-097480.html\" target=\"_blank\"><strong>oracle client<\/strong><\/a>) en la m\u00e1quina donde se encuentra la pasarela o aplicaci\u00f3n que deseemos desarrollar. Esto instalar\u00e1 un cliente <strong>ODBC\u00a0<\/strong>especifico para Oracle (<strong>instantclient-odbc-win32-10.1.0.5-20060419)<\/strong><\/p>\n<p>Una vez estudiado los ficheros conectaremos con el <strong>tnsnames.ora<\/strong>. En concreto, he conectado con el <strong>ERP\u00a0de <a href=\"http:\/\/www.assoftware.es\/html\/productos\/software_de_gestion_erp\/software_de_gestion_erp.htm\" target=\"_blank\">AS Fas-5<\/a>, pero\u00a0podr\u00eda\u00a0ser otro.<\/strong>\u00a0Para ello es necesario disponer de una <strong>idea del modelo de tablas<\/strong> que componen el ERP con que que se va a trabajar.<\/p>\n<p>Para conectar desde visual \u00a0podemos instalar el\u00a0<strong>developer tools.<\/strong><br \/>\nEl c\u00f3digo de para conectar es sencillo:<br \/>\n<strong>Set OraSession = CreateObject(&#8220;OracleInProcServer.XOraSession&#8221;)<\/strong><br \/>\n<strong> Set OraDatabase = OraSession.OpenDatabase(&#8216;NOMBRE_SERVIDOR&#8217;, &#8216;USER\/PASS&#8217;, 0&amp;)<\/strong><\/p>\n<p>Luego para trabajar con la conexi\u00f3n se referencia mediante <strong>OraDatabase.xxxxxxxxxxxxx<\/strong>, donde las x corresponden a las tablas.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_7755\" style=\"width: 626px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/Pasarela-Oracle-Access.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-7755\" class=\"wp-image-7755 size-full\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/Pasarela-Oracle-Access.jpg\" alt=\"Pasarela-Oracle-Access\" width=\"616\" height=\"567\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/Pasarela-Oracle-Access.jpg 616w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/Pasarela-Oracle-Access-300x276.jpg 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/a><p id=\"caption-attachment-7755\" class=\"wp-caption-text\">Ventaja de ejemplo, creada desde Visual Studio, que corresponde con el agente VxD<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_7756\" style=\"width: 429px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/opciones-pasarela.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-7756\" class=\"wp-image-7756 size-full\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/opciones-pasarela.jpg\" alt=\"opciones-pasarela\" width=\"419\" height=\"417\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/opciones-pasarela.jpg 419w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/opciones-pasarela-150x150.jpg 150w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/03\/opciones-pasarela-300x300.jpg 300w\" sizes=\"auto, (max-width: 419px) 100vw, 419px\" \/><\/a><p id=\"caption-attachment-7756\" class=\"wp-caption-text\">Opciones del agente systray para el env\u00edo.<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>Una aplicaci\u00f3n que nos permitir\u00e1 a priori ver registros y<strong> trabajar con Oracle desde una estaci\u00f3n remota o de desarrollo<\/strong> puede ser por ejemplo,<strong> Oracle Maestro<\/strong>.<\/p>\n<p><a href=\"https:\/\/www.sqlmaestro.com\/products\/oracle\/maestro\/\" target=\"_blank\">https:\/\/www.sqlmaestro.com\/products\/oracle\/maestro\/<\/a><\/p>\n<p>Ejemplo de c\u00f3digo:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:vb decode:true\">Dim fotos As String\r\nDim ftp As New ChilkatFTP\r\nDim success As Integer\r\nDim fs\r\nNotify.dwInfoFlags = &amp;H1\r\n\r\n'Ponemos el archivo a cero\r\n Set fs = CreateObject(\"Scripting.FileSystemObject\")\r\n  fs.CopyFile App.Path &amp; \"\\Mibase-access.mdb\", rutadedatosg &amp; \"\\\"\r\n Set fs = Nothing\r\n\r\n'Comencemos el proceso de conversi\u00f3n de formato DBF a MDB\r\n'Abrimos la base de datos\r\n  estado.Caption = \"Comenzando la conversi\u00f3n de datos antes del envio...\"\r\n  Notify.szInfoTitle = \"PASARELA Mibase-access\"\r\n  Notify.szInfo = \"Comenzando la conversi\u00f3n de datos Oracle del cat\u00e1logo...\"\r\n  Shell_NotifyIcon NIM_MODIFY, Notify\r\n\r\nDim oConn, oConn2, Caccess As ADODB.Connection\r\nDim oRs, rarticulos, rfamilia, rsubfamilia, ratributos, rtarifas As ADODB.Recordset\r\nDim Rproductos As ADODB.Recordset\r\n\r\n'Contadores generales.\r\nDim clineas, Cfamilias, csubfamilias, cproductos, catributos, ctarifas, cimagenes As Long\r\nDim CadenaAccess\r\nDim sql, contadordbf\r\n\r\nCadenaAccess = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\" &amp; rutadedatosg &amp; \"\\\" &amp; \"Mibase-access.mdb;\"\r\n\r\n\r\n'Procedimiento de importaci\u00f3n de Art\u00edculos\r\n'Preparamos el conector Access\r\n' abir la conexi\u00f3n.\r\nSet Caccess = New ADODB.Connection\r\nCaccess.Open CadenaAccess\r\n' Open recordset with data from Employee table.\r\nSet rarticulos = New ADODB.Recordset\r\nrarticulos.CursorType = adOpenKeyset\r\nrarticulos.LockType = adLockOptimistic\r\nrarticulos.Open \"linea\", Caccess, , , adCmdTable\r\nestado.Caption = \"Abriendo fichero mdb temporal...\"\r\n  Notify.szInfoTitle = \"PASARELA Mibase-access\"\r\n  Notify.szInfo = \"El fichero temporal Mibase-access.mdb abierto correctamente ...\"\r\n  Shell_NotifyIcon NIM_MODIFY, Notify\r\n \r\nDim OraSession  As Object     'Declaracion de variables as OLE Objects\r\nDim OraDatabase As Object\r\nDim OraDynaset  As Object\r\nDim IDG, DESCG, DESCAB As Variant\r\nDim contadorLineas As Long\r\n\r\n\r\n    Set OraSession = CreateObject(\"OracleInProcServer.XOraSession\")\r\n    Set OraDatabase = OraSession.DbOpenDatabase(\"FAS5_Mibase-access\", \"DWH\/Mibase-accessDWH\", 0&amp;)\r\n  \r\n    Set OraDynaset = OraDatabase.DbCreateDynaset(\"Select * from Base-Oracle.ASMATA19 ORDER BY VALCOD\", 0&amp;)\r\n   \r\n     contadorLineas = 0\r\n     \r\n     Do While Not OraDynaset.EOF\r\n         rarticulos.AddNew\r\n         \r\n        rarticulos(\"ID\") = OraDynaset.Fields(\"VALCOD\").Value\r\n        rarticulos(\"descripcion\") = OraDynaset.Fields(\"VALDES\").Value\r\n        rarticulos(\"descabreb\") = OraDynaset.Fields(\"VALDEA\").Value\r\n        OraDynaset.MoveNext\r\n        contadorLineas = contadorLineas + 1\r\n        rarticulos.Update\r\n        \r\n     Loop\r\n   \r\nSet OraDynaset = Nothing\r\n\r\n'Comenzamos con el movimiento de registros de ORACLE\r\n\r\nestado.Caption = \"L\u00edneas de productos procesadas de ASMATA19...\"\r\nNotify.dwInfoFlags = &amp;H1\r\nNotify.szInfoTitle = \"PASARELA Mibase-access, Fase 1\"\r\nNotify.szInfo = \"N\u00ba de l\u00edneas procesadas : \" &amp; CStr(contadorLineas)\r\nclineas = contadorLineas\r\nShell_NotifyIcon NIM_MODIFY, Notify\r\nrarticulos.Close\r\n\r\n\r\n'Procedemos a volcar las familias al motor jet access\r\nSet rfamilia = New ADODB.Recordset\r\nrfamilia.CursorType = adOpenKeyset\r\nrfamilia.LockType = adLockOptimistic\r\nrfamilia.Open \"familia\", Caccess, , , adCmdTable\r\nSet OraDynaset = OraDatabase.DbCreateDynaset(\"Select vagcod,vagdes,vagdea,valcod from Base-Oracle.ASMATA13 ORDER BY VAGCOD\", 0&amp;)\r\n   \r\n     contadorLineas = 0\r\n     \r\n     Do While Not OraDynaset.EOF\r\n        \r\n        If OraDynaset.Fields(\"VAGCOD\").Value &lt;&gt; \"\" Then\r\n            rfamilia.AddNew\r\n            rfamilia(\"ID\") = OraDynaset.Fields(\"VAGCOD\").Value\r\n            rfamilia(\"descripcion\") = OraDynaset.Fields(\"VAGDES\").Value\r\n            rfamilia(\"Descabre\") = OraDynaset.Fields(\"VAGDEA\").Value\r\n        'Id de relacion\r\n            rfamilia(\"IDLinea\") = OraDynaset.Fields(\"VALCOD\").Value\r\n            contadorLineas = contadorLineas + 1\r\n            rfamilia.Update\r\n        End If\r\n        OraDynaset.MoveNext\r\n     Loop\r\nrfamilia.Close\r\n\r\n\r\nestado.Caption = \"Familias de productos procesadas sin agrupar de ASMATA13...\"\r\nNotify.szInfoTitle = \"PASARELA Mibase-access, Fase 2\"\r\nNotify.szInfo = \"N\u00ba de familias no agrupadas procesadas : \" &amp; CStr(contadorLineas)\r\nCfamilias = contadorLineas\r\nShell_NotifyIcon NIM_MODIFY, Notify\r\n\r\n'Procedemos a volcar las SUBFAMILIAS al motor jet de access\r\nSet rsubfamilia = New ADODB.Recordset\r\nrsubfamilia.CursorType = adOpenKeyset\r\nrsubfamilia.LockType = adLockOptimistic\r\nrsubfamilia.Open \"subfamilia\", Caccess, , , adCmdTable\r\nSet OraDynaset = OraDatabase.DbCreateDynaset(\"Select vfacod,vfades,vfadea,vagcod from Base-Oracle.ASMATA12 ORDER BY VFACOD\", 0&amp;)\r\n   \r\n     contadorLineas = 0\r\n     \r\n     Do While Not OraDynaset.EOF\r\n        \r\n        If OraDynaset.Fields(\"VFACOD\").Value &lt;&gt; \"\" Then\r\n            rsubfamilia.AddNew\r\n            rsubfamilia(\"ID\") = OraDynaset.Fields(\"VFACOD\").Value\r\n            rsubfamilia(\"descripcion\") = OraDynaset.Fields(\"VFADES\").Value\r\n            rsubfamilia(\"Descabre\") = OraDynaset.Fields(\"VFADEA\").Value\r\n        'Id de relacion\r\n            rsubfamilia(\"IDFAMILIA\") = OraDynaset.Fields(\"VAGCOD\").Value\r\n            contadorLineas = contadorLineas + 1\r\n            rsubfamilia.Update\r\n        End If\r\n        OraDynaset.MoveNext\r\n     Loop\r\nrsubfamilia.Close\r\n\r\n\r\nestado.Caption = \"Subfamilia de productos procesadas sin agrupar de ASMATA12...\"\r\nNotify.szInfoTitle = \"PASARELA Mibase-access, Fase 3\"\r\nNotify.szInfo = \"N\u00ba de subfamilias procesadas no agrupadas : \" &amp; CStr(contadorLineas)\r\ncsubfamilias = contadorLineas\r\nNotify.dwInfoFlags = &amp;H1\r\nShell_NotifyIcon NIM_MODIFY, Notify\r\nSleep 3000\r\n\r\n\r\n'Comenzamos con el movimiento ficha general. ASMAAR01\r\n'Campos\r\n\r\nSet Rproductos = New ADODB.Recordset\r\nRproductos.CursorType = adOpenKeyset\r\nRproductos.LockType = adLockOptimistic\r\nRproductos.Open \"Productos\", Caccess, , , adCmdTable\r\nSet OraDynaset = OraDatabase.DbCreateDynaset(\"Select ARCARF,ARCARC,VALCOD,VAGCOD,VFACOD,ULTMOD,ARDES1,ARDES2,ARDEAB from Base-Oracle.ASMAAR01\", 0&amp;)\r\n   \r\n     contadorLineas = 0\r\n     \r\n     Do While Not OraDynaset.EOF\r\n        \r\n        If OraDynaset.Fields(\"ARCARF\").Value &lt;&gt; \"\" Then\r\n            'prueba = OraDynaset.Fields(\"ARCARF\").Value\r\n            Rproductos.AddNew\r\n            Rproductos(\"ID\") = OraDynaset.Fields(\"ARCARF\").Value\r\n            Rproductos(\"ID2\") = OraDynaset.Fields(\"ARCARC\").Value\r\n            Rproductos(\"IDLINEA\") = OraDynaset.Fields(\"VALCOD\").Value\r\n            Rproductos(\"IDFAMILIA\") = OraDynaset.Fields(\"VAGCOD\").Value\r\n            Rproductos(\"IDSUBFAMILIA\") = OraDynaset.Fields(\"VFACOD\").Value\r\n            Rproductos(\"FECHAMOD\") = OraDynaset.Fields(\"ULTMOD\").Value\r\n            Rproductos(\"DESCRIPCION\") = OraDynaset.Fields(\"ARDES1\").Value\r\n            Rproductos(\"DESCRIPCION2\") = OraDynaset.Fields(\"ARDES2\").Value\r\n            Rproductos(\"DESC3\") = OraDynaset.Fields(\"ARDEAB\").Value\r\n            contadorLineas = contadorLineas + 1\r\n            Rproductos.Update\r\n        End If\r\n        OraDynaset.MoveNext\r\n     Loop\r\nRproductos.Close\r\n\r\n\r\nestado.Caption = \"Productos de la pesta\u00f1a general de ASMAAR01...\"\r\nNotify.szInfoTitle = \"PASARELA Mibase-access, Fase 4 (productos)\"\r\nNotify.szInfo = \"N\u00ba de productos procesados no agrupados : \" &amp; CStr(contadorLineas)\r\ncproductos = contadorLineas\r\nNotify.dwInfoFlags = &amp;H1\r\nShell_NotifyIcon NIM_MODIFY, Notify\r\nSleep 3000\r\n\r\n'Comenzamos con el movimiento ficha atributos. ASMAAR20\r\n'Campos y tipos.\r\n\r\n'EMCOD varchar2\r\n'VATCOD varchar1\r\n'ARCARF varchar 15 Relaci\u00f3n con la tabla tarifas, puede ser el id\r\n'ARTLIN no nulo y numero\r\n'ATRTEX  varchar de 60 caracteres, es la descripci\u00f3n\r\n'MARCAC varchar de 1\r\n'POPERA carchar 10\r\n'ULTMOD tipo fecha , \u00fatima modificacion\r\n'HORMOD tipo fecha\r\n'IDIOMA varchar 2\r\n\r\n\r\nSet ratributos = New ADODB.Recordset\r\nratributos.CursorType = adOpenKeyset\r\nratributos.LockType = adLockOptimistic\r\nratributos.Open \"Atributos\", Caccess, , , adCmdTable\r\nSet OraDynaset = OraDatabase.DbCreateDynaset(\"Select * from Base-Oracle.ASMAAR20\", 0&amp;)\r\n   \r\n     contadorLineas = 0\r\n     \r\n     Do While Not OraDynaset.EOF\r\n        \r\n            ratributos.AddNew\r\n            ratributos(\"EMCODI\") = OraDynaset.Fields(\"EMCODI\").Value\r\n            ratributos(\"VATCOD\") = OraDynaset.Fields(\"VATCOD\").Value\r\n            ratributos(\"ARCARF\") = OraDynaset.Fields(\"ARCARF\").Value\r\n            ratributos(\"ATRLIN\") = OraDynaset.Fields(\"ARTLIN\").Value\r\n            ratributos(\"ARTTEX\") = OraDynaset.Fields(\"ARTTEX\").Value\r\n            ratributos(\"MARCAC\") = OraDynaset.Fields(\"MARCAC\").Value\r\n            ratributos(\"POPERA\") = OraDynaset.Fields(\"POPERA\").Value\r\n            ratributos(\"ULTMOD\") = OraDynaset.Fields(\"ULTMOD\").Value\r\n            ratributos(\"IDIOMA\") = OraDynaset.Fields(\"IDIOMA\").Value\r\n            contadorLineas = contadorLineas + 1\r\n            ratributos.Update\r\n        \r\n        OraDynaset.MoveNext\r\n     Loop\r\nratributos.Close\r\n\r\n\r\nestado.Caption = \"Atributos de los productos ASMAAR20 ...\"\r\nNotify.szInfoTitle = \"PASARELA Mibase-access, Fase 5 (atributos asociados)\"\r\nNotify.szInfo = \"N\u00ba de atributos procesados: \" &amp; CStr(contadorLineas)\r\ncatributos = contadorLineas\r\nNotify.dwInfoFlags = &amp;H1\r\nShell_NotifyIcon NIM_MODIFY, Notify\r\n\r\n' Comenzamos con las tarifas fase 6\r\nSet rtarifas = New ADODB.Recordset\r\nrtarifas.CursorType = adOpenKeyset\r\nrtarifas.LockType = adLockOptimistic\r\nrtarifas.Open \"tarifas\", Caccess, , , adCmdTable\r\nSet OraDynaset = OraDatabase.DbCreateDynaset(\"Select * from Base-Oracle.ASMAAR20\", 0&amp;)\r\n   \r\n     contadorLineas = 0\r\n     \r\n     Do While Not OraDynaset.EOF\r\n        \r\n            rtarifas.AddNew\r\n            rtarifas(\"TRCODI\") = OraDynaset.Fields(\"TRCODI\").Value\r\n            rtarifas(\"VATCOD\") = OraDynaset.Fields(\"VATCOD\").Value\r\n            rtarifas(\"ARCARF\") = OraDynaset.Fields(\"ARCARF\").Value\r\n            rtarifas(\"TRFINI\") = OraDynaset.Fields(\"TRFINI\").Value\r\n            rtarifas(\"TRFFIN\") = OraDynaset.Fields(\"TRFFIN\").Value\r\n            rtarifas(\"TRPRVE\") = OraDynaset.Fields(\"TRPRVE\").Value\r\n            rtarifas(\"POPERA\") = OraDynaset.Fields(\"POPERA\").Value\r\n            rtarifas(\"ULTMOD\") = OraDynaset.Fields(\"ULTMOD\").Value\r\n            rtarifas(\"MARCAC\") = OraDynaset.Fields(\"MARCAC\").Value\r\n            rtarifas(\"EMCODI\") = OraDynaset.Fields(\"EMCODI\").Value\r\n            rtarifas(\"HORMOD\") = OraDynaset.Fields(\"HORMOD\").Value\r\n            rtarifas(\"TRIMP1\") = OraDynaset.Fields(\"TRIMP1\").Value\r\n            rtarifas(\"TRIMP2\") = OraDynaset.Fields(\"TRIMP2\").Value\r\n            rtarifas(\"TRIMP3\") = OraDynaset.Fields(\"TRIMP3\").Value\r\n            rtarifas(\"TRIMP4\") = OraDynaset.Fields(\"TRIMP4\").Value\r\n            rtarifas(\"UNIPRE\") = OraDynaset.Fields(\"UNIPRE\").Value\r\n           \r\n            contadorLineas = contadorLineas + 1\r\n            rtarifas.Update\r\n        \r\n        OraDynaset.MoveNext\r\n     Loop\r\nrtarifas.Close\r\n\r\n\r\nestado.Caption = \"Tarifas de los productos ASMATR01 ...\"\r\nNotify.szInfoTitle = \"PASARELA Mibase-access, Fase 6 (tarifas asociadas)\"\r\nNotify.szInfo = \"N\u00ba de tarifas procesados: \" &amp; CStr(contadorLineas)\r\nctarifas = contadorLineas\r\nNotify.dwInfoFlags = &amp;H1\r\nShell_NotifyIcon NIM_MODIFY, Notify\r\n\r\nestado.Caption = \"Final de movimientos de registros de la base ...\"\r\nNotify.szInfoTitle = \"Prepar\u00e1ndose log y otras tareas de mantenimiento ...\"\r\nNotify.szInfo = \"Actualizado el Log y otras tareas de mantenimiento ...\"\r\nShell_NotifyIcon NIM_MODIFY, Notify\r\n\r\n'FIN DE MOVIMIENTOS DE LA BASE\r\n\r\nCaccess.Close\r\nSet ratributos = Nothing\r\nSet rtarifas = Nothing\r\nSet rfamilia = Nothing\r\nSet rsubfamilia = Nothing\r\nSet Rproductos = Nothing\r\nSet rarticulos = Nothing\r\nSet Caccess = Nothing\r\nSet OraDatabase = Nothing\r\n\r\n'Fin de movimientos\r\n  estado.Caption = \"El proceso de conversi\u00f3n finalizado correctamente...\"\r\n  Notify.szInfoTitle = \"PASARELA Mibase-access\"\r\n  Notify.szInfo = \"El proceso de conversi\u00f3n ha finalizado correctamente...\"\r\n  Shell_NotifyIcon NIM_MODIFY, Notify\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Resumen de c\u00f3mo conectar:<\/p>\n<p>Dim Base As Object<br \/>\n<span style=\"line-height: 1.5;\">Dim Reg as Object<br \/>\n<\/span><span style=\"line-height: 1.5;\">Set Base = OraSession.DbOpenDatabase(&#8220;SERVIDORORACLE&#8221;, &#8220;USUARIO\/USR&#8221;, 0&amp;)<br \/>\n<\/span><span style=\"line-height: 1.5;\">Set Reg = Base.DbCreateDynaset(&#8220;Select * from PATENTE&#8221;, 0&amp;)<\/span><\/p>\n<p>&#8216; Aqui ya tenemos el recordset<br \/>\n&#8216; Puedo realizar cualquier operaci\u00f3n si problemas<\/p>\n<p>Set Reg = nothing<br \/>\nSet Base = nothing<\/p>\n<p>Forma 2.- (ADO)<br \/>\n&#8211; Crear un Form<br \/>\n&#8211; Clic en Proyecto, y <strong>Componente<\/strong><br \/>\n&#8211; Activar la Casilla <strong>Microsoft ADO data control 6.0<\/strong> y Aceptar<br \/>\n&#8211; Clic en Ver, y Cuadro de Herramienta.<br \/>\n&#8211; Doble clic en el Control Adodc (se creo el control adodc1)<br \/>\n&#8211; Click con el Bot\u00f3n derecho y clic en propiedades.<br \/>\n&#8211; Clic en Generar,clic en Microsoft OLE DB Provider for Oracle y Clic en Siguiente<br \/>\n&#8211; Escribir en Nombre de Servidor SERVIDORORACLE, USUARIO y USR en donde corresponde a\u00a0Usuario y password respectivamente.<br \/>\n&#8211; Haz Clic en Probar conexi\u00f3n para asegurarte de que este bien hecho.<br \/>\n&#8211; Clic en Aceptar.<br \/>\n&#8211; Clic en Autentificacion y luego escribir USUARIO y USR nuevamente donde corresponde a<br \/>\nUsuario y password respectivamente.<br \/>\n&#8211; Clic en Origen de Registros y luego seleccionar en tipo de comando (2 &#8211; adCmdTable)<br \/>\n&#8211; Luego selecciona en tabla, la tabla PATENTE y luego aceptar<br \/>\nCon esto estas conectado y ademas tienes el <strong>recordset<\/strong> con el control ADOdc1<\/p>\n<p>Recuerda para finalizar, que es aconsejable crear un instalador con todos los complementos y archivos necesarios para distribuir el proyecto, recomiendo <a href=\"http:\/\/www.jrsoftware.org\/isinfo.php\" target=\"_blank\">Inno Setup.<\/p>\n<p><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Recomiendo lectura libro:<a href=\"http:\/\/www.amazon.com\/Oracle-Programming-Visual-Basic-Snowdown\/dp\/0782123228\" target=\"_blank\"> <strong>Oracle Programing with Visual Basic de Nick Snowdon<\/strong><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La idea de esta entrada es demostrar que podemos crear agentes programados que conectan con una base de datos de cualquier ERP para generar ficheros alternativos que nos puedan servir para cualquier finalidad. Por ejemplo podr\u00edamos crear desde Visual Studio un agente que se ejecute en modo systray (VxD) y que cada cierto tiempo conecte con una base de datos del ERP que empleemos en la empresa, \u00a0en concreto \u00a0extraer cierta informaci\u00f3n de la base Oracle instalada en la Intranet (modo protegido del exterior) y subir un fichero Microsoft Access generado (mdb), y una serie de im\u00e1genes a Internet.<\/p>\n","protected":false},"author":1,"featured_media":7088,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[612,40,560,7],"tags":[622,623],"class_list":["post-7748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-access","category-bases-de-datos","category-microsoft-access","category-software","tag-oracle","tag-visual-basic"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/7748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=7748"}],"version-history":[{"count":19,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/7748\/revisions"}],"predecessor-version":[{"id":7769,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/7748\/revisions\/7769"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/7088"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=7748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=7748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=7748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}