Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Eliminar de forma masiva

Estas en el tema de Eliminar de forma masiva en el foro de Visual Basic clásico en Foros del Web. Hola amigos aqui les presento un priblema que en realidad si les soy sincero es que tengo la idea de como hacerle pero no se ...
  #1 (permalink)  
Antiguo 28/06/2008, 13:38
 
Fecha de Ingreso: enero-2008
Mensajes: 181
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo Eliminar de forma masiva

Hola amigos aqui les presento un priblema que en realidad si les soy sincero es que tengo la idea de como hacerle pero no se como hacerlo, espero y alquien pueda ayudarme.

mi problema se los planteo asi:

en una pantalla de un formulario quiero cargar la lista de una clasificacion ya determinada realizada por una consulta previa por ejemplo:

select* from clientes where sexo='Masculino'

entonces al entrar al formulario que despliegue una lista de todos los resultados y luego poder seleccionar de esa lista con darle un clic para seleccionar que clientes de esa lista deseamos eliminar que sean dos o mas y luego al darle click al boton eliminar me elimine los registros seleccionados....

no se si me di a entender, pero espero y me puedan ayudar o darme referencias de donde puedo encontrar mas informacion, les agradezco de antemano y les envio un cordial saludo y que tengan un excelente fin de semana. gracias...
  #2 (permalink)  
Antiguo 28/06/2008, 21:57
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Eliminar de forma masiva

Hola,bueno mira se me ocurre asi...primero ejecutas esa consulta y cargas los resultados en un control listview,o hasta en un listbox si queres mas facil...los datos a listar los elegis vos,por ejemplo despues de ejecutar la consulta que te tire algun dato unico de cada persona,por ejemplo el DNI o un ID unico...eso lo elegis vos segun los campos que tenes...despues si usas el listbox ponele la propiedad para poder elegir mas de un registro...y listo...elimina de la base de datos usando la consulta DELETE segun el nuemero unico de cada persona,claro que tenes que hacerlo con un bucle For y recorrer en el listbox los registros seleccionados y eliminarlos de la base..

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #3 (permalink)  
Antiguo 30/06/2008, 09:37
 
Fecha de Ingreso: enero-2008
Mensajes: 181
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo Respuesta: Eliminar de forma masiva

Cita:
Iniciado por seba123neo Ver Mensaje
Hola,bueno mira se me ocurre asi...primero ejecutas esa consulta y cargas los resultados en un control listview,o hasta en un listbox si queres mas facil...los datos a listar los elegis vos,por ejemplo despues de ejecutar la consulta que te tire algun dato unico de cada persona,por ejemplo el DNI o un ID unico...eso lo elegis vos segun los campos que tenes...despues si usas el listbox ponele la propiedad para poder elegir mas de un registro...y listo...elimina de la base de datos usando la consulta DELETE segun el nuemero unico de cada persona,claro que tenes que hacerlo con un bucle For y recorrer en el listbox los registros seleccionados y eliminarlos de la base..

saludos.
Muchas gracias seba123neo pero si no es mucha molestia, podrias decirmo como cargo los datos al listview o el list box para que pueda seleccionar los datos, te lo agradeceria muchisimo o si me pudieras proporcionar un link de donde conseguir mas informacion acerca del tema. te lo agradeceria muchisimo o si alguien pudiese darme una ayuda les agradezco de antemano y les envio un cordial saludo.
  #4 (permalink)  
Antiguo 30/06/2008, 23:21
Avatar de STK_Pablo  
Fecha de Ingreso: junio-2008
Ubicación: Las Rosas - Santa Fe - Argentina
Mensajes: 69
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Eliminar de forma masiva

Cuando cargas el ListView, en:

Set itmX = listviewX.ListItem.Add(,ID,...... etc)

ID= Id de registro de la base de Datos, despues recorres con un For....Next todo el ListView consultando la propiedad listviewX.SelectedItem y listo....

Espero haberte orientado un poco....
  #5 (permalink)  
Antiguo 01/07/2008, 15:38
 
Fecha de Ingreso: enero-2008
Mensajes: 181
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo Respuesta: Eliminar de forma masiva

Hola Amigos muchas gracias por su aporte me ha ayudado solo que tengo una duda. encontre un codigo para cargar un listview pero tengo una duda y no se como hacerle. aqui les presento el codigo.

