Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2008
marcoev marcoev is offline
Miembro
 
Registrado: may 2003
Ubicación: Nogales, Sonora, Mex.
Posts: 57
Poder: 22
marcoev Va por buen camino
Question Ayuda con un query de Actualizacion en MySQL

Muy buenos días o tardes tengan todos, espero y puedan ayudarme.

Tengo 2 tablas, la primer tabla seria el padre y la otra la hija, en ambas tengo un campo o bandera que es para indicar si el registro esta disponible, la bandera de la tabla padre depende de todas las banderas de la tabla hija, por lo que si todas las banderas están en True en la hija la bandera del padre debe de estar en True, pero si uno solo de la tabla hija esta en False, la bandera del padre debe de estar en False.

necesito hacer un query (si es que es posible) para que haga estos cambios, el query lo ejecutaría desde mi aplicación.

estoy utilizando MySQL 5, y la verdad no tengo idea de como puedo lograr esto desde SQL, pues lo que hago actualmente es por medio de ciclos y no se me hace que sea la mejor opción.

Cualquier ayuda es bienvenida.

Saludos y espero sus amables comentarios.
__________________
saludos a todos y gracias por compartir sus conocimientos y experiencias... ;-)
Responder Con Cita
  #2  
Antiguo 10-10-2008
marcoev marcoev is offline
Miembro
 
Registrado: may 2003
Ubicación: Nogales, Sonora, Mex.
Posts: 57
Poder: 22
marcoev Va por buen camino
pues aqui tengo algo, aunque no esta completo, y no jala , pero es un avance y creo que por aqui va

Código SQL [-]
UPDATE Facturas, (SELECT COUNT(Saldada) As Saldadas From FacturasDet Where Saldada = False) As @Saldadas
Set Facturas.Saldada = IF(@Saldadas=0, True, False)


aclaro que las tabla padre es Facturas y la Hijo es FacturasDet, el campo bandera se llama Saldada.

alguien que sepa mas al respecto... gracias.
__________________
saludos a todos y gracias por compartir sus conocimientos y experiencias... ;-)
Responder Con Cita
  #3  
Antiguo 10-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Suponiendo que entendí lo que preguntas y tomando en cuenta que un valor booleano es 1 ó 0, se me ocurre lo siguiente:

Código SQL [-]
update padre
set disponible = (select min(disponible) from hijo where codigo_padre = padre.codigo)

Si todos los hijos están disponibles, el mínimo será 1, si por lo menos uno no lo está, el mínimo será 0.

// Saludos
Responder Con Cita
  #4  
Antiguo 10-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
EDITO: Roman ya contestó.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #5  
Antiguo 10-10-2008
marcoev marcoev is offline
Miembro
 
Registrado: may 2003
Ubicación: Nogales, Sonora, Mex.
Posts: 57
Poder: 22
marcoev Va por buen camino
muchas gracias roman por tu respuesta. en si me quedo el codigo como sigue

Código SQL [-]
UPDATE Facturas 
Set Facturas.Saldada = IF((SELECT count(Saldada) As Saldadas From FacturasDet Where Saldada = False) = 0, True, False)

utilice count e if, pues nose, me gusto mas , pero la idea seria casi lo mismo. aunque todavia me falta ahora si utilizar las llaves foraneas y esas cosas, espero y me funcione correctamente.
__________________
saludos a todos y gracias por compartir sus conocimientos y experiencias... ;-)
Responder Con Cita
  #6  
Antiguo 10-10-2008
marcoev marcoev is offline
Miembro
 
Registrado: may 2003
Ubicación: Nogales, Sonora, Mex.
Posts: 57
Poder: 22
marcoev Va por buen camino
roman, otra consulta, el query funcionaria para cuando se tienen que actualizar varios padres?

osea
Código SQL [-]
update padre
set disponible = (select min(disponible) from hijo where codigo_padre = padre.codigo) Where Padre.Master = ejemplo

donde el padre.Master puede repetirse? esto porque el padre a su vez tiene otro padre... complicado, me imagino quetendria que hacer algun ciclo
__________________
saludos a todos y gracias por compartir sus conocimientos y experiencias... ;-)
Responder Con Cita
  #7  
Antiguo 14-10-2008
marcoev marcoev is offline
Miembro
 
Registrado: may 2003
Ubicación: Nogales, Sonora, Mex.
Posts: 57
Poder: 22
marcoev Va por buen camino
pues creo que me habia hecho bolas con lo que intentaba hacer, pero ya lo resolvi y creo que de buena forma.

en total hago 3 querys, el primer query marca los hijos del primer padre como saldados si estos ya no tienen "saldo" pendiente

el segundo query verifica si la factura tiene hijos pendientes de saldar, dependiendo del resultado salda o no la factura

y el tercero hace lo mismo que el anterior pero con las entradas y las facturas.

Este es el codigo que finalmente utilize para el proceso...

Código Delphi [-]
      //Registra las salidas y marca o desmarca como saldada...
      qAccion.Close;
      qAccion.SQL.Text:='Update FacturasDet Set Salidas = Salidas + '+
        FloatToStr(edCantidad.FloatValue-CantTmp)+', Saldada = IF(Salidas = CantRec, True, False)' +
        ' Where FolioDet = '+qSalidasDet.FieldByName('FolioDet').AsString;
      qAccion.Execute;

      //Marca o demarca como saldada la factura
      qAccion.Close;
      qAccion.SQL.Text:='Update Facturas Set Saldada = If((Select Count(Saldada) As Total From '+
        'FacturasDet Where Folio = '+FDFolio+' and Saldada = False)>0, False, True)';
      qAccion.Execute;

      //Marca o demarca como saldada la entrada
      qAccion.Close;
      qAccion.SQL.Text:='Update Entradas Set Saldada = If((Select Count(Saldada) As Total From '+
        'Facturas Where NoEntrada = '+QuotedStr(FDEntrada)+' and Saldada = False)>0, False, True)';
      qAccion.Execute;

de igual forma, muchas gracias por su apoyo.
__________________
saludos a todos y gracias por compartir sus conocimientos y experiencias... ;-)
Responder Con Cita
  #8  
Antiguo 01-12-2008
martinb martinb is offline
Miembro
 
Registrado: nov 2007
Posts: 19
Poder: 0
martinb Va por buen camino
Exclamation master detail con query y ttable

Hola tengo un problema cuando quiero hacer un reporte utilizando un query como master y una ttable como detail.

Cuando uso grillas en un formulario anda bien, pero cuando quiero hacer un reporte, este solo imprime los registros del maestro pero ninguno del detalle.

Hay alguna solucion posible o simplemente no se puede hacer un reporte de este tipo. Por cierto uso el componente Qreport.

Espero respuestas. Desde ya gracias.

Saludos CLub delphi
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
ayuda con query para Mysql fecha. vroa74 Conexión con bases de datos 11 06-06-2008 15:56:00
Ayuda por favor para correr un query en Delphi a una base de datos en Mysql charlyfitlh MySQL 10 01-11-2007 20:28:49
Problemas y Soluciones de actualización de Query en TDBChart rosodo1 Gráficos 1 12-01-2007 00:59:48
Actualizacion query alfgonvar Conexión con bases de datos 3 10-07-2003 17:56:02
Actualización Query con Join en DBExpress ibarrols Conexión con bases de datos 5 26-06-2003 20:13:56


La franja horaria es GMT +2. Ahora son las 01:13:28.


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