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 27-10-2006
Avatar de anghell77
anghell77 anghell77 is offline
Miembro
 
Registrado: may 2006
Posts: 194
Poder: 18
anghell77 Va por buen camino
cláusula Order by impide actualizar en tiempo real?

De acuerdo al código proporcionado por lepe aqui y que lo añado que permite modificar datos arrojados por una consulta en un DBGrid,:

Código Delphi [-]
Query1.....//Datos que requiere el query  para ejecutarse, son instrucciones SQL, para filtrar los datos.
Query1.RequestLive:=true;
Query1.Open;
DBGrid1.Columns[0].ReadOnly:=false;
DBGrid1.Columns[1].ReadOnly:=false;

Estoy ahora con ésto:
Tengo, una sola tabla, que nada tiene que ver con el hilo antes mencionado, donde se almacena:
Cita:
Apellido, Nombre, Grado, Grupo, Turno, Sept, Oct, Bim1, Nov, Dic, Bim2, Ene, Feb, Bim3, Mar, Abr, Bim4, May, Jun, Bim5, Total.
Para capturar, apellidos, nombres y calificaciones mensuales y bimestrales de alumnos, los cuales pueden pertenecer a 1°, 2°, 3° y secciones A, B, C, D, E, F y G; y al turno Matutino o Vespertino.

Ahora bien, he puesto Combobox (para facilidad), para :
Cita:
Grado [1,2,3],
Grupo [A,B,C,D,E,F,G]
Turno [T.M., T.V.]
Bimestre [1,2,3,4,5]
La selección del bimestre condiciona los meses que deben arrojarse en el DBGrid con:
Veremos un ejemplo, aplicado, donde la consulta es:
Cita:
DataModule2.Bim1
Aplica desde
Cita:
DataModule2.Bim1 hasta DataModule2.Bim5
Considerando que, como dije, depende de la selección del Bimestre (Bimestre_CBX[es el combobox]) cambia el ítem y la consulta.

El código de la consulta:

Código SQL [-]
Select Apellido, Nombre, Sept, Oct, Bim1 where Grado=:entrada and Grupo=:entrada2 and turno=:entrada3

Código Delphi [-]
Case Bimestre_CBX.ItemIndex of
 0:Begin
     DBGrid1.DataSource:=DataModule2.Bim1_Source;
     DataModule2.Bim1.Close;
     DataModule2.Bim1.ParamByName('entrada').AsString:=Trim(Grado_CBX.Text);
     DataModule2.Bim1.ParamByName('entrada2').AsString:=Trim(Grupo_CBX.Text);
     DataModule2.Bim1.ParamByName('entrada3').AsString:=Trim(Turno);
     DataModule2.Bim1.RequestLive:=true;      
     DataModule2.Bimestre1.Open;   
   end;
///aqui lo que mencionaba, siguen los items 1: 2: 3: etc para los cuales tambien cambia la consulta a Bim2, Bim3, Bim4, etc
 end;
  DBGrid1.Columns.RebuildColumns;
  Dbgrid1.Columns[0].ReadOnly := true;          
  Dbgrid1.Columns[1].ReadOnly := true;

end;

Veamos....esto funciona....me permite modificar las calificaciones que corresponden a los meses del bimestre X, pero, dado que puede que la entrada de los nombres no se haya dado alfabéticamente o simplemente se capturaron 5 de primero y 10 de segundo y sin orden albético implementé esto:
Una consulta, llamada Bimestrales la cual, no tiene código porque:
Código Delphi [-]
//dentro del evento del botón que dispara la consulta:
 Case Bimestre_CBX.ItemIndex of
  DataModule2.Bimestrales.Close;
  DataModule2.Bimestrales.SQL.Clear;
  0: DataModule2.Bimestrales.SQL.Add('Select APELLIDO, NOMBRE, SEPT, OCT, BIM1 from Calificaciones where Grado=:entrada and Grupo=:entrada2 and Turno=:entrada3 Order By Apellido');      
  1: DataModule2.Bimestrales.SQL.Add('Select APELLIDO, NOMBRE, NOV, DIC, BIM2 from Calificaciones where Grado=:entrada and Grupo=:entrada2 and Turno=:entrada3 Order By Apellido');
  2: DataModule2.Bimestrales.SQL.Add('Select APELLIDO, NOMBRE, ENE, FEB, BIM3 from Calificaciones where Grado=:entrada and Grupo=:entrada2 and Turno=:entrada3 Order By Apellido');
  3: DataModule2.Bimestrales.SQL.Add('Select APELLIDO, NOMBRE, MAR, ABR, BIM4 from Calificaciones where Grado=:entrada and Grupo=:entrada2 and Turno=:entrada3 Order By Apellido');
  4:  DataModule2.Bimestrales.SQL.Add('Select APELLIDO, NOMBRE, MAY, JUN, BIM5 from Calificaciones where Grado=:entrada and Grupo=:entrada2 and Turno=:entrada3 Order By Apellido');


   End;
   DataModule2.Bimestrales.ParamByName('entrada').AsString:=Trim(Grado_CBX.Text);
   DataModule2.Bimestrales.ParamByName('entrada2').AsString:=Trim(Grupo_CBX.Text);
   DataModule2.Bimestrales.ParamByName('entrada3').AsString:=Trim(Turno);
   DataModule2.Bimestrales.RequestLive:=true;
   DataModule2.Bimestrales.Open;
   DBGrid1.Columns.RebuildColumns;
   Dbgrid1.Columns[0].ReadOnly := true;          
   Dbgrid1.Columns[1].ReadOnly := true;//Este es el código que me enseñó lepe para modificar datos en tiempo de ejecución de los datos arrojados por el Query

