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 02-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 02-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 02-08-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
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...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #4  
Antiguo 02-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 02-08-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
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...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #6  
Antiguo 02-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
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;
Responder Con Cita
  #7  
Antiguo 02-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 02-08-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
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...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #9  
Antiguo 02-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 02-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 02-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
__________________
Siempre Novato
Responder Con Cita
  #12  
Antiguo 02-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
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;
Responder Con Cita
  #13  
Antiguo 04-03-2016
Jasan_Records Jasan_Records is offline
Registrado
NULL
 
Registrado: ene 2015
Posts: 6
Poder: 0
Jasan_Records Va por buen camino
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
Responder Con Cita
  #14  
Antiguo 04-03-2016
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
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
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
Como guardar correctamente los datos..? verito_83mdq OOP 10 13-01-2011 17:04:58
ClientDataSet copiar datos jourdan Conexión con bases de datos 1 27-08-2010 20:52:14
Guardar correctamente un icono como ".ico" bosster_018 API de Windows 6 05-01-2010 16:03:48
Al guardar un clientDataSet en archivo no me mantiene los cambios David Conexión con bases de datos 1 12-08-2008 14:15:07
Filtrar datos con un ClientDataSet karocs Conexión con bases de datos 1 28-07-2004 20:31:29


La franja horaria es GMT +2. Ahora son las 02:06:13.


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