Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-01-2012
juliannemiro juliannemiro is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 27
Poder: 0
juliannemiro Va por buen camino
Validar Dato DBGRID en tiempo de ejecución!!

Hola a todos!

- Tengo una DBGrid de la tabla ASISTENCIAS en la que cargo una lista de alumnos de una fecha determinada.
La grilla muertra alumno, ID de tipo de asistencia y descripción entre otras cosas.

Lo que yo necesito es que cuando la persona completa en tiempo de ejecucion me valide lo que ingresa, por ejemplo:

El usuario pone sobre un alumno X, id_asistencia: 'P' y la descripcion automaticamente tiene que decir PRESENTE. Si cambió la 'P', por una 'A', debe refrescar la descripción a AUSENTE. Esto para cada uno de los alumnos que aparece en la grilla.

Esta modificacion de datos la hago dentro de una transacción.

Trabajo con SQLserver2000, y tengo el DATASOURCE, ADOTABLE Y ADOQUERY de la tabla ASISTENCIAS

Espero se entienda, agradezco su tiempo!
Responder Con Cita
  #2  
Antiguo 26-01-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola juliannemiro.

Si no te entendí mal, estás ingresando los datos desde el mismo DBGrid. De ser así, podés aprovechar el evento OnKeyPress del TDBGrid:
Código Delphi [-]
procedure TForm1.DBGridKeyPress(Sender: TObject; var Key: Char);
begin
  with Sender as TDBGrid do
   if SelectedField.FieldName = 'id_asistencia' then
   begin
     DataSource.DataSet.Edit;
     if Upcase(Key) = 'P' then
       SelectedField.Value:= 'PRESENTE';
     if Upcase(Key) = 'A' then
       SelectedField.Value:= 'AUSENTE';
     Key:= #0;
   end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 27-01-2012
juliannemiro juliannemiro is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 27
Poder: 0
juliannemiro Va por buen camino
Perdon en la tardanza en contestar!

Si, eso me sirve y muchisimo. Pero tengo el siguiente problema:
El campo que tiene que cambiar la descripción no debe ser id_asistencias, sino x_descripcion que también lo muestra la grilla ya que esta dentro del mismo adoquery.
Responder Con Cita
  #4  
Antiguo 27-01-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por juliannemiro Ver Mensaje
Perdon en la tardanza en contestar!

Si, eso me sirve y muchisimo. Pero tengo el siguiente problema:
El campo que tiene que cambiar la descripción no debe ser id_asistencias, sino x_descripcion que también lo muestra la grilla ya que esta dentro del mismo adoquery.
Hola Julián.

Basta con que cambies el nombre de campo 'id_asistencias' por 'x_descripción' en el código que te puse anteriormente.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 27-01-2012
juliannemiro juliannemiro is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 27
Poder: 0
juliannemiro Va por buen camino
Hola!

Pido disculpas, porque me expresé mal

En mi dbgird tengo campo id_asistencia_tipo y x_asistencia entre otros. Cuando el usuario pone en id_asistencia_tipo la letra 'P', el campo x_asistencia debe ponerse 'Presente'. Pero se mantiene en id_asistencia_tipo la letra 'P'. Digamos que es el Codigo y Descrpicion

Osea el registro quedaria asi:
Alumno.....id_asistencia.....tipo x_asistencia
Juan...............P................Presente

En sintesis lo que me falta es la sintaxis para agregar la linea que seleccione otro campo del mismo registro al cual le voy a asignar un valor.

Gracias!
Responder Con Cita
  #6  
Antiguo 27-01-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Creo que ahora te entendí

Código Delphi [-]
procedure TForm1.DBGridKeyPress(Sender: TObject; var Key: Char);
begin
  with Sender as TDBGrid do
  if SelectedField.FieldName = 'id_asistencia' then
  begin
    DataSource.DataSet.Edit;
    if Upcase(Key) = 'P' then
      DataSource.DataSet.FieldByName('x_descripción').AsString:= 'PRESENTE';
    if Upcase(Key) = 'A' then
      DataSource.DataSet.FieldByName('x_descripción').AsString:= 'AUSENTE';
    Key:= #0; // (Quitá esta línea si deseas conservar los caracteres tecleados )
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 27-01-2012
juliannemiro juliannemiro is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 27
Poder: 0
juliannemiro Va por buen camino
Excelente ecfisa!!

Eso es exactamente lo que quería. Pero sigo teniendo un problema para poder realizarlo con exito.

Lo que pasa es lo siguiente:
Cambio un registro, actualiza perfecto el x_asistencia
Cambio el segundo registro, actualiza perfecto el x_asistencia. Pero ni bien quiero pasar a un tercer registro el programa falla y me dice 'No puede encontrar la fila para su actualizacion: algunos valores han cambiado desde la ultima vez que se leyó'

