Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ejecutar proceso segun valor de un DBRadioGroup (https://www.clubdelphi.com/foros/showthread.php?t=85825)

jafera 12-05-2014 16:05:22

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

ecfisa 12-05-2014 17:28:57

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 :)

jafera 12-05-2014 17:56:31

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

jafera 12-05-2014 18:17:29

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

ecfisa 12-05-2014 19:09:53

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 :)

jafera 12-05-2014 20:32:14

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


La franja horaria es GMT +2. Ahora son las 07:37:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi