Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-05-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Ejecutar proceso segun valor de un DBRadioGroup

Buenas a todos.

A ver si me podeis aclarar un poco una duda que tengo de como posicionar un evento que se lanza desde un dbRadioGroup.

Al iniciar el formulario, con cada nuevo registro el DBRG coge el valor C (esta limitado a C y F).

Necesito hacer lo siguiente:
Al cambiar este valor a F, me debe mostrar un mensaje diciendome si quiero hacer un proceso.
Una vez guardado el proceso, si le vuelvo a poner valor C me debe avisar de si quiero hacer el proceso inverso.
No quiero que a cada cambio de registro o al cargar la tabla me salga el mensaje de si quiero realizar el cambio.

Donde es mejor que situe los eventos?, en el onchange del DBRG o en el del campo persistente?

Lo hecho hasata ahora pero no cumple mis expectativas:

Código Delphi [-]
procedure TF_Rebut.DBRadioGroup2Click(Sender: TObject);
begin
        if F_ModulDades.Rebut.State in [dsEdit, dsInsert] then
        begin
                if F_ModulDades.RebutPAGADOR.Value ='C' then
                begin
                        if MessageDlg('Vols borrar despeses extres?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
                        begin
                                F_ModulDades.Borra_Extres.Close;
                                F_ModulDades.Borra_Extres.Open;
                        end;
                end;
        end;
end;

Código Delphi [-]
procedure TF_ModulDades.RebutPAGADORChange(Sender: TField);
begin
        if Rebut.State in [dsEdit, dsInsert] then
        begin
                if RebutPAGADOR.Value ='F' then
                begin
                        if MessageDlg('Vols entrar despeses extres?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
                        begin
                                F_ExtresFCC:=TF_ExtresFCC.Create(Self);
                                F_ExtresFCC.ShowModal;
                                Extres_FCC.Close;
                                Extres_FCC.Open;
                                Contar_ID.Close;
                                Contar_ID.Open;
                                if Contar_ID.RecordCount = 0 then
                                begin
                                        Extres_FCC.Append;
                                end
                                else
                                begin
                                        Extres_FCC.Edit;
                                end;
                        end
                        else
                        begin
                                Extres_FCC.Close;
                                Extres_FCC.Open;
                                Contar_ID.Close;
                                Contar_ID.Open;
                                if Contar_ID.RecordCount = 0 then
                                begin
                                        Extres_FCC.Append;
                                        Extres_FCCALLOTJAMENT.Value:=0;
                                        Extres_FCCQUILOMETRES.Value:=0;
                                        Extres_FCCPEATGE.Value:=0;
                                        Extres_FCCMATERIAL.Value:=0;
                                        Extres_FCCVARIS.Value:=0;
                                        Extres_FCC.Post;
                                end;
                        end;
                end;
        end;
end;

Lo que hace este onchange esta correcto, pero no me muestra el mensaje hasta que hago post por eso mi duda, no se si debe ir en un before post de la tabla on exit del componente o algo más.

Gracias por adelantado

Saludos

Josep
Responder Con Cita
  #2  
Antiguo 12-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
No quiero que a cada cambio de registro o al cargar la tabla me salga el mensaje de si quiero realizar el cambio.
Hola josep.

¿ No te sirve el evento OnClick ?
Código Delphi [-]
procedure TForm1.DBRadioGroup1Click(Sender: TObject);
begin
  case DBRadioGroup1.ItemIndex of
    0: if MessageBox(Handle,'¿ Ejecuta proceso C ?','',MB_YESNO)=IDYES then
        ShowMessage('Proceso C');
    1: if MessageBox(Handle,'¿ Ejecuta proceso F ?','',MB_YESNO)=IDYES then
        ShowMessage('Proceso F');
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 12-05-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias Ecfisa

Esto es lo que estaba intentando valorar si usar el onclick del dbRadioGroup. He colocado el siguiente codigo en el evento:

Código Delphi [-]
procedure TF_Rebut.DBRadioGroup2Click(Sender: TObject);
begin
        if F_ModulDades.Rebut.State in [dsEdit, dsInsert] then
        begin
                case DBRadioGroup2.ItemIndex of
                        0: if MessageBox(Handle,'Vols entrar despeses extres?','',MB_YESNO)=IDYES then
                        begin
                                F_ExtresFCC:=TF_ExtresFCC.Create(Self);
                                F_ExtresFCC.ShowModal;
                                F_ModulDades.Extres_FCC.Close;
                                F_ModulDades.Extres_FCC.Open;
                                F_ModulDades.Contar_ID.Close;
                                F_ModulDades.Contar_ID.Open;
                                if F_ModulDades.Contar_ID.RecordCount = 0 then
                                begin
                                        F_ModulDades.Extres_FCC.Append;
                                end
                                else
                                begin
                                        F_ModulDades.Extres_FCC.Edit;
                                end;
                        end
                        else
                        begin
                                F_ModulDades.Extres_FCC.Close;
                                F_ModulDades.Extres_FCC.Open;
                                F_ModulDades.Contar_ID.Close;
                                F_ModulDades.Contar_ID.Open;
                                if F_ModulDades.Contar_ID.RecordCount = 0 then
                                begin
                                        F_ModulDades.Extres_FCC.Append;
                                        F_ModulDades.Extres_FCCALLOTJAMENT.Value:=0;
                                        F_ModulDades.Extres_FCCQUILOMETRES.Value:=0;
                                        F_ModulDades.Extres_FCCPEATGE.Value:=0;
                                        F_ModulDades.Extres_FCCMATERIAL.Value:=0;
                                        F_ModulDades.Extres_FCCVARIS.Value:=0;
                                        F_ModulDades.Extres_FCC.Post;
                                end;
                        end;
                        1: if MessageBox(Handle,'Vols borrar despeses extres?','',MB_YESNO)=IDYES then
                        begin
                                F_ModulDades.Borra_Extres.Close;
                                F_ModulDades.Borra_Extres.Open;
                        end;
                end;
        end;
end;

pero creo que no acaba de ir bien del todo ya que debo controlar el valor del campo antes de hacer click en el dbradiogroup y si vale C hacer una cosa y si vale F la otra.

No se, que me recomendais que haga? o mejor dicho como se trata un proceso así?

Nota: como comenté antes por defecto el valor es C con lo que en este caso no pasa nada, solo cuando lo cambio a F y más tarde lo vuelvo a cambiar a C.

Saludos

Josep

Última edición por jafera fecha: 12-05-2014 a las 18:00:18. Razón: Añadido nota aclaratoria
Responder Con Cita
  #4  
Antiguo 12-05-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
A ver maestros, he adapatado la idea de Ecfisa con una variable.
Dadme vuestro veredicto

Código Delphi [-]
procedure TF_Rebut.DBRadioGroup2Click(Sender: TObject);
var i:string;
begin
        i:=F_ModulDades.RebutPAGADOR.Value;
        if F_ModulDades.Rebut.State in [dsEdit, dsInsert] then
        begin
                if i='C' then
                begin
                        if MessageBox(Handle,'Vols entrar despeses extres?','',MB_YESNO)=IDYES then
                        begin
                                F_ExtresFCC:=TF_ExtresFCC.Create(Self);
                                F_ExtresFCC.ShowModal;
                                F_ModulDades.Extres_FCC.Close;
                                F_ModulDades.Extres_FCC.Open;
                                F_ModulDades.Contar_ID.Close;
                                F_ModulDades.Contar_ID.Open;
                                if F_ModulDades.Contar_ID.RecordCount = 0 then
                                begin
                                        F_ModulDades.Extres_FCC.Append;
                                end
                                else
                                begin
                                        F_ModulDades.Extres_FCC.Edit;
                                end;
                        end
                        else
                        begin
                                F_ModulDades.Extres_FCC.Close;
                                F_ModulDades.Extres_FCC.Open;
                                F_ModulDades.Contar_ID.Close;
                                F_ModulDades.Contar_ID.Open;
                                if F_ModulDades.Contar_ID.RecordCount = 0 then
                                begin
                                        F_ModulDades.Extres_FCC.Append;
                                        F_ModulDades.Extres_FCCALLOTJAMENT.Value:=0;
                                        F_ModulDades.Extres_FCCQUILOMETRES.Value:=0;
                                        F_ModulDades.Extres_FCCPEATGE.Value:=0;
                                        F_ModulDades.Extres_FCCMATERIAL.Value:=0;
                                        F_ModulDades.Extres_FCCVARIS.Value:=0;
                                        F_ModulDades.Extres_FCC.Post;
                                end;
                        end;
                end;

                if i='F' then
                begin
                        if MessageBox(Handle,'Vols borrar despeses extres?','',MB_YESNO)=IDYES then
                        begin
                                F_ModulDades.Borra_Extres.Close;
                                F_ModulDades.Borra_Extres.Open;
                        end;
                end;
        end;
end;

Muchas gracias por vuestro tiempo

Saludos

Josep
Responder Con Cita
  #5  
Antiguo 12-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Josep.
Cita:
Dadme vuestro veredicto
Pues... si hace bién lo que tiene que hacer, entonces los catalanes contentos

Mi única consulta es el por que de verificar el estado de la tabla en la línea:
Código Delphi [-]
if F_ModulDades.Rebut.State in [dsEdit, dsInsert] then
Si el TDataSource asociado al TDBRadioButton tiene su propiedad AutoEdit = True, el campo se actualiza sin que sea necesaria intervención alguna.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 12-05-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias Ecfisa.

Los catalanes nos conformamos con poco, jejejeje...

Tienes razón no es necesaria esta comprobación, esta linea viene de cuando hacia la comprobación en el onchange y por lo tanto cada vez que cambiaba de registro estuviera o no en edición hacía el proceso.

Ya la quito puesto que para hacer click tengo que estar en edición o insert si o si.

Saludos

Josep
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
progressbar avance segun demore proceso jonydread OOP 11 22-08-2012 04:54:09
Boton segun valor de un combobox Litnoiz Varios 3 13-03-2010 23:59:53
Consulta que muestre Si o No segun el valor Cecil SQL 4 17-01-2008 00:49:38
Repetir registro segun valor de un campo yusnerqui SQL 2 13-03-2005 02:14:40
Valor por defecto en DBRadioGroup RyAr Varios 1 01-07-2004 14:46:53


La franja horaria es GMT +2. Ahora son las 12:44:39.


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