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 25-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Como usar el evento OnDataChange

Que tal bueno disculpen la molestia de preguntar esto, pero es que me han dicho que utilice el evento OnDataChange del DataSource para detectar los cambios que se hacen en algunos edits que tengo, para posteriormente si se realizo algun cambio poder guardarlos, activando los botones de guardar, cancelar etc etc.

mas que nada es para hacer que se activen ciertos botones y que se inhabiliten otros para poder hacer la modificacion si asi se require, pero no tengo idea de como o que escribir en el evento OnDataChance del DataSource.

la idea es que desde un DBGrid al darle doble click se carguen datos en todos los edits que anteriormente hice la insercion, osea que se carguen en el mismo TEdit de donde hice la insercion, esto esta bien , no tengo problemas con esto el detalle es que una vez mostrados en los mismos TEdit, si el usuario hace algun cambio o borra, o agrega alguna letra en los TEdit, me gustaria que se habilitaran los botones Guardar Cambios y Cancelar etc ya que anteriormente estan como inhabilitados, pero no entiendo o no se como hacer para que esto suceda desde el evento OnDataChange, no se que va ahi dentro, ya lo hice con un procedure en donde por medio de parametros me manda un parametro para decidir que hago, como por ejemplo este, pero es con el evento onkeypress de cada Tedit

//Estos son en los eventos OnKeyPress de los Tedit Nombre y el ComboBox
Cita:
procedure TfrmAltaServicio.edtNombreKeyPress(Sender: TObject;
var Key: Char);
begin
EventoOnChange(1);
end;
Cita:
procedure TfrmAltaServicio.ComboBoxServicioCategoriaIDClick(Sender: TObject);
begin
EventoOnChange(1);
end;

//Y dependiendo el parametro que yo envie eso se hara, el principio cuando inicio la forma, todos los botones estan desabilitados con la opcion '2' pero ya con los cambios en los eventos OnKeyPress mando el parametro 1, para que habilite los botones de Aceptar, Cancelar y que inhabilite el boton de Cerrar, por esto no hay problema pero queiro hacer algo asi en el Evento OnDataChange que me dijeron debo usar en el trabajo :S

Cita:
procedure TfrmAltaServicio.EventoOnChange(var1:Integer);
begin
case var1 of
1 : begin
btnAceptar.Enabled:= True;
//btnBorrar.Enabled:= True;
btnCancelar.Enabled:= True;
btnCerrar.Enabled:= False;
end;
2 : begin
btnAceptar.Enabled:= False;
btnBorrar.Enabled:= False;
btnCancelar.Enabled:= False;
btnCerrar.Enabled:= True;
end;
end
end;

Espero puedan darme algunos consejos o decirme como usarlo, si es posible codigo para darme una mejor idea, ya que yo lo hago de esta manera, haciendo un evento, pero quiero poder hacerlo desde el propio evento OnDataChange como menciono, de antemano gracias
Responder Con Cita
  #2  
Antiguo 26-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tal y como indica su nombre, el evento se activa cada vez que hay un cambio en el dataset asociado (cambias cualquier campo del registro) o cuando se cambia de un registro a otro.
Te aconsejo que en lugar de usar TEdit uses TDBedit, cada uno asociado a un campo, de estas manera el proceso de detectar algún cambio será automático. Prueba a poner un TDBnavigator y verás que puedes aceptar cambios, cancelar, etc. los cambios que hagas en cualquier campo.
Responder Con Cita
  #3  
Antiguo 26-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ok pero como relaciono ese evento con los los TBEdits, osea los agrego dentro del evento o que hago, por que no entiendo como hacerle para que los detecte, etc, o solo relacionandolos me los reconoceria?
Responder Con Cita
  #4  
Antiguo 26-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No tienes que hacer nada.
Realmente, mi pregunta es: ¿tú qué quiéres hacer?
Responder Con Cita
  #5  
