Macros excel con bd sql

Me gustaría saber si me puedes ayudar con una consulta desde una macro en excel necesito consultar y borrar un periodo de una tabla el código he realizado es el siguiente pero parece que no se ejecutara el query
sql = ""
sql = sql & "select * from REC_DATREPMOD"
sql = sql & "where"
sql = sql & "COD_PERIODO = '"&COD_PERIODO&"';"
set rs.cn.execute(sql)
Y copio los datos en el sheet 29 con todos sus campos
te agradezco si me puedes colaborar con el código o si tienes otra forma de consultar en una base de datos sql y eliminar un periodo que puede constar como de 100 registros con el mismo periodo y que pueda cargar de nuevo el periodo si es necesario
gracias
jjsm
1

1 Respuesta

165.750 pts. Más de 35 años en la informática y más de 20 trabajando...
La instrucción que pones sería para hacer una selección, no para borrar.
El borrado sería con:
sql = "delete from REC_DATREPMOD where COD_PERIODO = '"&COD_PERIODO&"'"
¿Qué es lo que quieres hacer? ¿Recuperar primero los datos y después borrarlos para después actualizar la tabla con los datos que han retocado en Excel?
Quiero recuperar los datos y copiarlos en el sheet29 para verificar que sea el periodo que deseo borrar y luego eliminarlo de la base de datos sql si es el periodo correcto a borrar
Hola santiago
QUE PENA MOLESTARLO NECESITO SABER COMO EJECUTO EL QUERY EN UNA BASE DE DATOS SQL SERVER EL QUERY ES EL SIGUIENTE
sql = "delete from REC_DATREPMOD where COD_PERIODO = '"&COD_PERIODO&"';"
lo hago de esta forma pero cuando boy a copiar los datos no me trae el que necesito si no que se situa en el primer registro que encuentra en la tabla de la base de datos y lso copia es todos los periodos y solo necesito el que escoja el usuario
set rs = cn.execute(sql)
Yo siempre ejecuto los SQL de acciones con:
cn.execute textoSQL
No lo asigno a ningún objeto recordset porque no le veo ninguna utilidad.
Respecto a lo que quieres hacer entiendo que sería:
1) Recuperar los datos de un periodo en la hoja 'sheet29'
2) Borrar el periodo de los datos recuperados en la hoja 'sheet29'.
Entiendo que deberías hacer 2 macros y... ¿asignarlas a un botón? Sería una posibilidad.
¿Tienes definido algún formulario para indicar el periodo o se lee con un 'inputbox'?
Te acuerdas que me ayudaste a guardar los datos en esta misma base de datos ahora lo que intento hacer es lo siguiente con otro botón quiero consultar, la consulta me la guarde en un sheet y luego pueda verificar y luego eliminar de la bd este es el código que estoy realizando
Private Sub CommandButton3_Click()
Dim Index
Dim nLin As Long
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'conexion con bd
strConexion = "Provider=OraOLEDB.Oracle;Data Source=SIGCOPRECAUCION;User ID=TECSIG;Password=SISTD"
cn.ConnectionString = strConexion
cn.Open
On Error Resume Next
'leer variable del periodoy abrir la tabla
COD_PERIODO = TextBox1.Value
rs.Open "REC_DATREPMOD", cn, adOpenDynamic, adLockOptimistic
     'creamos el query y lo ejecutamos       
Sql = "SELECT * from REC_DATREPMOD where COD_PERIODO = '" & COD_PERIODO & "';"
        Debug.Print Sql
        Set rs = cn.Execute(Sql)
        Sheet29.Range("A2:N65536").Select
        Selection.ClearContents
'copio los datos desde la bd      
Index = 2
            While Not rs.EOF
            Sheet29.Range("A" & Index) = rs.Fields("COD_PERIODO")
            Sheet29.Range("B" & Index) = rs.Fields("PITA")
            Sheet29.Range("C" & Index) = rs.Fields("PESSEAM")
            Sheet29.Range("D" & Index) = rs.Fields("BON_GTIS")
            Sheet29.Range("E" & Index) = rs.Fields("BON_ROM")
            Sheet29.Range("F" & Index) = rs.Fields("BON_OFICIAL")
            Sheet29.Range("G" & Index) = rs.Fields("BTU")
            Sheet29.Range("H" & Index) = rs.Fields("ASH")
            Sheet29.Range("I" & Index) = rs.Fields("TM")
            Sheet29.Range("J" & Index) = rs.Fields("SU")
            Sheet29.Range("K" & Index) = rs.Fields("VM")
            Sheet29.Range("L" & Index) = rs.Fields("RD")
            Sheet29.Range("M" & Index) = rs.Fields("GTIS")
            Sheet29.Range("N" & Index) = rs.Fields("ROM")
            rs.MoveNext
            Index = Index + 1
            Wend
intrespuesta = MsgBox("ESTA SEGURO QUE DESEA BORRAR EL PERIODO?", vbYesNo + vbQuestion, "")
 If intrespuesta = vbYes Then
'aquí pienso crear el query para eliminar el periodo
 Else
 End If
' Debug.Print sql
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
MsgBox ("EL PERIODO HA SIDO BORRADO")
End Sub
Este es el código que estoy creando pero no me trae todos los datos de todos los periodos de la bd
Por lo que creo interpretar que haces, ese código debería traerte el periodo que quieres. Pero sólo de 1 en 1.
Cuando traes otro periodo, borra los datos anteriores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas