Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Validar celdas de un stringgrid (https://www.clubdelphi.com/foros/showthread.php?t=61067)

Elite237 27-10-2008 03:52:38

Hola caro, quitando el for...en mi update, si lo hago bien?osea se que me falta el where, pero aparte de eso quiero saber si estoy asignando correctamente los valores a los campos de mi BD.En caso de que este mal, me puedes decir donde esta mi error?
Código Delphi [-]
query1.sql.add('update tevaluacion set (eval_descripcion,eval_nivel,eval_ult_version,eval_ver_usada)');
   query1.sql.add('values(eval_descripcion,eval_nivel,eval_ult_version,eval_ver_usada)');
   query1.Params.ParamByName('eval_descripcion').asstring:=(sgEvaluacion.Cells[1,i]);
   query1.Params.ParamByName('eval_nivel').asstring:=(sgEvaluacion.Cells[2,i]);
   query1.Params.ParamByName('eval_ult_version').asstring:=(sgEvaluacion.Cells[3,i]);
   query1.Params.ParamByName('eval_ver_usada').asstring:=(sgEvaluacion.Cells[4,i]);

Caro 27-10-2008 04:05:20

Cita:

Empezado por Elite237 (Mensaje 322528)
........ pero aparte de eso quiero saber si estoy asignando correctamente los valores a los campos de mi BD.En caso de que este mal, me puedes decir donde esta mi error?


Debes cambiar el i por Row ya que con la propiedad Row del StringGrid obtienes la fila actual y no necesitas el ciclo for, ahora si quieres armar las columnas talvez, pero también puedes acceder directamente a las columnas de la fila actual, como te puse arriba.

Código Delphi [-]
query1.ParamByName('eval_descripcion').asstring:=sgEvaluacion.Cells[1,sgEvaluacion.Row];
query1.ParamByName('eval_nivel').asstring:=sgEvaluacion.Cells[2,sgEvaluacion.Row];
query1.ParamByName('eval_ult_version').asstring:=sgEvaluacion.Cells[3,sgEvaluacion.Row];
query1.ParamByName('eval_ver_usada').asstring:=sgEvaluacion.Cells[4,sgEvaluacion.Row];

Saluditos

Elite237 27-10-2008 04:09:04

Ok..Gracias Carito..lo hare como me dices mas adelante te digo como voy en mi desarrollo.Gracias por tu tiempo.

Delphius 27-10-2008 04:13:37

Elite237, disculpame pero no se de que modo decirte que la consulta SQL está mal hecha, una instrucción SQL de UPDATE no se escribe así.

Es así:

Código SQL [-]
UPDATE tu_tabla SET Campo1 = Parametro1, Campo2 = Parametro2, ..., CampoN = ParametroN WHERE ....

La verdad es que desde la mitad del hilo te estado llamando la atención al respecto del tema. No se de que modo hacerme entender.

Por el otro lado, siempre y cuando en esa variable "i" que tienes en tu código referencie a la fila en cuestión no veo problemas. Lo que si veo que está demás son esos paréntesis cuando haces el paso de los valores a los parámetros.

Como te mencionaba Caro, la consulta UPDATE debe ir con una cláusula de condición. Sin ella lo que consigues es cambiar EN TODOS LOS REGISTROS DE LA TABLA.
Por ello Caro habla de que debes tener de algún modo relacionado a la fila i-ésima con el código del registro al que representa. Es decir que debe haber alguna correspodencia entre las filas y el campo "identificador" en la tabla.

Por darte un ejemplo:
Fila 1 -> corresponde al registro cuyo ID es 100
Fila 2 -> corresponde al registro cuyo ID es 287

Generalmente este ID no cambia (no debería cambiar) y una manera sencilla para evitar que el usuario lo cambie, es que cuando vuelcas los datos al TStringGrid, a la columna 0 (esa columna gris y fija que no se puede modificar) la emplees para "mostrar" ese ID. De este modo en la celda [0,i] tenés "guardado" el ID y lo puedes emplear para ponerlo en la condición; por ejemplo algo asi:
Código SQL [-]
UPDATE tabla SET Campo = Parametro, ... , CampoN = ParametroN WHERE ID = PARAMETRO_ID

Saludos,

Elite237 27-10-2008 04:20:27

Hola Delphius, ya entendi..disculpa mi ignorancia. Ya capte tanto la idea, como la forma de hacer un update.Saludos

Elite237 29-10-2008 16:38:38

Código Delphi [-]

 type
  StringG = class (TStringGrid);
 
  .........................
  .........................
procedure TForm1.ButtonBorrarClick(Sender: TObject);
begin
  //En este caso te eliminara la fila actual del StringGrid
  StringG(StringGrid1).DeleteRow(StringGrid1.Row);
end;
Te acuerdas de esto que me dijiste,fijate que si aplica cuando tengo por ejemplo
5 filas, si me elimina 1, pero ayer introduje unos 20 registros en el stringgrid y al momento de borrar una fila, me borro todas y solo me dejo una fila.
Tu sabras el motivo? Este es el codigo que tengo en mi boton.:
Código Delphi [-]
procedure TForm1.BitBtnASEliminarClick(Sender: TObject);
begin
if MessageBox(Handle,'¿Esta seguro que desea eliminar los datos?',
   'Confirmar',MB_ICONWARNING or MB_YESNO) = IDYES then
  begin
   query2.close;
   query2.sql.clear;
   query2.sql.add('delete from det_evaluacion');
   query2.sql.add('where det_eval = '''+sgPreguntas.cells[0,sgPreguntas.row]+'''');
   try
    query2.execsql
   except
   end;
  StringG(sgPreguntas).DeleteRow(sgPreguntas.Row);
 application.MessageBox('Se eliminaron los datos correctamente','Mensaje de confirmación',mb_OK+mb_IconInformation);
 LlenarGridPreguntas(sender);
end;
end;


La franja horaria es GMT +2. Ahora son las 14:04:55.

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