
11/07/2005, 10:52
|
 | | | Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años Puntos: 2 | |
Hola! De acuerdo, pero no solo la estructura de arbol, etc, es la unica solucion, otra solucion es un simple for, claro, no me gusta que son varias consultas, pero para una tabla tan pequeña como esta, pues no hay problema, creo...
blnSeguir = True
strID = "CategoriaMadreOriginal" = "0"
do while (blnSeguir = True)
1. seleccionar los hijos de la categoria que queremos.
select IdCategoria,
from categorias
where IdCategoriaMadre in ( strID )
2. crear una cadena de ID's a borrar == claro, en un for
if not objRs.Eof
do while not objRs.Eof
strID = objRs("ID") & ", "
objRs.MoveNext
loop
3. Hay Resultados, entonces borramos las categorias que coincidan.
delete form categorias
where IdCategoriaMadre in ( strID )
else
//No hay mas hijos
blnSeguir = False
end if
loop
Creo que con algo así hace el borrado en cascada, sin necesidad de hacer algo mas complicado, repito, si con la estructura de arbol logras tener algo como:
SQL = "DELETE FROM categorias WHERE IdCategoriaMadre in (1,2)
Pues es la mejor opcion en cuestion de eficiencia, pero si var a mantener un recordset, un cursor, etc para lograrlo, pues igual, puede ser algo muy pesado al final de cuentas, entonces quizas esta opcion no es tan mala.
Tambien, a esta estructura se le puede implementar un cambio para que el delete no se ejecute sino hasta el final, asi la cadena strID se forma mediante el while(blnSeguir), hasta que no tenga resultados, y al final se corre el delete como :
DELETE FROM categorias WHERE IdCategoriaMadre in ( strID )
Lo cual seria realmente lo mas eficiente, y por los select creo que no son para nada pesados porque son sobre un index, claro, si definiste un index adecuado.
Por eso decia, que la idea era basarse en la Madre, para empezar, el metodo que eligas para hacer esa busqueda ya son un chorro de opciones
Suerte!! |