Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Relacion entre los dataset y los objetos (https://www.clubdelphi.com/foros/showthread.php?t=91930)

giulichajari 05-06-2017 18:47:26

Relacion entre los dataset y los objetos
 
Tengo un grilla para agrar productos y hacer una factura. Cuando se hace click en Agregar del formulario producto tengo:

Código Delphi [-]
procedure TFProductos.SpeedButton1Click(Sender: TObject);
var
detalle:TDetalle;
idproducto:integer;
descripcion:string;
precioa,subtotal,cant,cantidad,iva,total:Double;
begin
if (Ecantidad.Text<>'') then
    cant:=StrToFloat(Ecantidad.Text);
    if Form1.dblcbtc.KeyValue=1 then

    detalle:=TDetalleA.NuevoDetalleA(
     precioa,subtotal,iva,total,cantidad,descripcion,idproducto);

    else
        ShowMessage('ingrese cantidad');



end

Pero como debo llenar el dataset? Debo poner el codigo aparte, osea un append como se ve en otros post? o hay una manera mas adecuada?

AgustinOrtu 05-06-2017 18:53:56

No tiene mucho sentido mezclar DataSets y objetos. Si usas objetos, estos deben esconder el hecho de que tras los bastidores, se usan DataSets. Sino, estas haciendo doble trabajo

giulichajari 05-06-2017 19:03:39

Y bueno pero si quiero hacer un programa con OOP los datasets no se utilizan.
Por otro lado un dbgrid esta asociado a un dataset. Debo utilizar un stringgrid?

Osea mi clase factura tiene una lista de detalles, debo programar un evento en alguna parte, ya sea al agregar el detalle este se muestra en la grilla. Podria ser un stringgrid y que se agregue manualmente?. o bien un metodo listar de la clase factura pero deberia refrescarse.

Ademas con los dataset yo puedo filtrar datos exportarlos etc..todo esto deberia hacerlo por codigo?

AgustinOrtu 06-06-2017 00:55:39

En realidad depende de que tantas ganas tengas de desacoplar y de abstraer.; no se trata de que no se pueden usar dataset en programas OOP. Si los podes usar pero como se trata de un detalle de implementacion, eso queda oculto, es decir, no deberia haber metodos publicos en tus clases abstractas que hablen de TDataSet

giulichajari 06-06-2017 13:04:10

Cita:

Empezado por AgustinOrtu (Mensaje 517738)
En realidad depende de que tantas ganas tengas de desacoplar y de abstraer.; no se trata de que no se pueden usar dataset en programas OOP. Si los podes usar pero como se trata de un detalle de implementacion, eso queda oculto, es decir, no deberia haber metodos publicos en tus clases abstractas que hablen de TDataSet

Osea el codigo de las clases no tiene que contener nada de datasets, entonces podria escribir el codigo del dataset fuera del codigo anterior dentro del evento on click del boton, osea en algun lado tiene que estar, pero como decis vos no dentro de las clases...
No se vos o los demas como hacen..

AgustinOrtu 07-06-2017 01:39:23

No tiene que estar en las clases abstractas. Deberia estar en la implementacion, en clases concretas, a eso me refiero

giulichajari 07-06-2017 09:43:20

Cita:

Empezado por AgustinOrtu (Mensaje 517831)
No tiene que estar en las clases abstractas. Deberia estar en la implementacion, en clases concretas, a eso me refiero

Ah te entiendo..de hecho las clases abstractas no implementan los metodos solo los declaran.

Muchas gracias amigo agustin!

giulichajari 07-06-2017 11:02:06

Porque tengo el siguiente codigo en una unidad:

Código Delphi [-]
unit UDetalle;

interface
uses UProducto;
type
TDetalle = class
  private
    Fproducto: TProducto;
    Fcantidad: Double;
    FbaseImp: Double;
    Fsubtotal: Double;
    Ftotal: Double;
    procedure Setcantidad(const Value: Double);
    procedure Setproducto(const Value: Double);
    procedure SetbaseImp(const Value: Double);
    procedure Setsubtotal(const Value: Double);
    procedure Settotal(const Value: Double);

  public
    property baseImp:Double read FbaseImp write SetbaseImp;
    property subtotal:Double read Fsubtotal write Setsubtotal;
    property total:Double read Ftotal write Settotal;
    property cantidad:Double read Fcantidad write Setcantidad;
    constructor NuevoDetalle();
    function calcularBaseImp(precio:Double;alic:Double):Double;
    destructor destroy;
end;

Y lo mismo que ocurre para agregar el detalle ocurre con el objeto de la clase producto que agrega un detalle. En el momento que el user selecciona un producto de la grilla, que esta provista de un dataset, debo construir un objeto producto y pasarselo al detalle.Es correcto esto?


La franja horaria es GMT +2. Ahora son las 00:41:03.

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