Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: E N T E R en Junio 22, 2013, 06:24:40 pm

Título: Mejorar esta Funcion
Publicado por: E N T E R en Junio 22, 2013, 06:24:40 pm
Hola. estoy preparando esta funciona en VB6. me funciona bien solo que quiero ponerle mas opciones.

Código: (VB) [Seleccionar]
Public Sub ELIMINAR_REGISTRO(xTabla As String, xLisView As ListView, xNColumna As Integer, xMensajeExtra As String)
       
    If xLisView.ListItems.Count = 0 Then
        MsgBox "Debe seleccionar un registro para eliminar", vbInformation
    Else
        Dim msg As String
        msg = MsgBox("Esta seguro que va eliminar este registro..." & vbCrLf & vbCrLf & xMensajeExtra, vbYesNo + vbInformation)
       
        If msg = vbYes Then
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
            '// Conectar la Base Datos con ADO
               Call ConectarADO
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
            ComandoSQL = "DELETE FROM " & xTabla & " WHERE id='" & xLisView.SelectedItem.SubItems(xNColumna) & "'"
            cnADO.Execute ComandoSQL
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
            '// Cerrar la base de datos y liberar la memoria
                Call CerrarADO
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
        End If
    End If

End Sub

La opcion que le quiero poner es si hay 2 o mas tabla poder eliminar lo que yo le indique sin que aparezca los mensajes.

Por ejemplo tengo la Tabla: vehiculos y la tabla: detalle_vehiculos al eliminar un registro de la tabla vehiculos que también me elimine los registro segun el idvehiculos de la tabla detalle_vehiculos.
Título: Re:Mejorar esta Funcion
Publicado por: E N T E R en Junio 22, 2013, 06:43:19 pm
Lo hice asi pero medio que queda otra ves limitado solo a 2 tablas si hay 3 o mas ya queda corto la funcion.

Código: (VB) [Seleccionar]
Public Sub ELIMINAR_REGISTRO(xTabla As String, xLisView As ListView, xColum As Integer, xMensajeExtra As String, xDetalle As Boolean)

    If xLisView.ListItems.Count = 0 Then
        MsgBox "Debe seleccionar un registro para eliminar", vbInformation
    Else
        Dim Msg As String
        Msg = MsgBox("Esta seguro que va eliminar este registro..." & xMensajeExtra, vbYesNo + vbInformation)

        If Msg = vbYes Then
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
            '// Conectar la Base Datos con ADO
                Call ConectarADO
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
               
                cnADO.BeginTrans
               
                ComandoSQL = "DELETE FROM " & xTabla & " WHERE id='" & xLisView.SelectedItem.SubItems(xColum) & "'"
                cnADO.Execute ComandoSQL
               
                If xDetalle = True Then
                    ComandoSQL = "DELETE FROM " & xTabla & "_detalle" & " WHERE idvehiculo='" & xLisView.SelectedItem.SubItems(xColum) & "'"
                    cnADO.Execute ComandoSQL
                End If
               
                cnADO.CommitTrans
               
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
            '// Cerrar la base de datos y liberar la memoria
                Call CerrarADO
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
        End If
    End If

End Sub
Título: Re:Mejorar esta Funcion
Publicado por: wolf_kof en Junio 22, 2013, 06:56:47 pm
Eso en primer lugar lo puedes resolver con configurar las claves principales y foráneas de la base de datos, por ejemplo si es una base de datos de Access crea la relación y dale eliminar por cascada.


(http://imageshack.us/a/img197/2981/twal.png)

Ahora puedes agregar otra consulta sql después de esa consulta con un DELETE en la otra tabla para eliminar todos, recuerda que la sentencia DELETE elimina o un registro o un grupo de registros. Ejemplo:

Eliminar un solo registro:
(http://img541.imageshack.us/img541/2420/jx87.png)

Eliminar varios registroso con un mismo dato
(http://img837.imageshack.us/img837/2017/a5x.png)


Título: Re:Mejorar esta Funcion
Publicado por: wolf_kof en Junio 22, 2013, 07:09:44 pm
Y por que no creas una matriz como variable de la función y le cargas los nombres de las tablas y hacer un bucle para que las ejecute según la cantidad de items que tenga la matriz que podes sacar con un UBound, digo.
Título: Re:Mejorar esta Funcion
Publicado por: wolf_kof en Junio 22, 2013, 07:12:54 pm
Algo así:

Código: [Seleccionar]

Public Sub ELIMINAR_REGISTRO(xTabla As String, xTablas() as String, xLisView As ListView, xColum As Integer, xMensajeExtra As String, xDetalle As Boolean)
 
    If xLisView.ListItems.Count = 0 Then
        MsgBox "Debe seleccionar un registro para eliminar", vbInformation
    Else
        Dim Msg As String
        Msg = MsgBox("Esta seguro que va eliminar este registro..." & xMensajeExtra, vbYesNo + vbInformation)
 
        If Msg = vbYes Then
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
            '// Conectar la Base Datos con ADO
                Call ConectarADO
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
               
                cnADO.BeginTrans
               
                ComandoSQL = "DELETE FROM " & xTabla & " WHERE id='" & xLisView.SelectedItem.SubItems(xColum) & "'"
                cnADO.Execute ComandoSQL
               
                If xDetalle = True Then

                    Dim i as integer
                    For i = 0 to Ubound(xTablas) to
                                     ComandoSQL = "DELETE FROM " & xTablas(i) & " & " WHERE idvehiculo='" & xLisView.SelectedItem.SubItems(xColum) & "'"
                                     cnADO.Execute ComandoSQL
                    next
                End If
               
                cnADO.CommitTrans
               
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
            '// Cerrar la base de datos y liberar la memoria
                Call CerrarADO
            '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
        End If
    End If
 
End Sub


Y cargas los datos asi

Código: [Seleccionar]

........., {"Tabla1", Tabla2", "Tabla3"}, ...............

Título: Re:Mejorar esta Funcion
Publicado por: seba123neo en Junio 22, 2013, 07:33:17 pm
pues podes hacerlo con claves como te dijeron o simplemente hacer otro delete y guardar el id asi lo borras por ese id.
Título: Re:Mejorar esta Funcion
Publicado por: E N T E R en Junio 22, 2013, 07:47:03 pm
Segun la clave no puedo por que no los tengo relacionados.