Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Update despues de Consulta (https://www.clubdelphi.com/foros/showthread.php?t=31954)

anghell77 23-05-2006 02:10:00

Update despues de Consulta
 
Delphi 7 Paradox7

Hace unos dias publiqué un hilo "Filtro para Actualizar Tabla" donde explicaba una situación algo penosa:

"Tengo una tabla donde se almacenará:
"No_Control" --->Se repite maximo 6 veces, pues esta ligado a cada materia para cada alumno.

"Materias" ------>Representa las materias de un semestre (Estas, identificadas a su vez por una Especialidad. y son cursadas por un mismo Alumno.[No_Control])

"Periodo1"-------> Almacenará las califiaciones de cada materia de un alumno a cierto tiempo (1ra EVALUACION)

"Periodo2" "-------> Almacenará las califiaciones de cada materia de un alumno a cierto tiempo (2da EVALUACION)

"Periodo3". "-------> Almacenará las califiaciones de cada materia de un alumno a cierto tiempo (3ra EVALUACION)

Ejecuto una consulta donde me devuelva, en un DBGrid:

No_Control, Materia y Periodo1 (Para capturar calificaciones del periodo1)

ahora, requiero hacer un Update a cada calificacion en el periodo1
pero no se si sea más benéfico emplear unos Edit donde capture la calificacion para cada materia, convertirlos a entero y en OnExit del Edit que se realice el Update, o bien:
---->De algun modo, cambiar el DataSource o el DataSet de la columna (Campo) Periodo1 a la tabla, la cual esté filtrada de acuerdo al ´No_Control y las Materias y el Periodo1, o bien al primero y al tercero, para poder escribir sobre dicha Columna del Grid (COSAS QUE NO SE HACER, NO SE HACER NI UN FILTRO EN UNA TABLA:confused: :confused: )

----->O bien FILTRAR de la tabla el campo Periodo 1 , para el No_Control requerido, colocarlo en un DBGrid, junto con el otro y que en este se capture el registro de cada materia para cada tabla.....

No se si haya quedado, al menos poco claro......
Agradezco a todos la ayuda que me proporcionen....

Lepe 23-05-2006 19:45:03

Filtrar una tabla es tan fácil como:

Código Delphi [-]
  tabla1.filter := 'No_control = 12245'; //suponiendo que el campo no_control es un número entero
  tabla1.fileter := 'no_control = ' + quotedStr('12245'); // suponiendo que el campo no_control es un String
  tabla.filtered := true;

Con un grid ligado a esa tabla, ya tienes el filtro; pero un filtro, además de costoso para el sistema, es poco flexible y tarde o temprano necesitarás algo más potente.

Puedes usar un TQuery:
Código Delphi [-]
var periodoElegido:String;
begin
if VerPeriodo1 then
  PeriodoElegido := 'Periodo1'
else if VerPeriodo2 then
 PeriodoElegido := 'Periodo2'
else 
 PeriodoElegido := 'Periodo1, Periodo2, Periodo3';

  query1.sql.text := 'select no_control, materia, ' + periodoElegido+
                           ' from calificaciones where '+
                           ' no_control = : prControl';
 query1.ParambyName('prControl').AsString := '232354'; // Segun el campo, usa AsString, AsInteger etc.

 query1.RequestLive := true; // permite que se actualicen los datos de la consulta
 Query1.Open;
 Dbgrid1.Columns.RebuildColumns; // hace que se actualicen las columnas del grid
 Dbgrid1.Colums[0].ReadOnly := true; // no dejamos que modifique el no_control
 Dbgrid1.Colums[1].ReadOnly := true; // tampoco la materia ;)
end;
El Query lo tienes asociado al DBGrid1 y puedes modificar los datos directamente sobre ese grid.

Saludos

anghell77 24-05-2006 06:19:38

Estoy en Pruebas...
 
Muchas gracias por enseñarme a filtrar tablas....Lepe...

En estos momentos estoy probando el codigo que me diste....
Pronto veremos si he logrado hacerlo correctamente...nuevamente Gracias

anghell77 24-05-2006 06:54:05

Estuvo de Maravilla
 
Lepe, muchas gracias....

Ha resultado todo bien....
Creo que me ha sido difícil explicar la situación, pero afortunadamente creo pudiste descifrar la maraña de cosas que había escrito....

Ahora sólo, tengo que buscar como no sobrepase la última línea del DBGrid, ya que aunque no actualiza ningún número de control (no_Control), si introduce los datos que se capturen....

Muchas Gracias Lepe...

Lepe 24-05-2006 08:48:12

Para la consulta query1, en el evento OnNewRecord, escribes: TTable(Sender).Cancel

Así cancelarás de forma automática cualquier inserción que se haga desde el Grid.

Saludos

anghell77 24-05-2006 09:06:42

Algún error he de tener...
 
Hola Lepe....

Fijate, que he empleado el codigo que me das, pero me dice que no identifica el Sender: "Undeclared Identifier Sender".

Como has visto no soy muy bueno empleando los controles de los elementos..:( . Para implementar el código que anteriormente me habías dado (donde se permite capturar sobre una columna), lo hice en una nueva aplicación para probar. En ésta sólo puse el Query, su DataSource y el DBGrid, más otros elementos que me definan el periodo elegido y un Edit para capturar el No_Control....Me olvidé de algo??....creo sí, por el hecho de que haces referencia a un TTable.

Luego, añadí un componente TTable con el código de filtrado que me proporcionaste por aquello de que fuera indispensable, pero me sigue marcando el error.... que puedo hacer??

Gracias por la ayuda

Lepe 24-05-2006 13:36:22

Inicialmente pensé en la consulta Query1, pero despues en el código puse directamente TTable, hechos que son inconsistencias :(

En el evento OnNewRecord del Query1 puedes poner Query1.Cancel que básicamente era mi propósito, cancelar la creación de un nuevo Registro desde esa Query.

Saludos y perdona las molestias.

anghell77 24-05-2006 21:10:39

Enorme Agradecimiento
 
Por el Contrario, Lepe, disculpa las molestias que yo pueda causar por aquellas situaciones de saber poco...:(

Tu ayuda ha sido grandiosa, ya todo está resuelto.....

Muchas Gracias....

Saludos...

Lepe 25-05-2006 09:57:10

Todos hemos pasado por esa etapa ;)

Un libro casi obligatorio es La cara oculta de delphi 4 que se puede descargar desde la página de su creador; sin duda te "abrirá los ojos" ;)

Saludos


La franja horaria es GMT +2. Ahora son las 15:35: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