Responder Con Cita
  #8  
Antiguo 27-01-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Julián.

Revisá estos enlaces donde se trata ese error:
Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 30-01-2012
juliannemiro juliannemiro is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 27
Poder: 0
juliannemiro Va por buen camino
Hola.
Estuve leyendo y creo que el problema es con la consulta del adoquery. Porque si yo solo trabajo en la dbgrid con los campos de la tabla asistencias, funciona todo correctamente.
Ahora si a la consulta de la dbgrid le agrego los joins con las otras tablas, me falla con el mensaje antes detallado.

Voy a probar de solucionarlo, lo que se me viene a la cabeza es que trata de editar campos de las tablas que trae con el JOIN y solamente deberian usarlo para mostrarlos. Será ese el problema?

No se si corresponde seguir tratandolo acá o crear un nuevo thread.
Responder Con Cita
  #10  
Antiguo 30-01-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por juliannemiro Ver Mensaje
No se si corresponde seguir tratandolo acá o crear un nuevo thread.
Hola Julián.

Si creás un nuevo hilo exponiendo caso y el error, con seguridad incrementás las posibilidades de recibir una respuesta más concreta.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 15-02-2012
juliannemiro juliannemiro is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 27
Poder: 0
juliannemiro Va por buen camino
Hola. Estoy de nuevo!

Te cuento que he solucionado el problema creando una VISTA en el SQLServer:

Código SQL [-]
SELECT     b.id_asistencias, c.apellido AS Apellido, c.nombre AS Nombre, b.id_asistencias_tipo, 
    b.computa, b.valor, b.obs AS Observación, f.id_estado, f.id_alumno, d .id_curso, b.fecha,
            CASE b.id_asistencias_tipo
              WHEN 1 THEN 'Presente'
              WHEN 2 THEN 'Ausente'
              WHEN 3 THEN 'Tarde'
            ELSE 'retiro' END AS x_asistencia                   
FROM         asistencias b LEFT JOIN
                      alumnos_cursos a ON a.id_alumno = b.id_alumno INNER JOIN
                      personas c ON c.id_persona = a.id_alumno LEFT JOIN
                      cursos d ON a.id_curso = d .id_curso AND b.n_anioLectivo = d .n_anio LEFT JOIN
                      asistencias_tipos e ON b.id_asistencias_tipo = e.id_asistencias_tipo LEFT JOIN
                      alumnos f ON c.id_persona = f.id_alumno




Asique ese error ya no esta mas. El problema es el siguiente.

Cuando cambio el valor del ID_ASISTENCIA_TIPO en la DBGRID, me cambia la X_ASISTENCIA correctamente. Pero cuando salgo del campo(me cambio de registro), el ID_ASISTENCIA_TIPO se mantiene con el cambio, pero la X_ASISTENCIA vuelve a tomar el valor que tenía antes.

El código que estoy usando es el siguiente


Código Delphi [-]
procedure TFormAsistencia.DBGridMateriasCursoKeyPress(Sender: TObject;
  var Key: Char);
begin

  with Sender as TDBGrid do
   if SelectedField.FieldName = 'id_asistencias_tipo' then
   begin
     DataSourceAsistenciasGrid.DataSet.Edit;
     DBGridMateriasCurso.Columns[4].ReadOnly := false;
     Key := UpCase(Key);
     if Upcase(Key) = '1' then
     DataSourceAsistenciasGrid.DataSet.FieldByName('x_asistencia').AsString:= 'Presente';
     if Upcase(Key) = '2' then
     DataSourceAsistenciasGrid.DataSet.FieldByName('x_asistencia').AsString:= 'Ausente';
     if Upcase(Key) = '3' then
     DataSourceAsistenciasGrid.DataSet.FieldByName('x_asistencia').AsString:= 'Tarde';
     if Upcase(Key) = '4' then
     DataSourceAsistenciasGrid.DataSet.FieldByName('x_asistencia').AsString:= 'Retiro Anticipado';
     DBGridMateriasCurso.Columns[4].ReadOnly := true;
   end;


Cual puede ser el problema?

Gracias como siempre por la buena predisposición!
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
Tiempo de ejecución. Columnas en DBGrid. manueljgc OOP 0 07-03-2009 22:30:36
DBGrid en tiempo de ejecución iga Gráficos 6 14-12-2007 01:52:10
Columnas de DBGrid en tiempo de ejecución dape Varios 1 17-03-2005 03:57:31
Crear Columna en un DBGRid en tiempo de ejecucion muli Conexión con bases de datos 1 03-03-2005 08:30:40
Cambiar tipo de un dato en Rave 5 en tiempo de ejecución Berto2003 Impresión 2 05-03-2004 15:41:21


La franja horaria es GMT +2. Ahora son las 09:36:03.


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