Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-09-2022
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Doble consulta a la misma tabla usando el mismo ado.query

Buenas, como lo dice el titulo necesito hacer dos bucles con consultas casi similares pero utilizando el mismo ado.query. En caso de no poderse me lo dejan saber y creo un nuevo query pero eso cargaria mucho el programa . ok tengo la tabla menu con un id, caption, etc, idmenup este ultimo hace referencia al id del cual es hijo. Esto para convertir los datos en un memo y poder utilizar el menu desde texto del increible y asombroso semidios Neftali.

Primero creo el select * from menu where idmenup = 0 (Opciones principales del menu), y luego con el id cambio el sql a Select * from menu where idmenup = idobtenido. el problema radica en cuando vuelvo a realizar el primer sql empiezo desde el principio y no en la row que deberia quedar. Ya he visto muchos puntos sobre bookmark pero siempre esta en 0. Si tienen alguna forma o idea de como resolver esto se lo agradecere.
Responder Con Cita
  #2  
Antiguo 07-09-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mejor describe la tabla con sus campos y di lo que quieres hacer.
Responder Con Cita
  #3  
Antiguo 07-09-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que quedaría así:

Código:
MENU
id
idmenup
descripcion

ID  IDMENUP DESCRIPCION
 1     0    PRINCIPAL
 2     1    SUBMENU PRINCIPAL 1
 3     1    SUBMENU PRINCIPAL 2
 4     1    SUBMENU PRINCIPAL 3
 5     0    SECUNDARIO
 6     5    SUBMENU SECUNDARIO 1
 7     5    SUBMENU SECUNDARIO 2
 8     5    SUBMENU SECUNDARIO 3
Código SQL [-]
/*
Alias m  = Menu
Alias sm = SubMenu
*/
select m.id, m.titulo, sm.id, sm.titulo
from menu m
join menu sm on sm.idmenup = m.id
where
m.idmenup = 0
Devolvería:
Código:
ID  DESCRIPCION ID  DESCRIPCION
 1  PRINCIPAL    2  SUBMENU PRINCIPAL 1
 1  PRINCIPAL    3  SUBMENU PRINCIPAL 2
 1  PRINCIPAL    4  SUBMENU PRINCIPAL 3
 5  SECUNDARIO   6  SUBMENU SECUNDARIO 1
 5  SECUNDARIO   7  SUBMENU SECUNDARIO 2
 5  SECUNDARIO   8  SUBMENU SECUNDARIO 3
Responder Con Cita
  #4  
Antiguo 07-09-2022
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si tienes un motor moderno, se puede hacer con un CTE:

https://learnsql.com/blog/do-it-in-s...ree-traversal/
https://learnsql.com/blog/query-parent-child-tree/
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 08-09-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Gracias a mamcx quisiera modificar mi respuesta.
Esto lo he probado en Firebird 2.5

Código:
MENU
id
idmenup
orden        -- Orden de los items de menu
usuario      -- Usuario para definir diferentes menus/ordenaciones por usuario
descripcion

Indexado por (usuario, idmenup)

ID  IDMENUP  ORDEN  USUARIO  DESCRIPCION
 1     0        1       1    PRINCIPAL
 2     1        1       1    SUBMENU PRINCIPAL 1
 3     1        2       1    SUBMENU PRINCIPAL 2
 4     1        3       1    SUBMENU PRINCIPAL 3
 5     0        2       1    SECUNDARIO
 6     5        1       1    SUBMENU SECUNDARIO 1
 7     5        2       1    SUBMENU SECUNDARIO 2
 8     5        3       1    SUBMENU SECUNDARIO 3
Código SQL [-]
WITH RECURSIVE menu_tree
as (
    -- Menu ROOT es el que tiene "IDMENUP = 0"
    select idmenup, id, orden, usuario, descripcion
    from menu
    where
    idmenup = 0
    UNION ALL
    -- CHILD se relacionan con el padre por "PADRE.IDMENUP = ID"
    select ch.idmenup, ch.id, ch.orden, ch.usuario, ch.descripcion
    from menu ch
    join menu_tree mt on ch.idmenup = mt.id and ch.usuario = mt.usuario)
select *
from menu_tree
where
usuario = 1
order by idmenup, orden

Última edición por duilioisola fecha: 08-09-2022 a las 08:53:34.
Responder Con Cita
  #6  
Antiguo 08-09-2022
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Gracias duilioisola

Gracias duilioisola, as dado en el clavo de lo que queria ahora probare a ver si me funciona. Perdon por no colocar la configuracion de la tabla.
dbo.Menu
Código SQL [-]
Idmenu  int  Unchecked
Mmenu  char(25)  Checked
Mcaption  char(25)  Checked
Mdescripcion  char(50)  Checked
Mlink  nchar(30)  Checked
Mestado  bit  Checked
Mvisible  bit  Checked
Midmenup  int  Checked
Morden  int  Checked
Mhotkey  nchar(10)  Checked

Donde mmenu es el id y midmenup es el id al que pertenece cuando es una opcion o submenu. Deberia ser 1 to N pero se me complicaria ya que el ejemplo de Neftali aparte de darlo como un texto organizado Menu/submenu en mi tabla lo podras crear sin ningun orden. o agregar opciones despues. implementare tu respuesta y te dejo saber.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta doble sobre una tabla amerika111 SQL 1 24-06-2013 18:33:31
consulta con campos adicionales a tabla en la misma fila jasmad SQL 3 16-04-2013 17:13:56
Consulta usando query en delphi 7 Yensis22 SQL 3 25-08-2008 12:29:55
Consulta usando query en delphi 7 Yensis22 SQL 4 25-08-2008 07:03:05
Consulta con dos relaciones a la misma tabla mcrz2 SQL 4 23-05-2006 13:15:25


La franja horaria es GMT +2. Ahora son las 12:40:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi