Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2006
DANY DANY is offline
Miembro
 
Registrado: nov 2003
Posts: 145
Poder: 21
DANY Va por buen camino
Guardar Config. del formulario en BD

Necesito grabar la configuracion de un formulario en la base de datos. La idea central es que un usuario con permisos alterre las propiedades de los componentes (Visible, enabled, posicion, etc.) y lo guarde en un determinado perfil para manejo de seguridad.
El codigo de roman que encontre hace lo que necesito.
pero grabando en un archivo y lo necesito grabar en la BD. para ello utilizo un campo Imgen en SQL Server, utilizo ADO.
El Codigo de roman decia:
Código Delphi [-]
function TForm1.FormFileName: String;
begin
  Result := ExtractFilePath(Application.ExeName) + ClassName + '.bin';
end;

procedure TForm1.Load;
var
  Stream: TFileStream;

begin
  Stream := TFileStream.Create(FormFileName, fmOpenRead or fmShareDenyWrite);

  try
    Stream.ReadComponent(Self);
  finally
    Stream.Free;
  end;
end;

procedure TForm1.Save;
var
  Stream: TFileStream;

begin
  Stream := TFileStream.Create(FormFileName, fmCreate);

  try
    Stream.WriteComponent(Self);
  finally
    Stream.Free;
  end;
end;

Necesito los metodos load y save pero leyendo de la base.
Gracias...
Responder Con Cita
  #2  
Antiguo 26-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 18
waltergomez Va por buen camino
Copy y Paste del Help de Delphi

Código Delphi [-]
function ComponentToString(Component: TComponent): string;

var
  BinStream:TMemoryStream;
  StrStream: TStringStream;
  s: string;
begin
  BinStream := TMemoryStream.Create;
  try
    StrStream := TStringStream.Create(s);
    try
      BinStream.WriteComponent(Component);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, StrStream);
      StrStream.Seek(0, soFromBeginning);
      Result:= StrStream.DataString;
    finally
      StrStream.Free;

    end;
  finally
    BinStream.Free
  end;
end;

function StringToComponent(Value: string): TComponent;
var
  StrStream:TStringStream;
  BinStream: TMemoryStream;
begin
  StrStream := TStringStream.Create(Value);
  try
    BinStream := TMemoryStream.Create;
    try
      ObjectTextToBinary(StrStream, BinStream);
      BinStream.Seek(0, soFromBeginning);
      Result := BinStream.ReadComponent(nil);

    finally
      BinStream.Free;
    end;
  finally
    StrStream.Free;
  end;
end;

Salu2
Responder Con Cita
  #3  
Antiguo 26-05-2006
DANY DANY is offline
Miembro
 
Registrado: nov 2003
Posts: 145
Poder: 21
DANY Va por buen camino
Esto es lo que intente

lo estoy grabando en un campo text de sql server, la grabacion funciona bien, el problema lo tengo cuando construyo el formulario. Muestro como creo los formularios, qu son MDIChild.
Código Delphi [-]
procedure CrearFormulario(ClaseFormulario : TFormClass; var Formulario);
var PermisosFormularios: TPermisosFormularios ;
    Stream: TStringStream ;
begin


  if TComponent(Formulario) = nil then
      Application.CreateForm(ClaseFormulario,Formulario)
  else
  begin
    TForm(Formulario).WindowState := wsNormal;
    TForm(Formulario).Show;
  end;

// Hasta aca lo creo como siempre.
  try
    PermisosFormularios := TPermisosFormularios.CrearParaPonerPermisos(TComponent(Formulario).Name ) ;
    TComponent(Formulario) :=StringToComponent(PermisosFormularios.Propiedades ) ;// aca me da el error
  finally
    FreeAndNil(PermisosFormularios );

  End;


end;

El error es: class TFPlanillaMarcas not found.
Seguro me estoy ahgando en un vaso de agua (del que estoy viendo la mitad vacia).
Muchas gracias por su valioso tiempo.
Responder Con Cita
  #4  
Antiguo 27-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 18
waltergomez Va por buen camino
No lo probe pero estimo que funcionara. Formulario es de tipo TCustomForm no necesitas hacer tanto casting.

Código Delphi [-]
procedure CrearFormulario(ClaseFormulario : TFormClass; var Formulario : TCustomForm ?);
var PermisosFormularios: TPermisosFormularios ;
    Stream: TStringStream ;
begin


  if not Assigned(Formulario) then
      Application.CreateForm(ClaseFormulario,Formulario)
  else
  begin
    Formulario.WindowState := wsNormal;
    Formulario.Show;
  end;

// Hasta aca lo creo como siempre.
  try
    PermisosFormularios := TPermisosFormularios.CrearParaPonerPermisos(Formulario.Name) ;


    RegisterClass(TFPlanillaMarcas);

// Esta asignacion no la entiendo, pero igual

    Formulario := StringToComponent(PermisosFormularios.Propiedades ) ;// aca me da el error
  finally
    FreeAndNil(PermisosFormularios );

  End;


end;


Salu2,
Responder Con Cita
  #5  
Antiguo 27-05-2006
DANY DANY is offline
Miembro
 
Registrado: nov 2003
Posts: 145
Poder: 21
DANY Va por buen camino
en la linea de asignacion que no entiendes ahora me da error que los componentes ya estan creados, y es medio obvio. pero como llamo al metodo
para crear el formulario ??.

pasandole como parametro: StringToComponent(PermisosFormularios.Propiedades ))
Responder Con Cita
  #6  
Antiguo 01-06-2006
DANY DANY is offline
Miembro
 
Registrado: nov 2003
Posts: 145
Poder: 21
DANY Va por buen camino
Ya lo resolvi

la unica manera fue, como decia roman en un foro que consulte al respecto redefinir el create del form. Si no, no encontre la forma de asignar el contenido del Blob de la BD al Form.
Este es el Codigo:
Código Delphi [-]
constructor TfPlanillaABM.Create(AOwner: TComponent);
var    Stream: TStringStream ;
       PermisosAColocar: TPermisosUsuariosFormularios ;
begin

  CreateNew(AOwner);
  PermisosAColocar := TPermisosUsuariosFormularios.CrearParaColocarPermisos(FormularioActivo,UsuarioActivo.CodigoUsuario ); 
  if PermisosAColocar.ExistenPermisosDeUsuarioEnFormulario  then
  Begin
    try
      Stream := TStringStream.Create(PermisosAColocar.DevuelveCadenaStringDelFrmulario );
      Stream.ReadComponent(Self);

    finally
      FreeAndNil(Stream);
      FreeAndNil(PermisosAColocar); 
    End;
  End
  Else
    inherited Create(AOwner);

  PrepararFormulario ;
  
end;
en donde permisos a colocar hace una consulta a la base que lee el campo blob guardado y lo devuelve como string.
Muchas gracias por la ayuda y pos su tiempo
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
Config de Interclient oscarflorez JAVA 3 22-06-2007 11:22:57
customErrors en Web.config mamen .NET 1 11-04-2006 16:32:13
web.config altp .NET 2 01-02-2006 16:23:10
Guardar registros de varias tablas Paradox utilizando un solo boton en un formulario TrUnkS Conexión con bases de datos 5 27-01-2006 02:03:26
Nº de decimales de config. regional de Panel de Control ciscu Varios 1 31-10-2003 16:25:21


La franja horaria es GMT +2. Ahora son las 12:54:11.


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