Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Actualizar tabla (https://www.clubdelphi.com/foros/showthread.php?t=42923)

Alejandrina 26-04-2007 00:29:50

Actualizar tabla
 
Hola a todos,
Tengo el siguiente problema y es que necesito actualizar los datos en una tbl pero el procedimiento que tengo solo lo hace con el primer registro, que error tengo?

Código:

DmProcedimientos.QTerminarSolicitudes.params[0].assmallint := strtoint(DBENumeroSolicitud.text);;
      DmProcedimientos.QTerminarSolicitudes.Close;
      DmProcedimientos.QTerminarSolicitudes.open;
      while not DmProcedimientos.QTerminarSolicitudes.eof do
        begin
          DmSip.TblSolicituDiarios.edit;
          Dmsip.TblSolicituDiarios['HORATERMINACION']:=horaFinSolicitud;
          Dmsip.TblSolicituDiarios['ESTADO']:=estado;
          Dmsip.TblSolicituDiarios['DESCRIPACT']:=descripAct;
          DmSip.TblSolicituDiarios.post;
          DmProcedimientos.QTerminarSolicitudes.next;
        end;

:) Gracias por la ayuda que me puedan brindar:)

basti 26-04-2007 00:45:30

El problema está en que estás recorriendo un DataSet y actualizando en otro.
Puedes explicar lo que es QTerminarSolicitudes y TblSolicituDiarios para ayudarte mejor, sobre todo si están relacionados de alguna manera.

Lepe 26-04-2007 13:16:59

Ese bucle que haces es muy costoso, es más rápido una consulta de este tipo:
Código SQL [-]
update solicituDiarios
set HORATERMINACION = :horaFinSolicitud,
    ESTADO = :estado;
    DESCRIPACT' = :descripAct
where NumeroSolicitud = :numero;

Código Delphi [-]
query1.sql.text := todo el texto anterior;
query1.parambyname('horaFinSolicitud').AsDatetime := datetimepicker1.date;
query1.parambyname('estado').AsXXXX := lo que sea
query1.parambyname('descripAct').AsXXXX := lo que sea;
query1.parambyname('numero').AsInteger := strtoint(dbenumero.text);
query1.ExecSql;
con eso actualizarás todos los registros de la tabla solicitudDiarios.

Busca un manual de Sql si tienes ansiedad ;) :cool:

Alejandrina 09-06-2007 01:22:54

Siempre graba en el mismo registro
 
Hola, aun tengo problemas con guardar en tablas :confused:
Lo que pasa es lo siguiente:
Pretendo que cuando un elemento es seleccionado de un DBLookupComboBox este se grabe en la TblEnsamble y visualice los datos de este dato en un TDBGrid, asi que hago lo siguiente

Código:

procedure TFrmOrdenProceso.DBLOrdenCloseUp(Sender: TObject);
begin
  DmSip1.TblEnsamble.edit;
  DmSip1.TblEnsamble['DOCENSAMBLE']:=DBEDocumentoE.Text;
  DmSip1.TblEnsamble['DOCORDEN']:=DBLOrden.Text;
  DmSip1.TblEnsamble.Post;
end;

asi para guardar la relacion en la TblEnsable, pero cuando reviso la tabla siempre hay un solo registro, y fuera de esto no me esta mostrando los datos en el TDBGrid.
Espero haberme explicado bien al igual que espero que me puedan colaborar, de ante mano muchas gracias:p

Lepe 09-06-2007 12:35:16

Yo no usaría el evento CloseUp, ya que el usuario puede equivocarse con facilidad y grabar más registros de los que realmente quiere. Pondría un botón guardar.

Es lógico que solo guarde 1 registro, porque haces un TblEnsamble.edit, es decir, Editar el registro actual de la tabla Ensamble. Tendrás que hacer un TBlEnsamble.Insert o Append para añadir un registro nuevo al presionar el botón que dije al principio.

Para que el Grid muestre los datos, debes hacer una relación Maestro-detalle. Hay varias formas de hacerlo. Busca en el foro y si tienes dudas las comentas.

Saludos

Alejandrina 13-06-2007 15:51:06

Visualización de los datos
 
Hola,
Lepe tenias toda la razón cambie el edit por el insert :o y ahora guarda todos los datos pero tambien hice la relación maestro-detalle pero el TDBGrid solo me muestra un registro (el segundo dato que ingreso no inserta en el TDBGrid los datos que se ingresan). Que puedo mirar para que este TDBGrid muestre cada uno de los datos que el usuario esta ingresando? (El DataSource del TDBGrid es una vista esto influye en algo?).
Y pues la parte del control de registros a grabar la pensaba manejar con un TDBNavigator, la idea es que visualice los datos y si alguno no va lo quita.

Alejandrina 13-06-2007 17:50:35

Bueno ya revise de nuevo y efectivamente hice la relacion del cod de la vista con el cod de la otra tabla, pero aun asi sigue sin mostrarme los datos, y pues no estoy usando commit...¿que mas podra ser?

Muchas gracias por tu ayuda

Lepe 13-06-2007 17:50:36

Lo primero es asegurarse que los registros que se dan de alta, forma parte de la relación Maestro-Detalle. En dicha relación siempre hay un campo en común en el Maestro y Detalle. Si olvidas asignar ese campo en el detalle, el registro no formará parte de la Relación y nunca aparecerá en pantalla (aunque puede estar en la tabla guardado en la tabla detalles).

Otra cosa que puede estar fallando es el tipo de transacción que hagas, ya que usas vistas, me parece un motor cliente/servidor, y si aquí usas Commit, los cambios no se reflejan hasta cerrar la consulta y volverla a abrir.

Saludos.


La franja horaria es GMT +2. Ahora son las 22:58:02.

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