Saltar al contenido

Problema con conexion odbc mysql


jeladio

Recommended Posts

publicado

Hola amigos acudo austedes por el siguiente problema: tengo este codigo para poder acceder a MYSQL

Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.CursorType = 3
rs.LockType = 3
dato = Sheets("Hoja1").Range("A1").Value
rs.Source = "SELECT * FROM FOTOS " _
& "WHERE NOMBRE =" _
& Chr(34) & dato & Chr(34) & ";"[/CODE]

mi problema es que donde dice sr.source es un string pero no puedo ponerlo como Dim rs.source as string porque me marca esa linea en rojo como puedo hacer para declararlo como un string.

saludos

publicado

Gracias Macro la verdad no entiendo lo que dices porque yo solo estoy adaptando el codigo y no entiendo de programacion si pudieras explicarme un poco mejor te lo voy a agradecer.

publicado

Sube el archivo para ver toda la macro, y de paso cuenta que quieres hacer con el resultado de la consulta.

Mañana lo miro.

publicado

Gracias nuevamente Estimado Macro: estoy incluyendo el codigo completo. lo estoy enviando tal y como lo tengo funcionando, esta macro la utilizo para bajar imagenes desde una base de datos MYSQL

Sub bajar2()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim ms As New ADODB.Stream
Dim archivo As String

cn.ConnectionString = "PROVIDER=MSDASQL.1;DRIVER={MySQL ODBC 5.1 Driver};SERVER=xxx.xxx.xx.xx;DATABASE=proteo_base;UID=proteo;PWD=2}XXX64u1;"
cn.Open

Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.CursorType = 3
rs.LockType = 3
rs.Source = "SELECT * FROM FOTOS WHERE id=14"
rs.Open
ms.Type = adTypeBinary
ms.Open
ms.Write rs.Fields("FOTO").Value
nombre = rs.Fields("NOMBRE").Value
Ruta = "C:\Users\PRUEBA\"
archivo = Ruta & nombre
ms.SaveToFile (archivo), adSaveCreateOverWrite


rs.Close
ms.Close
cn.Close
Set ms = Nothing
Set rs = Nothing
Set cn = Nothing
End Sub[/CODE]

todo funciona pero lo que quiero es que en la linea WHERE id=14 pueda indicar el numero de registro desde la hoja de excel en mi caso desde la celda a1, a2, a3 de la hoja 1, segun cuantos registros haya en la columna A asi sea las veces que se pueda repetir el bucle para bajar todas las imagenes enlistadas en la columna A. espero haberme dado a entender.

saludos

publicado

Hola

En el ejemplo que colocas el campo id es numérico, intenta quitantole las comillas Chr(34), además la consulta la finalizas con ; (punto y coma) y en el ejemplo que colocas tampoco las lleva, intenta quitándoselas

saludos

publicado

Prueba con la macro modificada.


Sub bajar2()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim ms As New ADODB.Stream
Dim Archivo As String
Dim Ruta As String
Dim Nombre As String

Ruta = "C:\Users\PRUEBA\"
cn.ConnectionString = "PROVIDER=MSDASQL.1;DRIVER={MySQL ODBC 5.1 Driver};" & _
"SERVER=xxx.xxx.xx.xx;DATABASE=proteo_base;UID=proteo;PWD=2}XXX64u1;"
cn.Open

For x = 1 To Range("A" & Rows.Count).End(xlUp).Row '<==
Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.CursorType = 3
rs.LockType = 3
rs.Source = "SELECT * FROM FOTOS WHERE id=" & CLng(Range("A" & x)) '<==
rs.Open
ms.Type = adTypeBinary
ms.Open
ms.Write rs.Fields("FOTO").Value
Nombre = rs.Fields("NOMBRE").Value
Archivo = Ruta & Nombre
ms.SaveToFile (Archivo), adSaveCreateOverWrite
rs.Close
ms.Close
Set ms = Nothing
Set rs = Nothing
Next '<==

cn.Close
Set cn = Nothing
End Sub

[/CODE]

PD. Saludos Juan Carlos, cuanto tiempo sin "verte".

publicado

Mil gracias estimado Macro Antonio funcionò a la perfeccion, solo una preguntilla, que significa "Clng" porque cuando cambio la referencia y que en lugar de indicar un Id numerico y hago referencia a un campo con texto me da error, si pudieras indicarme te lo voy a agradecer si no pues no hay problema, mi caso esta resuelto.

saludos de Guatemala

publicado

Estimado Macro Antonio: disculpa que nuevamente te este molestando y como te dije la semana pasada la ayuda que me diste funciona a la perfecccion sin embargo debido a unos cambios que estoy haciendo necesito ubicar la imagen desde el campo NOMBRE que contiene el nomb re de las imagenes guardadas (nombre.jpg) y no desde el ID. pero con el codigo anterior no me funciona, se puede hacer algo al respecto o que puedo hacer al respecto.

saludos

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
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Que tal nuevamente,  adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb
    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • 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.