Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-07-2025
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
Cambio del valor S N en un RadioButton

Buenas tardes.


Después de mucho tiempo sin entrar por estos lares, he retomado un poco la programación de una de mis aplicaciones para obtener una mejora en un cambio de valor de un campo mediante un DBRadioButton.


He probado el código en varios eventos, OnClick, OnExit en el OnChange del campo de la tablay el resultado no es el esperado.
El código es este:


Código Delphi [-]
procedure TF_Curses.DBRadioGroup4Exit(Sender: TObject);
begin
        F_ModulDades.CursesAux.Close;
        F_ModulDades.CursesAux.Open;
        F_ModulDades.CursesAux.Last;
        F_ModulDades.CursesAux.First;
        if F_ModulDades.CursesSUSPESA.Value='N' then
        begin
                if MessageDlg('Segur que vols marcar aquesta cursa com a suspesa?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
                begin
                        If ((F_ModulDades.CursesFEDERACIO.Value ='CATALANA') and (F_ModulDades.CursesPAGA.Value ='S')) or ((F_ModulDades.CursesFEDERACIO.Value ='NACIONAL') and (F_ModulDades.CursesPAGA.Value ='S')) then
                        begin
                                while Not F_ModulDades.CursesAux.Eof do
                                begin
                                        F_ModulDades.CursesAux.Edit;
                                        F_ModulDades.CursesAuxIMP_CANON.Value:=0;
                                        F_ModulDades.CursesAuxARBITRATGE.Value:=F_ModulDades.Imp_CanonSUSPESA.Value;
                                        F_ModulDades.CursesAuxQUILOMETRES.Value:=0;
                                        F_ModulDades.CursesAuxDIETA.Value:=0;
                                        F_ModulDades.CursesAux.Post;
                                        F_ModulDades.CursesAux.Next;
                                end;
                                F_ModulDades.CursesSUSPESA.Value:='S';
                        end;
                end
                else
                begin
                        F_ModulDades.CursesSUSPESA.Value:='N';
                end;
        end
        else
        begin
                if MessageDlg('Segur que vols marcar aquesta cursa com a no suspesa?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
                begin
                        If ((F_ModulDades.CursesFEDERACIO.Value ='CATALANA') and (F_ModulDades.CursesPAGA.Value ='S')) or ((F_ModulDades.CursesFEDERACIO.Value ='NACIONAL') and (F_ModulDades.CursesPAGA.Value ='S')) then
                        begin
                                while Not F_ModulDades.CursesAux.Eof do
                                begin
                                        F_ModulDades.CursesAux.Edit;
                                        if (F_ModulDades.CursesAuxFUNCIO.Value = 'Aspirant en pràctiques') or (F_ModulDades.CursesAuxFUNCIO.Value = 'Auxiliar Arbitral') then
                                        begin
                                                F_ModulDades.CursesAuxIMP_CANON.Value:=0;
                                                F_ModulDades.CursesAuxARBITRATGE.Value:=F_ModulDades.Imp_CanonAUXILIAR.Value;
                                                F_ModulDades.CursesAuxQUILOMETRES.Value:=0;
                                                F_ModulDades.CursesAuxDIETA.Value:=0;
                                        end                                             else
                                        if F_ModulDades.CursesAuxFUNCIO.Value = 'Informàtic/a' then
                                        begin
                                                F_ModulDades.CursesAuxARBITRATGE.Value:=F_ModulDades.Imp_CanonINFORMATIC.Value;
                                                F_ModulDades.CursesAuxQUILOMETRES.Value:=F_ModulDades.Imp_CanonQUILOMETRES.Value;
                                                F_ModulDades.CursesAuxDIETA.Value:=F_ModulDades.Imp_CanonDIETA.Value;
                                        end
                                        else
                                        begin
                                                F_ModulDades.CursesAuxARBITRATGE.Value:=F_ModulDades.Imp_CanonARBITRATGE.Value;
                                                F_ModulDades.CursesAuxQUILOMETRES.Value:=F_ModulDades.Imp_CanonQUILOMETRES.Value;
                                                F_ModulDades.CursesAuxDIETA.Value:=F_ModulDades.Imp_CanonDIETA.Value;
                                        end;
                                        F_ModulDades.CursesAux.Post;
                                        F_ModulDades.CursesAux.Next;
                                end;
                        end
                        else
                        begin
                                F_ModulDades.CursesAux.Edit;
                                F_ModulDades.CursesAuxIMP_CANON.Value:=0;
                                F_ModulDades.CursesAuxARBITRATGE.Value:=0;
                                F_ModulDades.CursesAuxQUILOMETRES.Value:=0;
                                F_ModulDades.CursesAuxDIETA.Value:=0;
                                F_ModulDades.CursesAux.Post;
                                F_ModulDades.CursesAux.Next;
                        end;
                        F_ModulDades.CursesSUSPESA.Value:='N';
                end
                else
                        F_ModulDades.CursesSUSPESA.Value:='S';
        end;
end;


Lo que quiero conseguir es que cambiando el valor de un DBRadioButton entre S o N, me pregunte si quiero hacerlo y en caso afirmativo pase el código, pero en caso negativo no pase el código.


Tanto en el OnClick como en el OnExit funciona bien pero no me cambia el valor S o N
En el Onchange del campo, entra en un bucle infinito.


Si alguien tiene una idea que me pueda iluminar, pues agradecido de antemano como siempre.


Saludos


Josep Antoni
Responder Con Cita
  #2  
Antiguo 04-08-2025
emailx45 emailx45 is offline
Miembro
 
Registrado: abr 2025
Posts: 10
Poder: 0
emailx45 Va por buen camino
Smile

TEST IS WORKS FOR YOU!...

prueba para ver si te funciona https :// i.ibb.co / Kp5dXDGT / bds-Zz1g8-Sz-Gzh . gif

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.Dialogs,
  FireDAC.Stan.Intf,
  FireDAC.Stan.Option,
  FireDAC.Stan.Param,
  FireDAC.Stan.Error,
  FireDAC.DatS,
  FireDAC.Phys.Intf,
  FireDAC.DApt.Intf,
  Data.DB,
  Vcl.StdCtrls,
  Vcl.DBCtrls,
  Vcl.Grids,
  Vcl.DBGrids,
  FireDAC.Comp.DataSet,
  FireDAC.Comp.Client,
  Vcl.ExtCtrls,
  Vcl.Buttons,
  Vcl.Menus;

type
  TForm1 = class( TForm )
    FDMemTable1: TFDMemTable;
    DBGrid1: TDBGrid;
    FDMemTable1MyDBCheckField: TBooleanField;
    DBCheckBox1: TDBCheckBox;
    DataSource1: TDataSource;
    DBNavigator1: TDBNavigator;
    PopupMenu1: TPopupMenu;
    SI1: TMenuItem;
    No1: TMenuItem;
    procedure DBCheckBox1Click( Sender: TObject );
    procedure SI1Click( Sender: TObject );
    procedure No1Click( Sender: TObject );
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  LChecked: boolean;

procedure TForm1.DBCheckBox1Click( Sender: TObject );
begin
  LChecked := DBCheckBox1.Checked;
  //
  PopupMenu1.Popup( Mouse.CursorPos.x, Mouse.CursorPos.Y );
end;

procedure TForm1.No1Click( Sender: TObject );
begin
  DBCheckBox1.Checked := LChecked;
  DBGrid1.DataSource.DataSet.Cancel;
end;

procedure TForm1.SI1Click( Sender: TObject );
begin
  if ( DBGrid1.DataSource.DataSet.State in [ dsEdit, dsInsert ] ) then
    DBGrid1.DataSource.DataSet.Post;
end;

end.
Responder Con Cita
  #3  
Antiguo 04-08-2025
emailx45 emailx45 is offline
Miembro
 
Registrado: abr 2025
Posts: 10
Poder: 0
emailx45 Va por buen camino
Thumbs up

FMX ---> Gif sample: https :// i.ibb.co / 5h3SKYqd / bds-SBj-Pf0-P5-Rn . gif

Código Delphi [-]
type
  TForm1 = class( TForm )
    RadioButton1: TRadioButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    procedure RadioButton1MouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single );
    procedure MenuItem1Click( Sender: TObject );
    procedure MenuItem2Click( Sender: TObject );
  private
...

procedure TForm1.MenuItem1Click( Sender: TObject );
begin
  RadioButton1.IsChecked := true;
  ShowMessage( 'Si' )
end;

procedure TForm1.MenuItem2Click( Sender: TObject );
begin
  RadioButton1.IsChecked := false;
  ShowMessage( 'No' )
end;

procedure TForm1.RadioButton1MouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single );
begin
  PopupMenu1.Popup( Screen.MousePos.X, Screen.MousePos.Y );
