Saltar al contenido

Importar datos desde tablas Paradox 5 a Excel 2016


Recommended Posts

publicado

Estimados del foro.

Tengo un requerimiento puntual y estoy empantanado en el proceso del tipo importación de datos.

Para el caso debo importar los datos desde unas tablas Paradox 5, y estos datos luego clasificarlos y graficarlos. el una planilla dependiendo el cliente seleccionado, todo con macros y automatico.

La idea es conectar las tablas, generar la consulta y extraer los datos resultados, que es como indique, el proceso a resolver..

¿Alguien puede guiar a este humilde servidor?.

Muchas gracias

  • 4 weeks later...
publicado

Estimados del foro,

Por favor, necesito una cadena de conexion de Excel 2010 a Paradox 5.0.

El problema es que el equipo tiene Windows 10 64 bits. He probado miles de cadenas y no logro conectar.

Gracias a todos

publicado

convendría saber (exactamente) lo que has intentado, lo que has obtenido y "que esperabas" (?), en vía de mientras...

- conexión estándar a paradox: mira aquí

- conexión por driver genérico de MS: mira aquí

- requerimientos para 64 bits: mira aquí

saludos,

hector.

publicado

Estimado Hector,

Reciba usted mis mas sinceros agradecimientos por su comentario, que por cierto es muy acertivo en relación a lo que en estos momentos estoy pasando.

Le cuento mas detalladamente:

Debo extraer desde tablas Paradox 5, información relacionada con Cotizaciones y Ventas.

Desde mi equipo (Windows 7 32bits/Excel 2016/Macro vba), no tengo problema con realizar la extración de datos con el siguiente algoritmo:

ruta="C:\TEMP\"
Set Conn = New ADODB.Connection
'Creamos el objeto recordset
Set rs = New ADODB.Recordset
'Nos conectamos a la base de datos
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & ";" & _
          "Extended Properties=Paradox 5.x;"
'Hacemos la consulta
Sql = "Select * From " & tabla
'Obtemos resultados
rs.Open Sql, Conn, adOpenStatic, adLockOptimistic

Al momento de correr el algoritmo en el equipo del Cliente (Windows 10 64bits/Excel 2016), este no logra extraer ningún dato, pues el resultado de rs.RecordCount=0.

He probado generando las ODBC correspondientes (Paradox 5 32 bits), configure BDAdministrator Borland y nada,

Bueno, espero me pueda ayudar a salir de este problema, y bien, le reitero mis mas sinceros agradecimientos.

Juan Pablo

publicado
  En 7/9/2016 at 19:09 , Juanpy dijo:

el algoritmo en el equipo del Cliente (Windows 10 64bits/Excel 2016), este no logra extraer ningún dato, pues el resultado de rs.RecordCount=0

Expand  

1) si ya analizaste el tercer enlace sugerido (los requerimientos en 64 bits) habrás notado que solo necesitas cambiar la cadena de la conexión, de esto:

  Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & ";" & _
          "Extended Properties=Paradox 5.x;"

a esto:

  Conn.Open "provider=microsoft.ace.oledb.12.0;data source=" & ruta & _
          ";extended properties=paradox 5.x;"

2) si no tienes claro cuando se ejecutara en sistemas de 32 o 64 bits, agrega condiciones usando las constantes del compilador (p.ej.) poniendo el inicio del modulo de código lo siguiente:

#If Win64 = True Then
  Const bMotor As String = "ace.oledb.12.0"
#Else
  Const bMotor As String = "jet.oledb.4.0"
#End If

y cambias la cadena de la conexión a lo siguiente:

  Conn.Open "provider=microsoft." & bMotor & ";data source=" & ruta & _
          ";extended properties=paradox 5.x;"

3) por si las dudas... el driver no es parte del sistema operativo Windows, pero está disponible para su descarga:

- en ingles

- en español

saludos,

hector.

publicado

Estimado,

Nuevamente le agradezco su deferencia y tiempo invertivo, en pos de solucionar mi tan especifico problema.

Le comento que a pesar de haber cargado el driver informado (AccessDatabaseEngine_X64), y luego, modificado el algoritmo según sus instrucciones, el módulo sigue sin resolver.

Algunos eventos relacionados son:

1.)

#If Win64 = True Then
    Const bMotor As String = "ace.oledb.12.0"
#Else
    Const bMotor As String = "jet.oledb.4.0"
#End If
Public AnyoProc As Integer
Public matAnyo As Variant
Public NombreHoja As String

Private Sub CargaCotizacion(control As IRibbonControl)
    Application.ScreenUpdating = False
Public AnyoProc As Integer
Public matAnyo As Variant
Public NombreHoja As String
Private Sub CargaCotizacion(control As IRibbonControl)
    #If Win64 = True Then
        Const bMotor As String = "ace.oledb.12.0"
    #Else
        Const bMotor As String = "jet.oledb.4.0"
    #End If
    Application.ScreenUpdating = False

Para ambos casos, no reconoce las variables de entorno ni las constantes.

2.) Realice dos versiones, una con:

Conn.Open "provider=microsoft.Jet.OLEDB.4.0;data source=" & ruta & _
              ";extended properties=paradox 5.x;"

Y otra con:

Conn.Open "provider=microsoft.ace.oledb.12.0;data source=" & ruta & _
          ";extended properties=paradox 5.x;"

Pero para este último caso de Windows 10 64 bits, sencillamente nada reconocio.

Le reitero mis agradecimientos, y si sabe de alguna información relacionada, le ruego favor informar.

Muchas gracias

  • Silvia bloqueó este tema

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.