Código:
 Dim Campo As Integer
    Dim ITem As ListItem
    Dim i As Integer
    Dim rs As ADODB.Recordset

    Lv.ListItems.Clear
    Lv.ColumnHeaders.Clear

    Set rs = Crear_Recordset(cn, "select numero,nombre,raza,tipo,predio,id from animales")
    Me.MousePointer = vbHourglass
    
    rs.MoveFirst
    
    'Headers
    For Campo = 0 To rs.Fields.count - 1
        Lv.ColumnHeaders.Add , , rs.Fields(Campo).Name
    Next

    ' Recorre todos los registros
    While Not rs.EOF
        'Item
        Set ITem = ListView1.ListItems.Add(, "", CStr(rs.Fields("id")), CStr(rs.Fields("id")))
        
        ' checked
        If rs.Fields("id") = True Then
           ITem.Checked = True
        Else
           ITem.Checked = False
        End If
        i = 1
        ' almacen el id que luego se usa para el update
        ITem.Tag = rs("numero").Value
        
        'Agrega los SubItem
        For Campo = 1 To rs.Fields.count - 1
            If Not IsNull(rs.Fields(Campo)) Then
                ITem.SubItems(i) = rs.Fields(Campo).Value
                
            End If
            i = i + 1
        Next
        'Siguiente registro
        rs.MoveNext
    Wend
    rs.Close
    Set rs = Nothing
Me.MousePointer = vbDefault

Exit Sub
'Error
ErrSub:

MsgBox Err.Description, vbCritical, "Error"
Me.MousePointer = vbDefault

End Sub
la cuestion es que en la parte de:
Set ITem = ListView1.ListItems.Add(, "", CStr(rs.Fields("id")), CStr(rs.Fields("id")))
ahi me marca un error que dice que tengo que cargar primero el imagelist entonces ademas la funcion id segun debe de estar en la base de datos declarado como si/no. bueno referente a mi problema es que en mi tabla no tengo ningun campo declarado como si/no por que no lo necesito. si necesito este codigo porque quiero cargar mis datos ahi y poder seleccionarlos para que al momento de dar clic al boton me elimine los registros seleccionados en el listview atraves de su clave unica que yo lo denomine "numero", ojala alguien pueda ayudarme con este problema yaque he intentado en este codigo pero no se como hacerlo, les agradezco de antemano por haberse tomado su tiempo en chekar el codigo y espero alguien pueda ayudarme. les envio un cordial saludo.
  #6 (permalink)  
Antiguo 02/07/2008, 07:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Eliminar de forma masiva

