Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   guardar datos correctamente con un ClientDataSet. (https://www.clubdelphi.com/foros/showthread.php?t=75159)

novato_erick 02-08-2011 19:28:23

guardar datos correctamente con un ClientDataSet.
 
Hola como siempre ante mano la ayuda que me facilitan aquí los programadores avanzados en Delphi.

Tengo Este codigo:
Código Delphi [-]
 
if ventana = 'Clientes' then
  begin
    if FrmCliente = nil then
    begin
      FrmCliente := TfrmCliente.create(FrmCliente);
      FrmCliente.Parent := FrmPrincipal.Panel4;
      FrmCliente.Caption := 'Clientes';
      FrmCliente.Show;
      FrmPrincipal.TabSet1.Tabs.add(FrmCliente.Caption);
      FrmPrincipal.TabSet1.TabIndex := FrmPrincipal.TabSet1.Tabs.Count - 1;
      dmacceso.cdsClientes.Active := True;
      dmacceso.cdsClientes.Edit;
      dmacceso.cdsClientes.ClearFields;

    end
  
  end;

sucede que cuando llamo al formulario por primera vez e ingreso un dato del cliente lo que hace es eliminarme el primer registro. sin embargo si cierro el frmCliente y lo vuelvo abrir ya no me elimina el registro. porque sucede alguna idea o consejo?

Saludos a todos

Caral 02-08-2011 19:34:19

Hola
A ver asi:
Código Delphi [-]
if ventana = 'Clientes' then
  begin
    if FrmCliente = nil then
    begin
      FrmCliente := TfrmCliente.create(FrmCliente);
      Try
      FrmCliente.Parent := FrmPrincipal.Panel4;
      FrmCliente.Caption := 'Clientes';
      FrmCliente.Show;
      finally
      FrmPrincipal.TabSet1.Tabs.add(FrmCliente.Caption);
      FrmPrincipal.TabSet1.TabIndex := FrmPrincipal.TabSet1.Tabs.Count - 1;
      dmacceso.cdsClientes.Active := True;
      dmacceso.cdsClientes.Edit;
      dmacceso.cdsClientes.ClearFields;
      end;
    end
  
  end;
Saludos

maeyanes 02-08-2011 19:37:57

Hola...

Si lo que quieres es eliminar un registro, el método ClearFields no creo que sea el más indicado.

Código Delphi [-]
dmAcceso.cdsClientes.Active.True;
dmAcceso.cdsClientes.Delete;


Saludos...

novato_erick 02-08-2011 19:45:54

No para nada quiero eliminar registro el frmCliente lo que hace es agregar clientes, pero lo extraño es que me elimina el primer registro de mi BD ahora me elimina el ultimo si no lo cierro.

cual es la manera correcta de llamar al clientDataSet a la hora de llamar un formulario para que se ponga en el modo de insertar pero que al cerrarlo y al volverlo a llamar no me mande error respecto a un campo requerido se encuentra vacio...


Saludos

maeyanes 02-08-2011 19:49:30

Hola...

Para insertar un nuevo registro, usas el método Insert. Una vez termines de agregar la información del cliente, al momento de aceptar los cambios (click en algún botón Aceptar o Guardar), solo llamas el método Post del ClientDataSet. Si se cancela la edición, solo tienes que llamar al método Cancel.


Saludos...

novato_erick 02-08-2011 19:51:58

Para ser mas claro:

mi procedimiento creado para llamar al formulario Cliente:

Código Delphi [-]
procedure TFrmPrincipal.AgregarExecute(Sender: TObject);
begin
 utiles.MuestraVentana('Clientes','Normal');
end;

luego abre mi formulario en un panel con una pestaña y su debido caption

Código Delphi [-]
procedure MuestraVentana(ventana: string; modo: string);

begin
if ventana = 'Clientes' then
  begin
    if FrmCliente = nil then
    begin
      FrmCliente := TfrmCliente.create(FrmCliente);
      Try
      FrmCliente.Parent := FrmPrincipal.Panel4;
      FrmCliente.Caption := 'Clientes';
      FrmCliente.Show;
      finally
      FrmPrincipal.TabSet1.Tabs.add(FrmCliente.Caption);
      FrmPrincipal.TabSet1.TabIndex := FrmPrincipal.TabSet1.Tabs.Count - 1;
      dmacceso.cdsClientes.Active := True;
      dmacceso.cdsClientes.Edit;
      dmacceso.cdsClientes.ClearFields;
      end;
    end

end;

ahora quiero guardar el registro del cliente

Código Delphi [-]
procedure TfrmCliente.btnGuardarClick(Sender: TObject);
begin
  dmAcceso.cdsClientesPais.Value := cbexPais.text;
  dmAcceso.cdsClientes.ApplyUpdates(0);
  dmAcceso.cdsClientes.Append;
  cbexpais.Text := 'Otro';

  if Application.MessageBox('¿Desea Agregar Otro?', '',
  MB_ICONQUESTION OR MB_YESNO ) = ID_NO then
  begin
    frmcliente.close;
  end;

end;

es correcto lo que hago creo que algo pasa porque me elimina como dije el primer registro si lo abro y si sigo agregando registro me borra es el último. y no quiero eso...


Saludos;

Caral 02-08-2011 19:52:13

Hola
Código Delphi [-]
if ventana = 'Clientes' then
  begin
    if FrmCliente = nil then
    begin
      FrmCliente := TfrmCliente.create(FrmCliente);
      Try
      FrmCliente.Parent := FrmPrincipal.Panel4;
      FrmCliente.Caption := 'Clientes';
      dmacceso.cdsClientes.Active := True;
      dmacceso.cdsClientes.Last;
      dmacceso.cdsClientes.Insert;
      FrmCliente.Show;
      finally
      If FrmCliente.Caption <> ' ' then
      Begin
      FrmPrincipal.TabSet1.Tabs.add(FrmCliente.Caption);
      FrmPrincipal.TabSet1.TabIndex := FrmPrincipal.TabSet1.Tabs.Count - 1;
      end;
      end;
    end
  
  end;
Saludos

maeyanes 02-08-2011 20:00:57

Hola...

¿Y por que llamas al método Edit y luego limpias los campos del registro? ¿Qué finalidad tiene ese código?

La secuencia lógica para agregar registros sería:

Código Delphi [-]
// Creamos y mostramos el formulario

// Se agrega un nuevo registro en el DataSet:
dmAcceso.cdsClientes.Insert;

// Se presiona el botón Guardar o Aceptar
dmAcceso.cdsClientes.Post;

// Se pregunta si se quiere agregar otro, si es si, otra vez hacemos otro insert:
dmAcceso.cdsClientes.Insert;

// Al cerrar el formulario puedes llamar un ApplyUpdates:
dmAcceso.cdsClientes.ApplyUpdates(0);


Saludos...

Caral 02-08-2011 20:05:53

Hola
Código Delphi [-]
if ventana = 'Clientes' then
  begin
    if FrmCliente = nil then
    begin
      FrmCliente := TfrmCliente.create(FrmCliente);
      Try
      FrmCliente.Parent := FrmPrincipal.Panel4;
      FrmCliente.Caption := 'Clientes';
      dmacceso.cdsClientes.Active := True;
      dmacceso.cdsClientes.Last;
      dmacceso.cdsClientes.Insert;
      FrmCliente.Show;
      finally
      If FrmCliente.Caption <> ' ' then
      Begin
      FrmPrincipal.TabSet1.Tabs.add(FrmCliente.Caption);
      FrmPrincipal.TabSet1.TabIndex := FrmPrincipal.TabSet1.Tabs.Count - 1;
      end;
      end;
    end
  
  end;


Código Delphi [-]
procedure TfrmCliente.btnGuardarClick(Sender: TObject);
begin
  dmAcceso.cdsClientesPais.Value := cbexPais.text;
  dmAcceso.cdsClientes.Post;
  cbexpais.Text := 'Otro';

  if Application.MessageBox('¿Desea Agregar Otro?', '',
  MB_ICONQUESTION OR MB_YESNO ) = ID_NO then
  begin
    frmcliente.close;
  end
  else
  Begin
  dmacceso.cdsClientes.Active := False; 
  dmacceso.cdsClientes.Active := True;
  dmacceso.cdsClientes.Last;
  dmacceso.cdsClientes.Insert;
  end;
end;
Saludos

novato_erick 02-08-2011 20:23:44

gracias caral sin embargo al realizar el procedimiento de guardar no me agregaba el registro a mi db.

Código Delphi [-]
procedure TfrmCliente.btnGuardarClick(Sender: TObject);
begin
  dmAcceso.cdsClientesPais.Value := cbexPais.text;
  dmAcceso.cdsClientes.Post;
  dmAcceso.cdsClientes.ApplyUpdates(0);// aqui fue donde hice el cambio
  cbexpais.Text := 'Otro';

  if Application.MessageBox('¿Desea Agregar Otro?', '',
  MB_ICONQUESTION OR MB_YESNO ) = ID_NO then
  begin
    frmcliente.close;
  end
  else
  Begin
  dmacceso.cdsClientes.Active := False; 
  dmacceso.cdsClientes.Active := True;
  dmacceso.cdsClientes.Last;
  dmacceso.cdsClientes.Insert;
  end;
end

Si cometo otro error corregime, sin embargo despues de hacer ese cambio si me guarda el registro.

Saludos.

Caral 02-08-2011 20:26:02

Hola
Me alegro que lo hicieras solo, de eso se trata, solo podemos dar ejemplos, no soluciones ya que no estamos sentados frente a tu ordenador.
Saludos

novato_erick 02-08-2011 20:28:23

maeyanes y Caral

Si agradezco mucho su ayuda, llego a comprender un poco mas como se puede manejar la lógica... muchas gracias por todo...

Saludos;

Jasan_Records 04-03-2016 16:14:00

Hola chicos!!! Paso a comentar, tengo un clientdateset, al cual le voy a agregando registros, mi consulta es, como deberia hacer para que guarde todos esos registros de una sola vez en db? ojala puedan ayudar. gracias

novato_erick 04-03-2016 16:32:13

Hola Jasan_Records:

utilizando
Código Delphi [-]
 ClientDataSet.ApplyUpdates(-1);

solamente al llamar el formulario está en modo insert, edit el ClientDataSet?

en cualquier estado antes mencionado te debe de servir ApplyUpdates pero verifica primero si no te enviará error.


Saludos

novato_erick


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

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