Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Insertar Registros (https://www.clubdelphi.com/foros/showthread.php?t=96715)

Eduard23 28-05-2024 23:41:22

Insertar Registros
 
Hola amigos del foro por aca nuevamente necesitando de su valiosa ayuda estoy tratando de hacer una rutina para instertar registros en una tabla de mysql con delphi
Tengo un form con varios TEdit al incluir datos en todos los TEdit y presionar el boton aceptar se graba el registro perfectamente en la tabla hasta alli todo muy bien.

El problema viene cuando quiero cambiar la rutina para que al darle al boton de aceptar el Form no se cierre y continue incluyendo registros y solo pare cuando yo le indique que no quero seguir incluyendo

intente hacerlo con un while y al final un MessageDlg que pregunta desea seguir incluyendo

si la Repuesta es no se sale perfecto
pero si la Respuesta es si regresa a seguir incluyendo pero no se Detiene en los edit para hacer la lectura.

no se si me entienden

El problema que tengo es basicamente que la aplicacion no se detiene para hacer la lectura de datos (Por Teclado) para el nuevo registro

gracias de antemano

Neftali [Germán.Estévez] 29-05-2024 08:35:32

Es más sencillo para saber lo que estás haciendo y darte una solución que pongas algo de código de cómo lo estás haciendo hasta ahora.
Para los demás es más fácil de entender lo que expones si vemos código y además a partir de ese código te podemos sugerir los cambios que creamos necesarios. O proponerte correcciones.

Otra poción es crear un pequeño proyecto con el mínimo código para ver el problema y subirlo como adjunto al mensaje.

cloayza 30-05-2024 18:05:01

Estimado Eduar23, creo entender que lo que requiere, le propongo este código...
Este contiene 1 Checkbox, 2 TEdit, 2 TButtons y 1 TMemo.

Principalmente lo que se hace es manipular el valor de ModalResult del botton btnSave, cambiando su valor a mrOk o mrNone. El botton btnCancel está asignado como mrCancel.

Al desplegar el formulario con ShowModal, este espera un valor de retorno (mrOk, mrCancel,...) si el valor de retorno es mrNone, el formulario no se cierra.

Para ello se hace uso del control chkDigitMode que al ser verdadero, asigna mrNone al botón btnSave, quedando en un ciclo hasta presionar el botón btnCancel o la tecla ESC.

Código Delphi [-]
unit Unit2;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    btnSave: TButton;
    btnCancel: TButton;
    chkDigitMode: TCheckBox;
    mmData: TMemo;
    procedure btnCancelClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure InsertData(v1,v2:String);
    procedure ClearEdits();
    class procedure Execute();
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btnSaveClick(Sender: TObject);
begin
     InsertData(Edit1.Text,Edit2.Text);

     ClearEdits();

     Edit1.SetFocus;

     if chkDigitMode.Checked then
        ModalResult:=mrNone
     else
        ModalResult:=mrOk;
end;

procedure TForm2.btnCancelClick(Sender: TObject);
begin
     Close;
end;

procedure TForm2.InsertData(v1,v2:String);
begin
     mmData.Lines.Add(format('Value 1:%s, Value 2:%s',[v1,v2]));
end;

procedure TForm2.ClearEdits;
begin
    Edit1.Text:=Emptystr;
    Edit2.Text:=Emptystr;
end;

class procedure TForm2.Execute;
begin
     with TForm2.Create(nil) do
     begin
          btnSave.ModalResult  :=mrOk;
          btnCancel.ModalResult:=mrCancel;

          ClearEdits();

          ShowModal;

          free;
     end;
end;

end.

Código Delphi [-]
unit Unit1;

interface
...

uses Unit2;
begin
     //Llamada a formulario de digitación...
     TForm1.Execute();
end
Bueno espero le ayuda o de ideas para solucionar su problema...Saludos cordiales

aledieb 31-05-2024 15:11:29

Hola, el problema que veo es que estas usando un form modal, no importa que hagas si usas ModalResult por defecto el form se va a cerrar, además no estas controlando el resultado del form2, Lo que podes hacer en el btnSaveClick anular la condición:

Código Delphi [-]
     if chkDigitMode.Checked then
        ModalResult:=mrNone
     else
        ModalResult:=mrOk;

En el botón cancelar cerrar el form y en el aceptar/grabar solo grabar.

cloayza 31-05-2024 15:25:04

Estimado aledieb probó el código?

Lo invito a que lo haga...y verá que está errado...

Saludos cordiales

aledieb 31-05-2024 19:24:07

Cita:

Empezado por cloayza (Mensaje 555865)
Estimado aledieb probó el código?

Lo invito a que lo haga...y verá que está errado...

Saludos cordiales

Recién probé el código, y se ejecuta como un form modal.

Y si estaba errado porque no vi el free al final.

Hice una modificación cambiando el showmodal por show y el form permanece en pantalla, siempre y cuando no deje el free.

Código Delphi [-]
class procedure TForm2.Execute;
begin
     with TForm2.Create(nil) do
     begin
          btnSave.ModalResult  :=mrOk;
          btnCancel.ModalResult:=mrCancel;

          ClearEdits();

          Show;

//          free;
     end;
end;


Hacer algo así el form se ejecutaría como desea (el código original) Sin probar
Código Delphi [-]
uses Unit2;
begin
     //Llamada a formulario de digitación...
     while condicion do 
     begin
        TForm2.Execute();
     end;
end

aledieb 31-05-2024 22:57:32

Estima cloayza, mis sinceras disculpas.

Mire con mas cuidado e interprete mal el código (no vi el checkbox)

cloayza 31-05-2024 23:08:33

Cita:

Empezado por aledieb (Mensaje 555877)
Estima cloayza, mis sinceras disculpas.

Mire con mas cuidado e interprete mal el código (no vi el checkbox)

Estimado colega, pierda cuidado. Lo importante es que en esta comunidad estamos para dar una mamo, ser criticos y por sobre todo aportar...

Saludos cordiales

Eduard23 01-06-2024 03:10:28

gracias estimado cloayza fue de gran ayuda su consejo con esto puder resolver mi problema muchas gracias y hasta una proxima vez


La franja horaria es GMT +2. Ahora son las 13:09:20.

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