end;
Responder Con Cita
  #4  
Antiguo 04-08-2025
emailx45 emailx45 is offline
Miembro
 
Registrado: abr 2025
Posts: 10
Poder: 0
emailx45 Va por buen camino
Thumbs up

En lugar de usar el método clásico de escanear todos los registros de una tabla con un "WHILE/REPEAT...", utilice una sentencia SQL más eficiente y rápida.

SQL Text => IBQuery, FDQuery, TQuery, UniQuery, etc.. etc.. etc...

' UPDATE <<TABLE>> '
' SET <<Field1 = ValueABC, <<Field2= ValueABC, etc... etc... >>'
' WHERE <<FieldX = XXXXX .... etc. ... etc... >>>

example:

Código Delphi [-]
  try
    try
      if not FDConnection1.InTransaction then
        FDConnection1.StartTransaction;
        //
      FDQuery1.ExecSQL( 'INSERT / DELETE / UPDATE  .......' );
    except
      on E:Exception do
        ShowMessage(E.Message);
    end;
  finally
    if FDConnection1.InTransaction then
      FDConnection1.Commit;
  end;

UPDATE MyTable
SET Name="John", Age=18
Where ((FieldA ='CATALANA') or (FieldA ='NACIONAL')) and (FieldB ='S')
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
cambio del valor de un control X steelha Varios 7 22-09-2022 15:24:16
Cambio de Valor en ListView angelp4492 Varios 1 02-02-2011 10:38:26
como verificar el cambio de estado o valor de una variable gonza_619 Varios 7 06-09-2010 20:48:41
Cambio de valor de un campo en un grid jafera Varios 14 23-08-2010 00:24:12
¿Como almacenar el valor de varios radiobutton en la BD? Nelly Varios 2 10-04-2006 19:47:52


La franja horaria es GMT +2. Ahora son las 03:05:55.


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
Copyright 1996-2007 Club Delphi