Ver Mensaje Individual
  #7  
Antiguo 26-12-2007
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Reputación: 22
NickName Va por buen camino
Hola Delphius...

Primero que nada muchas gracias por toda tu aportación de verdad te agradesco mucho...

Cita:
Disculpa, pero no puedo darme el lujo de estar probando tu código
Solo queria que me comentaran si no estaba mal la forma de haserlo asi como lo hisite muchas gracias tambien por eso ya que para uno que inicia siempre hay temor de si se esta haciendo lo correcto o no...

Cita:
Más o menos la idea es que: el Proveedor realiza al menos un movimiento y cada movimiento está conformado por una serie de lineas (el detalle).
Creo que no me explique bien pero mi problema es mas simple que eso ya que no se como podria ser la estructura de las clases Movimiento y Detalle_Movimiento ya que estas son Maestro Detalle la clase de Proveedores solo la puse para que me comentaran si era correcto lo que estaba haciendo pero no tiene ninguna relación con la clase de Movimiento...
Cita:
La idea de delegar este trabajo es que tanto TProveedor, como TMovimiento envien el mensaje de grabar, modificar, borrar, etc a este objeto y sea éste el encargado de hacer el trabajo sucio.

¿Porqué dije podría? Porque si tu diseño (mejor dicho el dominio) es simple es posible que adosar esta nueva clase (llamemosla AccesoDB) haga más complicado al modelo y lleve a costos y pérdida de tiempo.
Esactamente eso queria que me comentaran por eso puse el codigo de la clase de proveedor... si tengo una clase se llama Conexion y Todas las demas heredan de esa para poder insertar modificar o eliminar datos pero ese es el problema que no sabia si es correcta la implementación te pongo el codigo:

Uso los Fibplus para conectarme a Firebird: Por todo lo que comentas y otro hilo que cheque hasta me da pena publicar mi codigo...
Código Delphi [-]
unit C_Conexion;

interface

Uses Db, SysUtils, pFIBDatabase, pFIBQuery, pFIBDataSet, C_Parametros;

 Type
    TConexion = Class (TObject)
       private
            FDb_Firebird: TpFIBDatabase;
            FConectado: Boolean;
            FParametros: TParametros;
            FConsulta: TpFIBDataSet;
            FTransaccion: TpFIBTransaction;
            FOperacion: TpFIBQuery;
            FUsuario_Conectado: String;
            FDatos_Guardados: Boolean;
            FTarea: String;
            FOtros_Datos: TpFIBDataSet;
            FError_Valida: String;
            procedure SetError_Valida(const Value: String);
            procedure SetOtros_Datos(const Value: TpFIBDataSet);
            procedure SetDatos_Guardados(const Value: Boolean);
            procedure SetTarea(const Value: String);
            procedure SetUsuario_Conectado(const Value: String);
            procedure SetOperacion(const Value: TpFIBQuery);
            procedure SetTransaccion(const Value: TpFIBTransaction);
            procedure SetParametros(const Value: TParametros);
            procedure SetConsulta(const Value: TpFIBDataSet);
            procedure SetConectado(const Value: Boolean);
            procedure SetDb_Firebird(const Value: TpFIBDatabase);
       public
            constructor Create;
            Procedure Conectar_Db_Firebird;
            Function  Identificar(Clave:String):String;
            Function  Traer_Datos(Select:String):TDataSource;
            Function  Validar_Datos:Boolean;  Virtual;
       Published
            Property  Db_Firebird:TpFIBDatabase read FDb_Firebird write SetDb_Firebird;
            Property  Parametros:TParametros read FParametros write SetParametros;
            Property  Conectado:Boolean read FConectado write SetConectado;
            Property  Consulta:TpFIBDataSet read FConsulta write SetConsulta;
            Property  Otros_Datos:TpFIBDataSet read FOtros_Datos write SetOtros_Datos;
            Property  Transaccion:TpFIBTransaction read FTransaccion write SetTransaccion;
            Property  Operacion: TpFIBQuery read FOperacion write SetOperacion;
            Property  Usuario_Conectado:String read FUsuario_Conectado write SetUsuario_Conectado;
            Property  Datos_Guardados:Boolean read FDatos_Guardados write SetDatos_Guardados;
            Property  Tarea:String read FTarea write SetTarea;
            Property  Error_Valida:String read FError_Valida write SetError_Valida;
     end;

implementation

uses FIBDatabase, FIBDataSet;

{ TConeccion }

constructor TConexion.Create;
begin
    Transaccion:= TpFIBTransaction.Create(Nil);
    //---- Crear Objeto Db
    Db_Firebird:= TpFIBDatabase.Create(Nil);
    //---- Inicializa Parametros Db --
    Parametros:= TParametros.Create;
    Db_Firebird.Connected:=False;
    Conectar_Db_Firebird;
    Operacion:= TpFIBQuery.Create(Nil);
    Operacion.Database:=Db_Firebird;
    Consulta:= TpFIBDataSet.Create(Nil);
    Consulta.Database:=Db_Firebird;
    Otros_Datos:= TpFIBDataSet.Create(Nil);
    Otros_Datos.Database:=Db_Firebird;

end;


function TConexion.Identificar(Clave: String): String;
begin
    With Consulta Do
    Begin
         Close;
         SQLs.SelectSQL.Clear;
         SQLs.SelectSQL.Add('Select Nombre_Usuario, Tipo_Usuario, Activo From Usuarios' +
                 ' Where Clave = :Clave');
         ParamByName('Clave').AsString:=Clave;
         //---- Iniciar transa
         Prepare;
         Try
              Open;
         Except on E:Exception do
         Begin
              Raise;
              Exit;
         End; // execept
         End; // Try
    End;  // With
    if Consulta.IsEmpty then
       Result:=''
    else
       begin
           if Consulta.FieldByName('Activo').AsString = 'SI' then
             begin
                  Usuario_Conectado:=Consulta.FieldByName('Nombre_Usuario').AsString;
                  Result:=Consulta.FieldByName('Tipo_Usuario').AsString;
             end
           else
             Result:='INACTIVO';
       end;
