Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-03-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Con respecto al log te sugiero ir a lo más simple:

En el DataModule principal o en una unidad compartida por toda la aplicación creas una función que guarde en un fichero lo que le envíes.
Yo lo tengo así en un DataModule principal. Te crea un fichero .log con el mismo nombre que la aplicación.
Código Delphi [-]
procedure TDMMain.Log(s: string);
{$IFDEF Debug}
var
  F : TextFile;
  FileName : string;
{$ENDIF}
begin
  {$IFDEF Debug}
  FileName := ChangeFileExt(Application.ExeName, '.log');
  AssignFile(F, FileName);
  try
     Append(F);
  except
     try
        Rewrite(F);
     except
        on e: Exception do
           ShowMessage('Error al abrir fichero : ' + FileName + #13#10 + e.Message);
     end;
  end;
  WriteLn(F, FormatDatetime('[yyyy-mm-dd hh:nn:ss.zzz] ', Now) + s);
  CloseFile(F);
  {$ENDIF}
end;

Luego en los formularios, en cualquier sitio puedes poner cosas como estas:
Código Delphi [-]
procedure TFMPrincipal.FormCreate(Sender: TObject);
begin
  inherited;
  DMMain.Log('FormCreate - ' + Self.Name);
end;
Código Delphi [-]
procedure TFMPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action = caFree;
  DMMain.Log('FormClose - ' + Self.Name);
end;
Código Delphi [-]
procedure TFMain.AArticulosExecute(Sender: TObject);
begin
  DMMain.Log('Accion - Abrir formulario de articulos');
  [...]
end;
Responder Con Cita
  #2  
Antiguo 27-03-2023
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Creo que aquí hay muchas cosas además de la velocidad.
¿Datos médicos?
Las normativas de protección de datos son muy estrictas con ellos. Te recomendaría ver que pide la comunidad europea o el ENS en esos casos, si hablamos de empresas españolas.

Para empezar tener juntos datos de diferentes empresas es un error. Seguro. Deben estar contenidas físicamente en diferentes lugares aunque lógicamente tengan la misma estructura.
No he usado SQL server a ese nivel, pero en Oracle definirías distintos tablespace para cada empresa, usuario o lo que decidas.

Yo no soy partidaria de cargarlo todo de una vez mi experiencia me ha demostrado que rara vez desean ver todo, todo pero todo, aunque solo sea porque es humanamente imposible hacerlo.
Además si hablas de tablas muy grandes (muchos campos) con datos pesados (imágenes, documentos adjuntos) lo mejor es hacer la carga por secciones, según lo necesites en cada pestaña o en un proceso en segundo plano que recupere la información poco a poco sin que ello dificulte el trabajo del usuario y los elementos más pesados que tenga que abrirlos el propio usuario (no la aplicación de forma automática).

Las posibilidades son muchas y un buen análisis previo te ahorrará trabajo después.
Responder Con Cita
  #3  
Antiguo 27-03-2023
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Con respecto al log te sugiero ir a lo más simple:

En el DataModule principal o en una unidad compartida por toda la aplicación creas una función que guarde en un fichero lo que le envíes.
Yo lo tengo así en un DataModule principal. Te crea un fichero .log con el mismo nombre que la aplicación.
Código Delphi [-]
procedure TDMMain.Log(s: string);
{$IFDEF Debug}
var
  F : TextFile;
  FileName : string;
{$ENDIF}
begin
  {$IFDEF Debug}
  FileName := ChangeFileExt(Application.ExeName, '.log');
  AssignFile(F, FileName);
  try
     Append(F);
  except
     try
        Rewrite(F);
     except
        on e: Exception do
           ShowMessage('Error al abrir fichero : ' + FileName + #13#10 + e.Message);
     end;
  end;
  WriteLn(F, FormatDatetime('[yyyy-mm-dd hh:nn:ss.zzz] ', Now) + s);
  CloseFile(F);
  {$ENDIF}
end;

Luego en los formularios, en cualquier sitio puedes poner cosas como estas:
Código Delphi [-]
procedure TFMPrincipal.FormCreate(Sender: TObject);
begin
  inherited;
  DMMain.Log('FormCreate - ' + Self.Name);
end;
Código Delphi [-]
procedure TFMPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action = caFree;
  DMMain.Log('FormClose - ' + Self.Name);
end;
Código Delphi [-]
procedure TFMain.AArticulosExecute(Sender: TObject);
begin
  DMMain.Log('Accion - Abrir formulario de articulos');
  [...]
end;
amigo no logro entender que estoy haciendo mal tengo un form llamado login a la cual usuario y contraseña y entro en el from principal sin ningun problema:
Código Delphi [-]
FormInicio := TFormInicio.Create(Application);
                      Self.Free;
                      FormInicio.ShowModal;
ok luego de eso tengo diferente from que debo abrir segun la opcion selecionada (Button)
Entonces el siguiente from que abro lo abro sin singun problema:
Código Delphi [-]
FormMedico := TFormMedico.Create(Self);
    try
    FormMedico.ShowModal;
    finally
    FormMedico.Free;
    end;
oh continuo: en este fron tengo un botton que al presionarlo deberia abrir otro from donde me muestra una pantalla de busqueda ect. y alli tengo problema ya que me da access violation.
Código Delphi [-]
begin
  FormBuscarMedico:=TFormBuscarMedico.Create(self);
  try
  FormBuscarMedico.ShowModal;
  finally
  FormBuscarMedico.Free;
end;

end;
y alli finalemente se me tranco el juego ahora tambien nunca pude colocar
Código Delphi [-]
Action = caFree;
en el Evento onclose ya que me dice que CaFree no esta declarado.
Responder Con Cita
  #4  
Antiguo 29-03-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Cita:
oh continuo: en este fron tengo un botton que al presionarlo deberia abrir otro from donde me muestra una pantalla de busqueda ect. y alli tengo problema ya que me da access violation.
¿En qué punto exactamente?
Pon tu código real para poder ver qué estás haciendo.
Un "Access Violation" suele ser una llamada a un objeto que no está creado. Seguramente estás liberanto antes de tiempo un objeto o lo estás utilizando antes de crearlo.

Cita:
y alli finalemente se me tranco el juego ahora tambien nunca pude colocar
Lo mismo de antes... pon tu código real ya que caFree es un tipo definido en los formularios en la unidad Forms.

Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
end;

De la ayuda de Delphi 6:

Cita:
TCustomForm.OnClose
Occurs when the form closes.

type
TCloseAction = (caNone, caHide, caFree, caMinimize);

TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction) of object;

property OnClose: TCloseEvent;

Description

Use OnClose to perform special processing when the form closes. The OnClose event specifies which event handler to call when a form is about to close. The handler specified by OnClose might, for example, test to make sure all fields in a data-entry form have valid contents before allowing the form to close.

A form is closed by the Close method or when the user chooses Close from the form's system menu.

The TCloseEvent type points to a method that handles the closing of a form. The value of the Action parameter determines if the form actually closes. These are the possible values of Action:

Value Meaning

caNone The form is not allowed to close, so nothing happens.
caHide The form is not closed, but just hidden. Your application can still access a hidden form.
caFree The form is closed and all allocated memory for the form is freed.
caMinimize The form is minimized, rather than closed. This is the default action for MDI child forms.

If a form is an MDI child form, and its BorderIcons property is biMinimize, then the default Action is caMinimize. If a MDI child form does not have these settings, the default Action is caNone, meaning that nothing happens when the user attempts to close the form.

If a form is an SDI child form, Action defaults to caHide.

To close the form and free it in an OnClose event, set Action to caFree.

Note: When the application shuts down, the main form receives an OnClose event, but any child forms do not receive the OnClose event.
Responder Con Cita
  #5  
Antiguo 29-03-2023
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
¿En qué punto exactamente?
Pon tu código real para poder ver qué estás haciendo.
Un "Access Violation" suele ser una llamada a un objeto que no está creado. Seguramente estás liberanto antes de tiempo un objeto o lo estás utilizando antes de crearlo.


Lo mismo de antes... pon tu código real ya que caFree es un tipo definido en los formularios en la unidad Forms.

Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
end;

De la ayuda de Delphi 6:
Ya se quito el error en Action:=caFree;
Código Delphi [-]
procedure TFormPacienteNew.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
  end;
el error se quito cuando coloque esta linea en Type
Código Delphi [-]
type
  TCloseAction = (caNone, caHide, caFree, caMinimize);  //<--esta linea quito el error
  TFormPacienteNew = class(TForm)
    Layout17: TLayout;
    Label153: TLabel;
    TMSFMXEdit13: TTMSFMXEdit;
    ShadowEffect244: TShadowEffect;
    Label154: TLabel;
    TMSFMXEdit14: TTMSFMXEdit;
    ShadowEffect258: TShadowEffect;
    Label156: TLabel;
    TMSFMXEdit15: TTMSFMXEdit;
    ShadowEffect262: TShadowEffect;
    Label158: TLabel;
    Label159: TLabel;
    TMSFMXEdit16: TTMSFMXEdit;
    ShadowEffect265: TShadowEffect;
    Label160: TLabel;
    Label161: TLabel;
    Label177: TLabel;
    Label192: TLabel;
    TMSFMXEdit17: TTMSFMXEdit;
pero ahora cuando cierro la ventada
Código Delphi [-]
procedure TFormPacienteNew.TMSFNCButton1Click(Sender: TObject);
begin
FormPacienteNew.Close;
end;
me sale un Mensaje 'Invalid Piont operation' y otro que dice 'Invalid Argument'
los formulario se abren asi:
Código Delphi [-]
procedure TFormInicio.TMSFMXToolBarButton2Click(Sender: TObject);
begin
FormPacienteNew := TFormPacienteNew.Create(Self);
    try
    FormPacienteNew.ShowModal;
    finally
    FormPacienteNew.Free;
    end;
end;
Responder Con Cita
  #6  
Antiguo 29-03-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Dentro de un formulario no tienes que llamarlo por su nombre...

Código Delphi [-]
procedure TFormPacienteNew.TMSFNCButton1Click(Sender: TObject);
begin
   // Close hace referencia a si mismo
   // No importa como se llame la variable que apunta al objeto
   Close;
end;

Luego puedes tener dos ventanas de ese tipo y que cada una se cierre a si misma.


Código Delphi [-]
procedure TFormPacienteNew.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  // No necesitaré liberar este objeto, porque FormClose ya lo hará.
  Action := caFree;
end;

[...]

begin
    // Creo dos ventanas de "paciente nuevo"
    PacienteNew1 := TFormPacienteNew.Create(Self);
    PacienteNew2 := TFormPacienteNew.Create(Self);

    // Muestra la primera ventana
    PacienteNew1.Show;

    // Muestra la otra ventana
    PacienteNew2.Show;
end;
Responder Con Cita
  #7  
Antiguo 29-03-2023
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Dentro de un formulario no tienes que llamarlo por su nombre...

Código Delphi [-]
procedure TFormPacienteNew.TMSFNCButton1Click(Sender: TObject);
begin
   // Close hace referencia a si mismo
   // No importa como se llame la variable que apunta al objeto
   Close;
end;

Luego puedes tener dos ventanas de ese tipo y que cada una se cierre a si misma.


Código Delphi [-]
procedure TFormPacienteNew.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  // No necesitaré liberar este objeto, porque FormClose ya lo hará.
  Action := caFree;
end;

[...]

begin
    // Creo dos ventanas de "paciente nuevo"
    PacienteNew1 := TFormPacienteNew.Create(Self);
    PacienteNew2 := TFormPacienteNew.Create(Self);

    // Muestra la primera ventana
    PacienteNew1.Show;

    // Muestra la otra ventana
    PacienteNew2.Show;
end;
Si funciona pero si le coloco en el evento on close Action := caFree; despues que se cierra el formulario me da el error de Invalid argument por lo que decidi quitarlo y funciona perfecto.
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
Cual es la mejor opción de conexión a Bases de Datos en Lazarus para ... ? rolandoj Lazarus, FreePascal, Kylix, etc. 20 24-09-2012 01:44:57
Cual es el mejor manejador gratis de base de datos para MySQl 5.0+ ? juangabriel1786 SQL 3 15-12-2008 00:10:29
Cual es la mejor opcion para un sistema de esta clase... jcarteagaf Varios 10 24-09-2008 23:57:51
Sobre cuál es la mejor opción para trabajar con Word Gabo Servers 6 16-01-2008 13:36:21
Cual es la mejor opción para imprimir ?? Delphitest Impresión 4 27-10-2006 21:50:59


La franja horaria es GMT +2. Ahora son las 13:36:27.


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