Antiguo 26-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
lo que quiero, es que sea en Tedit y no en DBTedit, que al modificar un dato que lo traigo desde un DBGrid, que al cargar los datos el usuario los podra consultar, pero si quiere hacer un cambio en todos los Tedit que le muestro con informacion, que al cambiar algo de lo de adentro, ya por medio del evento OnDataChange que se activen ciertos botones, en un principio los botones estaran inhabilitados, una vez que se muestren los datos dentro de los Tedits, si el usuari ocambia algo, que se habiliten ciertos botones en mi caso seria, Guardar, Cancelar, mientras que Cerrar estara inhabilitado, es por ello que quiero que esos cambios en los Tedit me determinen que boton deben de activarse, pero no se como hacer esto, esto me ayudaria por ejemplo para agilizar mi codigo y no repetirlo para determinar botones de altas, bajas y modificacion, ya que con este evento si los datos son traidos desde un DBGrid podre habilitar ciertos botones, pero si es una primera insercion sera otros botones, etc no se si me entiendas por eso quiero saber como funcionaria con Tedits y con DataSource
Responder Con Cita
  #6  
Antiguo 26-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues entonces no entiendo por qué quieres usar TEdit, con los TDBedit todo ese proceso que mencionas se hace automáticamente, no tienes que hacer nada.
De la forma que quieres hacerlo tú tendrías que estar copiando todos los valores de todos los campos del registro activo a tus TEdit, y cuando modifiques cualquiera de ellos tendrías que volver a modificar los campos del registro, o sea, es un poco lioso, engorroso y propicio a fallos, olvidos, etc.
Responder Con Cita
  #7  
Antiguo 26-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
:S:S:S lo que pasa es que soy nuevo en Delphi, bueno relativamente, apenas llevo 2 meses y contando, y estoy a prueba y error, y la unica forma que miraba y conocia era esa, lo que si trate es que no puedo editar los DBEdit, ya que por su propiedad Datafield agrego al campo al que este asignado, y si lo muestra y todo pero no se, no me permite editarlo, no se si hay que poner algo en modo de edicion o que hacer, para permitir escribir y habilitar el boton de Guardar para que guarde todos los datos.
Responder Con Cita
  #8  
Antiguo 26-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Si es posible que alguien me pueda mostrar una parte de como usan el evento OnDataChange del DataSource, para darme una idea ya que veo que no me entienden, espero me puedan ayudar con esto, que no es nad complicado pero que si me permitiria ahorrar codigo y mantener la idea que tengo ya que me pidieron usara ese evento, el cual como les decia no se como utilizarlo con Tedits, para que disparara ciertos procedimientos que quiero llevar acabo, com olo es el habilitar ciertos botones que yo tenga, etc etc, gracias
Responder Con Cita
  #9  
Antiguo 26-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que no has informado de qué base de datos estás usando, qué componentes, etc.
Responder Con Cita
  #10  
Antiguo 28-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Componentes ADO para la conexion a BD, Base de Datos SQLServer.

y me explico mas detenidamente. paso por paso a ver si me entienden lo que quiero hacer, y como usar ese evento el OnDataChange en el DataSource.

Tendria 5 Botones: Nuevo, Guardar, GuardarModificacion, Limpiar, Cancelar y Cerrar.

1.- Capturo 2 campos de una tabla, Nombre y Apellido desde 2 Tedit respectivamente, con un boton de Nuevo.(Aqui solo el boton de GuardarModificacion esta inhabilitado, todos los demas estan Habilitados), cuando termine en el boton, Guardar, al terminar el registro se inhabilitaran todos los botones, menos el de Nuevo

1.- (Mientras consulta en el Grid los botones estan desabilitados) Desde un DBGrid en donde muestran todos los usuarios, con sus campos, Nombre y Apellido, selecciono uno dando doble click, permitiendo que la informacion se regrese a los TEdits en donde fue capturado. ya una vez mostrada la informacion de la persona seleccionada, si el usuario borra, edita cualquier registro que fue mostrado como el Nombre o Apellido, quiero que se activen los botones, GuardarModificacion, Cancelar, y que se inhabiliten Nuevo, Close, Limpiar y Guardar.

Esta es mi idea, es mi principal idea para que funcione el evento OnDataChange, activando botones como mencione anteriormente segun sea el caso, el cual sera activado cuando exista una modificacion en los registros que se muestran el los TEdit, espero que ahora si me entiendan, por que no se como o que poner de codigo en el OnDataChange y como repetia, no uso los DBEdits, ya que mi proyecto lo llevo algo avanzado y me pidieron que para ahorrar dolores de cabeza y codigo habilitara ese Evento del DataSource, pero como repito, si me pudieran dar un ejemplo que seguro alguien ya tiene algo parecido, para darme una idea, por que no se ni como llevarlo acabo
Responder Con Cita
  #11  
