Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2017
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Al Editar un Registro me lo duplica

Buenas, estoy tratando de editar un registro y lo que hace es que se me duplica
Base de datos MySQL
Componentes ttable MyDac

Código Delphi [-]
procedure editarcliente (clcod,clcnombre,clcrif,clcdireccion,clctelefono,clctelefono2,clccelular,clccontacto,clcciudad,clces  tado,clccorreo,clcobservaciones,clcagret:string; clcporc:Currency);
begin
with datos.tclientes do
    begin
      Close;
      Active:=False;
      Active:=True;
      Open;
      Edit;
      Append;
        FieldByname('cl_codigo').AsString := clcod;
        FieldByname('cl_descripcion').AsString := clcnombre;
        FieldByname('cl_identificacion').AsString := clcrif;
        FieldByname('cl_direccion').AsString := clcdireccion;
        FieldByname('cl_contacto').AsString := clccontacto;
        FieldByname('cl_telefono').AsString := clctelefono;
        FieldByname('cl_telefono2').AsString := clctelefono2;
        FieldByname('cl_celular').AsString := clccelular;
        FieldByname('cl_ciudad').AsString := clcciudad;
        FieldByname('cl_estado').AsString := clcestado;
        FieldByname('cl_correo').AsString := clccorreo;
        FieldByname('cl_agenteretiva').AsString := clcagret;
        FieldByname('cl_porcentajeret').AsCurrency := clcporc;
        FieldByname('cl_observaciones').AsString := clcobservaciones;

      Post;
      Close;
      Active:=False;
      MessageDlg('El Cliente Fue Modificado Exitosamente', mtCustom, [mbOK], 0);
    end;

end;
Responder Con Cita
  #2  
Antiguo 12-01-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Quita el append
Responder Con Cita
  #3  
Antiguo 12-01-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Te sobran cosas en esa lista además de lo que comenta Casimiro:

Código Delphi [-]
Open;
Append;
=> Rellenar campos....
Post;
Close;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 12-01-2017
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
le quito el append y no modifica
aqui la tabla

Código SQL [-]
CREATE TABLE `csclientes` (
  `cl_id` int(6) NOT NULL AUTO_INCREMENT,
  `cl_codigo` varchar(24) COLLATE utf8_bin NOT NULL,
  `cl_descripcion` varchar(160) COLLATE utf8_bin NOT NULL,
  `cl_identificacion` varchar(24) COLLATE utf8_bin NOT NULL,
  `cl_direccion` varchar(160) COLLATE utf8_bin NOT NULL,
  `cl_contacto` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `cl_telefono` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `cl_telefono2` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `cl_celular` varchar(11) COLLATE utf8_bin DEFAULT NULL,
  `cl_ciudad` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `cl_estado` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `cl_correo` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `cl_agenteretiva` enum('true','false') COLLATE utf8_bin DEFAULT 'false',
  `cl_porcentajeret` double(5,2) DEFAULT '0.00',
  `cl_observaciones` text COLLATE utf8_bin,
  PRIMARY KEY (`cl_id`,`cl_codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=2149 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='TABLA PARA LLEVAR EL REGISTRO DE CLIENTES';
Responder Con Cita
  #5  
Antiguo 12-01-2017
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Al editarlo me siguen apareciendo dos registros en el grid aunque en la base de datos me aparece solo 1 y solo desaparece al editar otro

Última edición por webmasterplc fecha: 12-01-2017 a las 12:48:56.
Responder Con Cita
  #6  
Antiguo 12-01-2017
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
aqui les adjunto la imagen
Imágenes Adjuntas
Tipo de Archivo: jpg ERROR2.jpg (18,9 KB, 10 visitas)
Responder Con Cita
  #7  
Antiguo 12-01-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Código Delphi [-]
  // estas dos lineas son equivalentes  (fijate que al final del codigo tambien repetis esto)
  Close;
  Active:=False;
   
  // estas dos lineas son equivalentes  
  Active:=True;
  Open;

Cuidado con cerrar la tabla antes de editar; al llamar a open nuevamente nada te garantiza que estas en la posicion del DataSet que estabas antes. Por lo general yo esperaria que un llamado a Open (o Active := True, en definitiva, Open hace Active := True) me posicione el DataSet en el primer registro

Luego al realizar el Post lo que deberias hacer es cerrar y abrir la tabla para refrescar el Grid, o bien, si estabas usando un Query, volver a ejecutarlo para ver los datos cambiados
Responder Con Cita
  #8  
Antiguo 12-01-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para editar un registro, primero tienes que posicionarte en el mismo.
Responder Con Cita
  #9  
Antiguo 12-01-2017
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Para editar un registro, primero tienes que posicionarte en el mismo.
Como hacer para posicionarse
Responder Con Cita
  #10  
Antiguo 13-01-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hay varias formas. Programaticamente usando metodos como Prior o Next dentro de un bucle y verificando las condiciones para ver si llegaste al registro que te interesa

Tambien tenes los metodos Locate y Lookup en los que uno especifica la condicion que quiere que los campos cumplan y el DataSet se encarga de realizar la busqueda sobre si mismo, y posicionarse en el primer registro que satisface la condicion

Otra forma es usando los controles visuales, de este modo el DataSet se sincroniza automaticamente con el componente (ej. DBGrid).

Como vos estabas cerrando y abriendo el DataSet el registro actual cuando hacias el Edit es el primero y no el que el usuario habia seleccionado

Aca hay documentacion sobre como modificar datos de un DataSet
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Duplica registro en ClientDataSet maestro-detalle Josepo Conexión con bases de datos 8 07-05-2013 11:59:09
editar campo autoincremento al editar registro anterior chartres Conexión con bases de datos 1 21-05-2011 02:37:25
Update duplica registro FerCastro SQL 22 28-10-2008 20:21:05
error al editar un registro look OOP 3 18-10-2007 01:43:51
editar un registro jdattoli Conexión con bases de datos 1 08-02-2006 22:01:04


La franja horaria es GMT +2. Ahora son las 20:41:14.


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