end;

Procedure TConexion.Conectar_Db_Firebird;
begin
    //--- Obtener parametros
    //--- Fijar parametros Transaccion --
    Transaccion.TRParams.Add('write nowait rec_version read_committed');

    Transaccion.DefaultDatabase:=Db_Firebird;

    //--- Parametros de la base de datos
    Db_Firebird.SQLDialect:=3;
    Db_Firebird.DatabaseName:=Parametros.Nombre_Db;
    Db_Firebird.ConnectParams.UserName:=Parametros.Usuario;
    Db_Firebird.ConnectParams.Password:=Parametros.Clave;
    Db_Firebird.ConnectParams.CharSet:=Parametros.Caracteres;
    //---- Asigno la Transaccion
    Db_Firebird.DefaultTransaction:=Transaccion;
    Db_Firebird.DefaultUpdateTransaction:=Transaccion;

    try
        Db_Firebird.Connected:=True;
    except on E: Exception do
    begin
        Conectado:=False;
        Raise;
        Exit;
    end;
    end;
    Conectado:= True;
end;

procedure TConexion.SetConectado(const Value: Boolean);
begin
  FConectado := Value;
end;

procedure TConexion.SetConsulta(const Value: TpFIBDataSet);
begin
    FConsulta:=Value;
end;

procedure TConexion.SetDatos_Guardados(const Value: Boolean);
begin
  FDatos_Guardados := Value;
end;

procedure TConexion.SetDb_Firebird(const Value: TpFIBDatabase);
begin
  FDb_Firebird := Value;
end;

procedure TConexion.SetError_Valida(const Value: String);
begin
  FError_Valida := Value;
end;

procedure TConexion.SetOperacion(const Value: TpFIBQuery);
begin
  FOperacion := Value;
end;

procedure TConexion.SetOtros_Datos(const Value: TpFIBDataSet);
begin
  FOtros_Datos := Value;
end;

procedure TConexion.SetParametros(const Value: TParametros);
begin
  FParametros := Value;
end;

procedure TConexion.SetTarea(const Value: String);
begin
  FTarea := Value;
end;

procedure TConexion.SetTransaccion(const Value: TpFIBTransaction);
begin
  FTransaccion := Value;
end;

procedure TConexion.SetUsuario_Conectado(const Value: String);
begin
  FUsuario_Conectado := Value;
end;

function TConexion.Traer_Datos(Select: String): TDataSource;
begin
    Otros_Datos.Close;
    Otros_Datos.SQLs.SelectSQL.Clear;
    Otros_Datos.SQLs.SelectSQL.Add(Select);
    try
        Otros_Datos.Open;
    except on E: Exception do
    begin
        Raise;
        Exit;
    end;
    end;
    Result:= TDataSource.Create(Nil);
    Result.DataSet:=Otros_Datos;
end;

function TConexion.Validar_Datos: Boolean;
begin
    Result:=True;
end;

end.
en un hilo que cheque comentan que los atributos privados de una clase se deben de usar en la misma clase y los publicos desde fuera y mi clase no aplica eso...
Cita:
En fin... esto dependerá de como estructures y diseñes tus clases. Como te decía... hay varias posibilidades de como lograr hacer los "vinculos".
Pues ese es el punto que no se como estructurar mis clases nunca habia trabajado con objetos... los libros que me recomendaste te prometo leerlos pero como tu dices no hay mucho tiempo y mi proyecto lo tengo que entregar en febrero...
Cita:
Se que no te he ayudado con el código pero al menos creo haber dicho que algo deberías tener en cuenta: La correcta asignación de responsabilidades.
Creo que si ya habia visto eso del TObjectList lo malo es que uno como novato nunca sabe si es una sola clase y donde pondria la propiedad de ese tipo
Cita:
No es que lo que hayas hecho esté mal...sino que no veo como logras hacer referencia entre la clase proveedor y la clase movimientos. No veo, al menos yo, un vinculo de interés (o como debe decirse: asignación de responsabilidades).
Para una primera aproximación, tu diseño ha sido un gran avance.
Gracias esto da animos y quiere decir que no voy tan mal....
Cita:
Y ten presente que no hay un único diseño y comprención del problema. Existen tantos diagramas de dominio, como personas hay en este mundo... por lo que no existe una única solución de como implementar correctamente la asignación de responsabilidades de las clases. De modo que para poder recibir la mejor ayuda sería oportuno que tu nos informes de tu modelo, de tu comprensión del dominio. Porque si yo te muestro mi diseño es posible que no sea tan coincidente con el tuyo y para ti sea más complicado de asimilarlo y comprenderlo.
Por Responsabilidades voy a entender que es la relación que hay de una clase con otra...

Por otro lado creo que mi modelo es simple:
segun yo tengo mi clase Conexion con esta me conecto a la DB... y todas mis demas clases heredan de esta para Insertar Modificar y Eliminar Datos.. lo demas es comun Movimeintos con su Detalle_Movimiento, Ticket y su Detalle_Ticket pero la verdad no tengo nada diseñado como dises solo la idea de acuerdo a la Db que tengo y mi problema es q no se como estructurar esas clases Maestro Detalle... bueno y siendo realistas creo que me falta mucho que aprender....
Por todo Gracias...
__________________
Saludos...
Responder Con Cita