Antiguo 29-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ya que veo que no me entienden o que no me pueden ayudar :S:S:S solo pregunto ya una vez comprendido como funciona el OnDataChange, pregunto cuales son los estados que puede adoptar el OnDataChange,

dsInsert es uno,
dsBrowse es otro me parece,

y me gustaria saber cuales mas existen por favor, no pido mas xDD solo eso, o diganme alguna referencia donde puedo leer sobre estos estados, espero me puedan ayudar por favor.
Responder Con Cita
  #12  
Antiguo 29-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si pulsas la tecla control y con el ratón haces click se enlazará al código de la declaración del mismo, ejemplo, lo verás como aquí abajo:

DS1.DataSet.State

Te llevará hasta aquí:

Código Delphi [-]
  TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
    dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
    dsInternalCalc, dsOpening);

También puedes pulsar F1 estando encima de la palabra 'State'

Última edición por Casimiro Notevi fecha: 29-03-2011 a las 01:32:40.
Responder Con Cita
  #13  
Antiguo 29-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
casimiro muchisimas gracias, enserio que se agradece la ayuda, andaba buscando por toda la web pero no encontraba nada, muchas gracias con eso creo que termino este tema ya que podre hacer lo que describia arriba, saludos y gracias de nuevo
Responder Con Cita
  #14  
Antiguo 29-03-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por ivantj24 Ver Mensaje
:S:S:S lo que pasa es que soy nuevo en Delphi, bueno relativamente, apenas llevo 2 meses y contando, y estoy a prueba y error, y la unica forma que miraba y conocia era esa, lo que si trate es que no puedo editar los DBEdit, ya que por su propiedad Datafield agrego al campo al que este asignado, y si lo muestra y todo pero no se, no me permite editarlo, no se si hay que poner algo en modo de edicion o que hacer, para permitir escribir y habilitar el boton de Guardar para que guarde todos los datos.
Para poder editar los DBEdit debes de poner al DataSet en cuestion, en modo de edicion: por ejemplo:
Código Delphi [-]
DBEdit1.DataSource.DataSet.Edit;//Pongo el dataSet en modo de edicion
En tu boton Aceptar (boton que confirma el cambio o la edicion) deberias tener algo así:
Código Delphi [-]
DBEdit1.DataSource.DataSet.Post;//confirmo el cambio y guardo los registros cambiados..
Si lo deseas puedes utilizar un componente DBNavigator en lugar de tener botones como Aceptar,editar,insertar, eliminar,Cancelar,refrescar; ya que el componente DBNavigator ya posee tales botones, inclusive posee los botones de navegacion por los registros del DataSet, tales como Primero(va al primer registro), Anterior(se pocisiona en el anterior registro del que estamos actualmente), Siguiente(se pocisiona en el siguiente registro del que estamos actualmente) y Ultimo(Va al último registro), tal solo hay que enganchar nuestro componente DBNavigator con el DataSource específico.. Lo bueno de ésto es que el componente DBNavigator lo hace todo automáticamente y no necesitamos codificar nada..., inclusive se lo puede configurar para mostrar solo algunos botones...
Como puedes ver con delphi es muy sencillo...ya que posee componentes muy potentes y específico para aplicaciones de Bases de datos sin necesidad de complicarte demasiado..
Espero sea de utilidad...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 29-03-2011 a las 15:49:36.
Responder Con Cita
  #15  
Antiguo 29-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Disculpen de nuevo la molestia pero no me logra salir de esto, tuve que cambiar todos los TEdits por DBEdits para permitir percibir el cambio que en ello sse genere para que el DataSource pudiera realizar los cambios de estado en si, pero no me sale, lo que primero quiero hacer es:

como trabajo como ventanas MDI

1.- que al abrir una ventana, el DataSource de esa ventana se ponga en estado Edit o Inactivo, lo que sea, como me pasaron todos los estado y en ayudas tambien estan, intente poner esto,

