Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Recordando y solicitando ayuda. (https://www.clubdelphi.com/foros/showthread.php?t=95372)

TiammatMX 01-09-2021 19:08:14

Recordando y solicitando ayuda.
 
Buen día/tarde/noche, según aplique.

Recientemente he retomado Delphi y ObjectPASCAL en CodeTyphon, tratando de replicar lo que ya sabía (hace MUCHO TIEMPO) :D me puse a hacerle a mi esposa una aplicacioncita para manejar sus listas de asistencia (ella es maestra) usando PostgreSQL y CodeTyphon. Mis problemas son dos, esencialmente:
  1. conectar el DataModule a la aplicación DESDE LA CREACIÖN, algo que sabía hacer bastante bien.
  2. Llamar las pantallas y que dentro de éstas esté correctamente conectado el DataModule para evitar reconectarlo y así.

Les paso el código que estoy haciendo, solamente las partes esenciales.

El DataModule:
Código Delphi [-]
unit uDatos;

{$mode ObjFPC}{$H+}

interface

uses
  Classes, SysUtils, PQConnection, SQLDB, DB;

type

  { TDatos }

  TDatos = class(TDataModule)
    Conexion: TPQConnection;
    FuenteDatos: TDataSource;
    SQLDatos: TSQLQuery;
    Transaccion: TSQLTransaction;
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
  private

  public

  end;

var
  Datos: TDatos;

implementation

{$R *.frm}

{ TDatos }

procedure TDatos.DataModuleCreate(Sender: TObject);
begin
  Conexion.Connected := True;
end;

procedure TDatos.DataModuleDestroy(Sender: TObject);
begin
  Conexion.Connected := False;
end;

end.

La pantalla principal:
Código Delphi [-]
unit uPrincipal;

{$mode objfpc}{$H+}

interface

uses
  uDatos, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Menus;

type

  { TfrmPrincipal }

  TfrmPrincipal = class(TForm)
    imlImagenes: TImageList;
    mmuPegar: TMenuItem;
    mmuCortar: TMenuItem;
    mmuCopiar: TMenuItem;
    mmuCerrar: TMenuItem;
    mmuRegistroAlumnos: TMenuItem;
    mmuRegistroTutores: TMenuItem;
    mmuListaAsistencia: TMenuItem;
    mmuProcesos: TMenuItem;
    mmuVentana: TMenuItem;
    mmuReportes: TMenuItem;
    mmuArchivo: TMenuItem;
    mmuEditar: TMenuItem;
    mmuMenu: TMainMenu;
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure mmuCerrarClick(Sender: TObject);
  private

  public

  end;

var
  frmPrincipal: TfrmPrincipal;
  gDatos : TDataModule;

implementation

{$R *.frm}

{ TfrmPrincipal }  

procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
  gDatos := Datos.Create(Self);

{  if gDatos.Conexion.Connected then
     MessageDlg('BBDD conectada', mtInformation,[mbOk],0);}
end;

procedure TfrmPrincipal.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
{  gDatos.Conexion.Connected := False;
  CloseAction := caFree;}
end;

procedure TfrmPrincipal.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Accion : TCloseAction;
begin
//  CanClose := ;
  if MessageDlg('¿Desea salir de la aplicación?', mtConfirmation,[mbYes, mbNo],0) = mrYes then
     begin
       Accion := caFree;
       FormClose(Sender, Accion);
     end;
end;

procedure TfrmPrincipal.mmuCerrarClick(Sender: TObject);
begin
  Close;
end;

end.

Y el compilador del proyecto:
Código Delphi [-]
program SEPPuebla;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  {$IFDEF HASAMIGA}
  athreads,
  {$ENDIF}
  Interfaces, // this includes the CT adLCL widgetset
  Forms, uPrincipal, uDatos
  { you can add units after this };

{$R *.res}

begin
  RequireDerivedFormResource:=True;
  Application.Scaled:=True;
  Application.Initialize;
  Application.CreateForm(TfrmPrincipal, frmPrincipal);
  Application.Run;
end.

Si tuviesen algún comentario o indicación, con todo gusto lo implememento y les comento qué sucede.

¡Saludos!

Dexter182 01-09-2021 21:22:01

Ignorando lo que es CodeTyphon y suponiendo que entendí tu pregunta, creo que sólo te falta la siguiente línea:
Código Delphi [-]
Application.CreateForm(TDatos, Datos);

Pero ten en cuenta que soy súper principiante.
Que conste que te avisé. :D

movorack 01-09-2021 21:22:25

Hola! Según veo en tu código. En el create de TDatos estás realizando la conexión y TfrmPrincipal.gDatos lo estás creando en TfrmPrincipal.FormCreate por lo tanto debería conectar en ese preciso momento.

Con este código de ejemplo, al crear otras pantallas debes pasarle el objeto TfrmPrincipal.gDatos. Aunque en lugar de ello puedes usar la variable global uDatos.Datos y solo hacer uso de uDatos en las otras pantallas.

Una pregunta. ¿porque CodeTyphon? Si es un desarrollo personal sin animo de lucro, creo que puedes usar el Delphi Community Edition.

TiammatMX 02-09-2021 15:50:18

Cita:

Empezado por Dexter182 (Mensaje 542568)
Ignorando lo que es CodeTyphon y suponiendo que entendí tu pregunta, creo que sólo te falta la siguiente línea:
Código Delphi [-]Application.CreateForm(TDatos, Datos);


Pero ten en cuenta que soy súper principiante.
Que conste que te avisé. :D


¡Excelente! Pero ¿en dónde ponerlo? Esa es la duda principal.


Cita:

Empezado por movorack (Mensaje 542569)
Hola! Según veo en tu código. En el create de TDatos estás realizando la conexión y TfrmPrincipal.gDatos lo estás creando en TfrmPrincipal.FormCreate por lo tanto debería conectar en ese preciso momento.

Con este código de ejemplo, al crear otras pantallas debes pasarle el objeto TfrmPrincipal.gDatos. Aunque en lugar de ello puedes usar la variable global uDatos.Datos y solo hacer uso de uDatos en las otras pantallas.

Una pregunta. ¿porque CodeTyphon? Si es un desarrollo personal sin animo de lucro, creo que puedes usar el Delphi Community Edition.

Esencialmente lo hago en CodeTyphon porque requiero practicar Delphi, o más bien ObjectPASCAL, y la verdad Lazarus no me satisface del todo. Volviendo al caso, mmmm variable global ¿en la pantalla principal?

Dexter182 02-09-2021 15:58:57

Cita:

Empezado por TiammatMX (Mensaje 542591)
¡Excelente! Pero ¿en dónde ponerlo? Esa es la duda principal.

En el mismo lugar que has puesto:
Código Delphi [-]
Application.CreateForm(TfrmPrincipal, frmPrincipal);

Saludos! ^\||/^\||/^\||/

Ñuño Martínez 12-09-2021 16:41:18

Tengo curiosidad por saber porqué Lazarus no te satisface del todo.

TiammatMX 12-09-2021 17:17:07

Cita:

Empezado por Ñuño Martínez (Mensaje 542781)
Tengo curiosidad por saber porqué Lazarus no te satisface del todo.

No, no me satisface. Y sobre todo, por el tema de la conexión a la base de datos que está en PostgreSQL. Lazarus es BASTANTE engorroso para conectar.

Ñuño Martínez 13-09-2021 10:48:22

Entonces lo que no te satisface son los componentes de conexión con la base de datos (perdón por ser tan tiquismiquis :D). Ten en cuenta que todo lo que tiene Code Typhon está disponible para Lazarus (se limita a embutirlo todo, a veces sin siquiera leer la licencia, por cierto); sólo tienes que instalarlo y en las últimas versiones es muy fácil. Abres Paquete > Administrar Paquetes en Línea y a disfrutar.


La franja horaria es GMT +2. Ahora son las 15:48:00.

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