none
Duda en query Select con VBA en Excel RRS feed

  • Pregunta

  • Buen día, estoy intentando usar el código que copio más abajo, desde un formulario en Excel:
    Cuando lo ejecuto la primera vez, funciona perfecto, pero a partir de la segunda ya no da ningún resultado (tampoco da error).
    Al inspeccionarlo me doy cuenta que la segunda vez, al abrir el Recordset, automáticamente le pone la propiedad EOF en True.
    No sé como hacer para evitar eso.
    Sé que luego de CopyFromRecordset, el OEF se pone en verdadero, pero, se suponía que al cerrar el Recordset, esto quedaba sin efecto.
    Agradecería cualquier ayuda.
    Muchas gracias de antemano.
    Saludos
    Pablo

    Worksheets("CLIEMH").Range("Z1:AZ3000").Clear

    vNombre = TextBox1
       
    Sql = "SELECT NROCTA, NOMBRE, DIRECC FROM [CLIEMH$E9:T2000] WHERE NOMBRE LIKE '%" & _
        vNombre & _
        "%' order by NOMBRE"

    Set Cnn = New ADODB.Connection
    With Cnn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & ActiveSheet.Parent.FullName
        .Properties("Extended Properties").Value = "Excel 8.0;HDR=Yes"
        .Open
    End With
       
    Set Rs = New ADODB.Recordset
     
    Rs.CursorLocation = adUseClient
    Rs.Open Sql, Cnn ', , , adCmdText
       
    If Rs.EOF = False Then
        Worksheets("CLIEMH").Range("AA3:AA" & Rs.RecordCount + 3).CopyFromRecordset Rs
    End If
     
       
    Rs.Close
    Set Rs = Nothing
       
    Cnn.Close
    Set Cnn = Nothing

    miércoles, 11 de agosto de 2010 10:39

Todas las respuestas

  • Hola!

    sin probarlo no veo razón alguna para que falle y si el proceso se ejecuta completo en cada ocasión debería funcionar correctamente, yo haría un cambio

    If not(Rs.EOF and rs.bof) Then
        Worksheets("CLIEMH").Range("AA3").CopyFromRecordset Rs
    End If

    Por otro lado, para volver al principio

    rs.movefirst


    Saludos a todos desde Huelva
    http://www.mvp-access.es/emilio/
    miércoles, 11 de agosto de 2010 18:05
  • Hola Emilio, tenés razón, había que comprobar el EOF y el BOF, con eso anduvo perfectamente!

    Te agradezco muchísimo tu ayuda!

    Un abrazo grande desde Buenos Aires

    Pablo

    miércoles, 11 de agosto de 2010 18:13
  • Es increíble, apenás ví tu respuesta lo probé y como me funcionó me apuré a contarte.

    Pero ahora lo estoy queriendo hacer de nuevo y vuelve a presentar la misma falla.

    Estoy sinceramente desconcertado.

    Pienso que tal vez quede colgado en la memoria del Excel, porque si cierro el Excel (no solo mi archivo, sin todo el Excel), y lo vuelvo a abrir, vuelve a funcionar, pero solo una vez, y ya queda el EOF en True, y no vuelve a funcionar.

    Para comprobar donde puede estar el error, hago que en cada ejecución me vaya mostrando las variables (vNombre), la cadena de conexión (Cnn), la sentencia Select (Sql) y el valor del EOF. Y lo único que cambia es esto último (EOF, pasa a true a partir de la primera ejecución)

    No sé por dónde buscar.

    Agradecería cualquier ayuda.

    Saludos a todos y gracias de antemano.

    Pablo

     

     

    miércoles, 11 de agosto de 2010 18:30
  • Pues me parece realmente extraño y no pudiendo reproducir el problema no se me ocurre cual pueda ser el problema, lo siento.
    Saludos a todos desde Huelva
    http://www.mvp-access.es/emilio/
    miércoles, 11 de agosto de 2010 20:13
  • Prueba Cambiar:

    If Rs.EOF = False Then

    Por:

    If Not Rs.EOF Then
        ....

    Saludos !!

    viernes, 20 de agosto de 2010 16:20
  • Hola Roberto, te cuento que probé esta opción  "If Not Rs.EOF Then"  y sigue dando la misma falla. Veré como puedo solucionarlo.

    Te agradezco enormemente tu ayuda.

    Saludos

    Pablo

    martes, 24 de agosto de 2010 12:09