Cita:
procedure TfrmPrincipal.AltadeEstacion1Click(Sender: TObject);
begin
Application.CreateForm(TfrmEstacion, frmEstacion);
frmEstacion.DataSourceEstacion.State:= dsInactive;
frmEstacion.Show;
end;
en esta linea en negrita que marco se que existe un error pero no me explico por que,
bueno esto es solo al querer poner en un estado el DataSource, mientras que en el DataSource en su evento OnDataChange para que me detecte los cambios pongo condiciones para que al percibir varios estados del DataSource vaya habilitando o no los botones

Cita:
procedure TfrmEstacion.DataSourceEstacionDataChange(Sender: TObject;
Field: TField);
begin
if DataSourceEstacion.State = dsInsert then
begin
btnAceptar1.Enabled:= True;
//Todos los botones que inhabilito y habilito
end
end;
Pero no entiendo como es posible darle un estado al DataSource desde fuera, ya que como les decia si uso
Cita:
DataSourceEstacion.State:= dsInsert;
no me permite hacerlo, o con cualquier otro estado, no lo puedo poner en ese modo de Edicion, asi que no lo puedo hacer, espero alguien me explique, ahora mismo estoy buscando por la web alguna solucion pero no he encontrado, espero me ayuden con esto, gracias
Responder Con Cita
  #16  
Antiguo 30-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tienes confundido los conceptos, fíjate en los ejemplos que ha puesto rgstuamigo.
Si quieres editar haces:
Código Delphi [-]
datasource.dataset.edit;
Si quieres insertar un registro:
Código Delphi [-]
datasource.dataset.append;
si quieres no hacer nada:
Código Delphi [-]
datasource.dataset.cancel;
El estado se pone automáticamente, no tienes que ponerlo tú.
Responder Con Cita
  #17  
Antiguo 30-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ah ok ok entendido muchas gracias por las molestias, solo una cosa, si no esta haciendose nada, al momento de crear la ventana el estado del DataSource supongo esta en Inactive, lo que puse fue

Cita:
procedure TfrmEstacion.DataSourceEstacionDataChange(Sender: TObject;
Field: TField);
begin
if DataSourceEstacion.State = dsInactive then
begin
btnAceptar1.Enabled:= True;
end
end;
y por default yo puse ese boton como Inactivo por lo que al poner el estado del DataSource en el evento Oncreate de la forma de est aforma

Cita:
DataSourceEstacion.DataSet.Cancel;
lo cual supongo no hace nada, o esta en inactivo el datasource y no se cumple mi condicion, la cual es poner el boton aceptar en habilitado, no se si estoy confundido o estoy equivocado, esto es para al momento de entrar, que algunos botones por default esten deshabilitados pero no se como poner el DataSource en modo Inactivo o cancel, muchas gracias
Responder Con Cita
  #18  
Antiguo 30-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Normalmente cuando no está "haciendo nada" está en dsBrowse
Responder Con Cita
  #19  
Antiguo 30-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ah ok ok probare ahora mismo muchisimas gracias :P
Responder Con Cita
  #20  
Antiguo 30-03-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
no se si sea mucha molestia, o exista algun documento en la web o algun archivo o lo que fuera de referencia para ententer que estado del DataSet se relacion con el estado del DataSource algo asi como lo que me acaba de pasar casimiro

Cita:
DataSourceEstacion.DataSet.Cancel; = dsBrowse
DataSourceEstacion.DataSet.Edit; = dsEdit
DataSourceEstacion.DataSet.Insert = dsInsert
pero no entiendo cual relacio habra con los demas estados del DataSource

Cita:
TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc, dsOpening);
estos que me pasaste con los del DataSet no se cual se relaciona con cual, si me podrias decir o mencionar de que documento los puedo ver para relacionarlos asi no molesto mas muchas gracias
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
que evento usar? eltioalex Varios 4 03-07-2010 03:53:58
¿Cómo usar las teclas F12 etc,y las teclas de dirección o flechas con el evento key? Master23 OOP 1 03-04-2010 17:08:50
Interceptar [Prior,Next] al evento OnDataChange geolife Conexión con bases de datos 4 23-03-2009 18:08:00
Usar Evento OnAfterSCroll de un TQuery? jorllazo Conexión con bases de datos 12 04-10-2006 05:56:48
Cómo desactivar el evento OnDataChange? carlosmari Varios 4 27-10-2003 19:43:00


La franja horaria es GMT +2. Ahora son las 09:51:02.


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