Simplemente quita la última parte. Debe quedar así:
Código:
Set ITem = ListView1.ListItems.Add(, "", CStr(rs.Fields("id"))
Pues los parámetros del método Add son [Index], [Key], [Text], [Icon], [SmallIcon]. Así que en este caso estarás agregando un elemento a la lista con el texto que esté en el campo id de la tabla.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 02/07/2008, 16:35
 
Fecha de Ingreso: enero-2008
Mensajes: 181
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo Respuesta: Eliminar de forma masiva

Cita:
Iniciado por David el Grande Ver Mensaje
Simplemente quita la última parte. Debe quedar así:
Código:
Set ITem = ListView1.ListItems.Add(, "", CStr(rs.Fields("id"))
Pues los parámetros del método Add son [Index], [Key], [Text], [Icon], [SmallIcon]. Así que en este caso estarás agregando un elemento a la lista con el texto que esté en el campo id de la tabla.
muchisimas gracias david el grande, ya he podido cargar la lista en el listview. ahora como les comento tengo otro codigo en el cual trato de eliminar los registros seleccionados en el listview pero me aparece el siguiente error. podrian decirme a que se refiere este error porfavor?

"Variable de tipi Object o la Variable de bloque With no esta establecida"

este es el codigo que estoy implementando en un boton para eliminar mis registros

Código:
Dim Item As ListItem

 Dim rs As New ADODB.Recordset
    Dim sql As String
    
    
    sql = "DELETE animales set numero = '" & Item.SubItems(0) & _
                         "', nombre = '" & ITem.SubItems(1) & _
                         "', raza = '" & ITem.SubItems(2) & _
                          "', numero = " & Abs(Item.Checked) & _
                            " where numero=" & CLng(Item.Tag) & ""
    
    Set rs = Crear_Recordset(cn, sql)

    Set rs = Nothing

porfavor alguien podria ayudarme lo que pasa es que soy algo nuevo en la materia y me interesa mucho espero alguien me guie o me indique en que estoy mal o que hacer, les agradesco de antemano y les envio un cordial saludo.
  #8 (permalink)  
Antiguo 03/07/2008, 03:27
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Eliminar de forma masiva

Hola,

para eliminar de la tabla todos los registros marcados en unl ListView con la propiedad Checkboxes a True:

(Suponemos que la primera columna del ListView contiene el campo "id" de la tabla)

Código:
Dim i As Integer
With ListView1
    For i = .ListItems.Count To 1 Step -1
        If .ListItems(i).Checked = True Then
            cn.Execute "DELETE * FROM animales WHERE id = " & .ListItems(i).Text
        End If
    Next i
End With
(no necesitas abrir ningún recordset)

  #9 (permalink)  
Antiguo 03/07/2008, 09:15
 
Fecha de Ingreso: enero-2008
Mensajes: 181
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo Respuesta: Eliminar de forma masiva

Cita:
Iniciado por Avellaneda Ver Mensaje
Hola,

para eliminar de la tabla todos los registros marcados en unl ListView con la propiedad Checkboxes a True:

(Suponemos que la primera columna del ListView contiene el campo "id" de la tabla)

Código:
Dim i As Integer
With ListView1
    For i = .ListItems.Count To 1 Step -1
            Next i
End With
(no necesitas abrir ningún recordset)


muchas gracias avellaneda es excelente el codigo funciona a la perfeccion, pero si no es mucha molestia pedirte un favor, lo que pasa es que ahi estas utilizando un id con numero automaticos pero la cuestion es que al eliminar uno el registro se recorre
es decir:
si tengo los registros 1,2,3,4 entonces si elimino el registro 2 me queda 1,3,4 entonces al hacer el conteo en el listview al registro 3 lo toma como registro 2 y no elimina por que no coincide, la cuestion o mi pregunta seria como le hago para que me tome mi registro numero.

es decir que en el momento que entre al ciclo if
If .ListItems(i).Checked = True Then
cn.Execute "DELETE * FROM animales WHERE id = " & .ListItems(i).Text
End If

ahi como hacerle que identifique el numero que esta en esa fila, no se si me di a explicar pero les agradeceria muchisimo si puedieran ayudarme.....

les agradezco de antemano y les envio un cordial saludo.
  #10 (permalink)  
Antiguo 03/07/2008, 13:06
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Eliminar de forma masiva

Para este caso te recomiendo que mejor uses un For Each para recorrer todos los elementos del ListView. Así no te dará problemas.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 03/07/2008, 15:48
 
Fecha de Ingreso: enero-2008
Mensajes: 181
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo Respuesta: Eliminar de forma masiva

Cita:
Iniciado por David el Grande Ver Mensaje
Para este caso te recomiendo que mejor uses un For Each para recorrer todos los elementos del ListView. Así no te dará problemas.
Muchas gracias David el grande, pero no se usar el For Each, me podrias dar un ejemplo de como se estructura, o que debe llevar como instruccion, disculpa las molestias, pero en verdad no tengo o mas bien no visualizo el la sentencia FOR EACH, te lo agradceria muchisimo.....

de antemano les agradezco las atenciones prestadas y les envio un cordial saludo.
  #12 (permalink)  
Antiguo 04/07/2008, 01:03
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Eliminar de forma masiva

Cita:
Iniciado por rishart Ver Mensaje
muchas gracias avellaneda es excelente el codigo funciona a la perfeccion, pero si no es mucha molestia pedirte un favor, lo que pasa es que ahi estas utilizando un id con numero automaticos pero la cuestion es que al eliminar uno el registro se recorre
es decir:
si tengo los registros 1,2,3,4 entonces si elimino el registro 2 me queda 1,3,4 entonces al hacer el conteo en el listview al registro 3 lo toma como registro 2 y no elimina por que no coincide, la cuestion o mi pregunta seria como le hago para que me tome mi registro numero.

es decir que en el momento que entre al ciclo if
If .ListItems(i).Checked = True Then
cn.Execute "DELETE * FROM animales WHERE id = " & .ListItems(i).Text
End If

ahi como hacerle que identifique el numero que esta en esa fila, no se si me di a explicar pero les agradeceria muchisimo si puedieran ayudarme.....

les agradezco de antemano y les envio un cordial saludo.
No entiendo lo que quieres decir, el código lo que hace es tomar el valor de la primera columna del ListView, que esté checada, y eliminar en la tabla el registro cuyo campo "id" coincida con ése valor.

Si tienes en la primera columna del LV 1, 2, 3, 4 y eliminas el 2, al volver a cargar el LV aparecerá 1, 3, 4 y si marcas el segundo item, eliminará el registro cuyo "id" sea 3.
Ten en cuenta que la variable "i" es solamente un contador de filas.

¿Seguro que pusiste el código, tal y como indiqué?

  #13 (permalink)  
Antiguo 04/07/2008, 11:44
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Eliminar de forma masiva

Para usar el For Each puedes hacer así. (Me tomo el atrevimiento de tomar como ejemplo el código de Avellaneda. Espero no se moleste.):
Código:
    Dim Item As ListItem
    For Each Item In .ListItems
        If Item.Checked = True Then
            cn.Execute "DELETE * FROM animales WHERE id = " & Item.Text
        End If
    Next i
Saludos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:37.