La cláusula "ORDER BY" añadida en el código anterior, que no estaba en el primer código, no me permite modificar los datos de los meses correspondientes al Bimestre elegido....lo sé porque ya la quité en un ítem y en otro no, y en donde lo quité permitió modificar..caso contrario el otro

Alguna sugerencia??...Espero no haber hecho mucho desastre con esto...
pero prefiero el comentario por exceso de información que por falta....ahora puedo recibir uno por confusión y falta de explicación..

Agraedciendo el tiempo...es que no sé porque la cláusula no deja modificar..

{Saludos}
__________________
"...Ayer Bastaba un Sueño..."

Última edición por anghell77 fecha: 27-10-2006 a las 10:42:19.
Responder Con Cita
  #2  
Antiguo 27-10-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues efectivamente una consulta que implique a más de una tabla, o que símplemente contenga la claúsula Order by no es actualizable.

Mírate el componente TUpdateSql.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 27-10-2006
Avatar de anghell77
anghell77 anghell77 is offline
Miembro
 
Registrado: may 2006
Posts: 194
Poder: 18
anghell77 Va por buen camino
A ver...según veo en el Componente, TUpdateSql, requiere sentencias SQL, y por el ejemplo de la cuestión que me tiene aquí, si arrojo los datos mediante un query, como podría aplicar, por decir, para modificar los datos de Sep, Oct y Bim1, mediante el TupdateSql, si no puedo escribir en el Grid?

Digo la ayuda habla de actualización en tiempo real,eso es lo que necesito, pero desconozco la utilización.

Agradezco las respuestas, Marcos, y aprovecho para enviar un cordial Saludo!

{Saludos}
__________________
"...Ayer Bastaba un Sueño..."
Responder Con Cita
  #4  
Antiguo 30-10-2006
Avatar de anghell77
anghell77 anghell77 is offline
Miembro
 
Registrado: may 2006
Posts: 194
Poder: 18
anghell77 Va por buen camino
Bien, pues basándome un poco en los filtros, he decidido hacerlo de una manera un tanto cuanto arcáica...

Apliqué un filtro a la tabla, donde:

Código Delphi [-]
DataModule2.Calificaciones.filtered:=false;
DataModule2.Calificaciones.filter := 'GRADO = '+QuotedStr(Grado_CBx.Text) + 'and GRUPO = '+ QuotedStr(Grupo_CBX.Text)+ 'and TURNO = '+QuotedStr(Turno_CBX.Text);
DataModule2.Calificaciones.filtered := true;

Donde, la selección de los meses no está condicionada, pero, aquí lo arcáico, dependiendo del Bimestre que se haya seleccionado, se ocultan las columnas restantes, correspondientes a los otros meses en "desuso" por decirlo así; en el DBGrid, y cambio la propiedad de sólo lectura de las columnas correspondientes a Apellido, Nombre, etc......

Sé que es costoso hacerlo así, por lo del filtro; que se pudo hacer de una mejor manera, claro!!, lo sé!!, el problema es que no supe como, además de que la parte visual es Super Importante en esta interfaz...y requería hacerlo algo así como lo he hecho....

Bien. Pues atendiendo la guía de estilo he puesto una respuesta de cómo solucioné el problema, aunque la solución no haya sido la mejor ...

{Saludos}
__________________
"...Ayer Bastaba un Sueño..."
Responder Con Cita
  #5  
Antiguo 30-10-2006
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
La razon fundamental es que no hay una clave unica que identifique a la fila. De acuerdo al motor de datos, puede o no que implique algo el order by (y dudo que eso le importe a un motor sql...)

Rutinariamente he trabajado con vistas de muchas tablas y diferentes ordenes y hasta con groups by. Lo importante es que cada tabla tenga su PK o un TIMESTAMP.

Si la BD que usas no es un motor sql, tonces es al estilo TUpdateSql...
__________________
El malabarista.
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
Video en Tiempo real Chalo78 Varios 0 26-01-2006 18:13:58
Video en tiempo real Fitoperu Internet 1 25-08-2005 21:47:07
Videos en tiempo real Albano Internet 4 07-06-2005 22:51:56
Clausula order by C1, C2 desc Jack Firebird e Interbase 3 05-11-2004 20:29:22
Actualizar En Tiempo Real GIVO SQL 3 21-07-2003 19:10:31


La franja horaria es GMT +2. Ahora son las 04:50:45.


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