Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-07-2017
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Orientación como convertir procedure a clases

Buenas tengo estos procedimientos para guardar, editar y eliminar, lo que necesito es una orientación de como cionvertir esas en una sola clase, un ejemplo cortito que me sirva de orientación para yo convertirla
Código Delphi [-]
procedure guardar (equipcod,equipmodelo,equipdesc,equipmarca,equipimportado,equipafijo:string; equipcost,equipvalor,equipfactorouble);
begin
with datos.tequipos do
    begin
      Close;
      Active:=False;
      Active:=True;
      Open;
      Append;
        FieldByname('eq_codigo').AsString := equipcod;
        FieldByname('eq_descripcion').AsString := equipdesc;
        FieldByname('eq_marca').AsString := equipmarca;
        FieldByname('eq_modelo').AsString := equipmodelo;
        FieldByname('eq_fechaing').AsDateTime:= now;
        FieldByName('eq_costodiario').AsCurrency:=equipcost;
        FieldByName('eq_valor').AsCurrency:=equipcost;
        FieldByName('eq_activofijo').AsString:=equipafijo;
        FieldByName('eq_importado').AsString:=equipimportado;
        FieldByName('eq_factor').AsCurrency:=equipfactor;
      Post;
      Close;
      Active:=False;

    end;

end;

procedure editar (equipcod,equipmodelo,equipdesc,equipmarca,equipimportado,equipafijo:string; equipcost,equipvalor,equipfactorouble);
begin
with datos.sqactualizar do
            begin
            Close;
            SQL.Clear;
            SQL.Add('Update csequipos');
            SQL.Add('set eq_factor=:factor, eq_valor=:valora, eq_activofijo=ropio, eq_importado=:importado,eq_descripcion=:descripcion, eq_marca=:marca,eq_costodiario=:costodiario,eq_modelo=:modelo');
            SQL.Add('WHERE eq_codigo=:codigo');
            ParamByName('descripcion').AsString:=equipdesc;
            ParamByName('marca').AsString:=equipmarca;
            ParamByName('costodiario').AsCurrency:=equipcost;
            ParamByName('modelo').AsString:=equipmodelo;
            ParamByName('codigo').AsString:=equipcod;
            ParamByName('factor').AsCurrency:=equipfactor;
            ParamByName('valora').AsCurrency:=equipvalor;
            ParamByName('importado').AsString:=equipimportado;
            ParamByName('propio').AsString:=equipafijo;
            Execute;
            end;
      MessageDlg('El Material Fue Actualizado Exitosamente', mtCustom, [mbOK], 0);

end;

 procedure eliminar(eqcodigo,partcodigo:string);
  begin
 with datos.sqeliminarcequipo do
  begin
       Close;
       ParamByName( 'eqcodigo' ).AsString :=eqcodigo;
       ParamByName( 'partcodigo' ).AsString :=partcodigo;
       ExecSQL;
  MessageDlg('Registro Eliminado Exitosamente', mtCustom, [mbOK], 0);
  end;
 end;
Responder Con Cita
  #2  
Antiguo 04-07-2017
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Primero, no crees una clase "porque sí". Tiene que haber una ventaja clara. No todo tiene por qué ser un objeto.

Luego, no pienses en "clase" sino en "objeto". Y me refiero a un objeto del mundo real. Es decir, si existe (o existiera), ¿cómo es y qué puedes hacer con él?

Ahora haz que el "cómo es" sean las propiedades y el "qué puedes hacer" sean los métodos públicos.

Y ya está.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 04-07-2017
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola webmasterplc,

En principio tienes que entender un poco sobre OOP, de lo contrario te vas a perder, a ver si con esto te puedo ayudar un poco a entender como funciona y vayas aprendiendo tú poco a poco.

Código Delphi [-]
unit FyPTMyEquipos;

interface

type

  { TEquipo }

  TEquipo = class(TObject)
  private
    FIDCodigo: Integer;
    FCodigo: String;
    FModelo: String;
    FDescripcion: String;
    procedure SetIDValue(IDValue: Integer);
    function GetExisteCodigo: Boolean;
  protected
  public
    constructor Create;
    destructor Destroy; override;
    function Post: Integer;
  published
    property IDCodigo: Integer read FIDCodigo write SetIDValue;
    property Codigo: String read FCodigo write FCodigo;
    property Modelo: String read FModelo write FModelo;
    property Descripcion: String read FDescripcion write FDescripcion;
    property ExisteCodigo: Boolean read GetExisteCodigo;
  end;

implementation

uses
  ADODB;

  { TEquipo }

constructor TEquipo.Create;
begin
  inherited;
  FIDCodigo    := -1;
  FCodigo      := '';
  FModelo      := '';
  FDescripcion := '';
end;

destructor TEquipo.Destroy;
begin
  inherited;
end;

function TEquipo.Post: Integer;;
var
  FadoCnn: TADOConnection;
begin
  case FIDCodigo of
    -1..0: // Añadir un regristro nuevo
      begin
        FadoCnn := TADOConnection.Create(nil);
          FadoCnn.LoginPrompt := False;
          FadoCnn.ConnectionString := "Tus datos de conexión";

        with TADOQuery.Create(nil) do
        begin
          Connection := FadoCnn;

          SQL.Add('INSERT INTO csequipos');
          SQL.Add('  (');
          SQL.Add('    eq_codigo');
          SQL.Add('    ,eq_modelo');
          SQL.Add('    ,eq_descripcion');
          SQL.Add('   )');
          SQL.Add('   VALUES');
          SQL.Add('     (');
          SQL.Add(        QuotedStr(Codigo));
          SQL.Add('       ,' + QuotedStr(Modelo));
          SQL.Add('       ,' + QuotedStr(Descripcion));
          SQL.Add('     )');

          SQL.Add('SELECT @@IDENTITY AS FIELDINTEGER');

          Open;

          FIDCodigo := FieldByName('FIELDINTEGER').AsInteger;
          Result := FIDCodigo;

          FreeAndNil(FadoCnn);
          Free;
        end;
      end;
    else begin // Actualizar registro
      Result := FIDCodigo;

      FadoCnn := TADOConnection.Create(nil);
        FadoCnn.LoginPrompt := False;
        FadoCnn.ConnectionString := "Tus datos de conexión";

      with TADOQuery.Create(nil) do
      begin
        Connection := FadoCnn;

        SQL.Add('UPDATE csequipos');
        SQL.Add('  SET');
        SQL.Add('    eq_codigo       = ' + QuotedStr(Codigo));
        SQL.Add('    ,eq_modelo      = ' + QuotedStr(Modelo));
        SQL.Add('    ,eq_descripcion = ' + QuotedStr(Descripcion));
        SQL.Add('  WHERE ideq_codigo = ' + IntToStr(FIDCodigo));

        ExecSQL;

        FreeAndNil(FadoCnn);
        Free;
      end;
    end;
  end;
end;

procedure TEquipo.SetIDValue(IDValue: Integer);
var
  FadoCnn: TADOConnection;
begin
  FadoCnn := TADOConnection.Create(nil);
    FadoCnn.LoginPrompt := False;
    FadoCnn.ConnectionString := "Tus datos de conexión";

  with TADOQuery.Create(nil) do
  begin
    Connection := FadoCnn;

    SQL.Add('SELECT');
    SQL.Add('    IDCODIGO');
    SQL.Add('    ,eq_codigo');
    SQL.Add('    ,eq_modelo');
    SQL.Add('    ,eq_descripcion');
    SQL.Add('  FROM csequipos');
    SQL.Add('  WHERE IDCODIGO = ' + IntToStr(IDValue));

    Prepared := True;

    Open;

    FIDCodigo    := FieldByName('IDCODIGO').AsInteger;
    FCodigo      := FieldByName('eq_codigo').AsString;
    FModelo      := FieldByName('eq_modelo').AsString;
    FDescripcion := FieldByName('eq_descripcion').AsString;

    FreeAndNil(FadoCnn);
    Free;
  end;
end;

function TEquipo.ExisteCodigo: Boolean;
var
  FadoCnn: TADOConnection;
begin
  FadoCnn := TADOConnection.Create(nil);
    FadoCnn.LoginPrompt := False;
    FadoCnn.ConnectionString := "Tus datos de conexión";

  with TADOQuery.Create(nil) do
  begin
    Connection := FadoCnn;

    SQL.Add('SELECT');
    SQL.Add('    IDCODIGO AS FIELDINTEGER');
    SQL.Add('  FROM csequipos');
    SQL.Add('  WHERE eq_codigo = ' + QuotedStr(FCodigo));

    Prepared := True;

    Open;

    if (FieldByName('FIELDINTEGER').AsInteger = 0) then
      Result := False
    else
      Result := (FIDCodigo <> FieldByName('FIELDINTEGER').AsInteger);

    FreeAndNil(FadoCnn);
    Free;
  end;
end;

y en un formulario nuevo y en la parte privada pones:
Código Delphi [-]
  ...
  private
    MiEquipo: TEquipo;

y cuando se destruye el formulario:
Código Delphi [-]
procedure TForm1.FromDestroy(Sender: TObject);
begin
  FreeAndNil(MiEquipo);
end;

En los TEdit:
Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
begin
  MiEquipo.Codigo := Edit1.Text;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  MiEquipo.Modelo := Edit2.Text;
end;

procedure TForm1.Edit3Change(Sender: TObject);
begin
  MiEquipo.Descripcion := Edit3.Text;
end;

En un Boton donde ponga Añadir
Código Delphi [-]
procedure TForm1.NuevoClick(Sender: TObject);
begin
  MiEquipo := TEquipo.Create;

  Edit1.Text := '';
  Edit2.Text := '';
  Edit3.Text := '';
end;

En un Boton donde ponga Modificar
Código Delphi [-]
procedure TForm1.ModificarClick(Sender: TObject);
begin
  MiEquipo := TEquipo.Create;

  with dbgGrid.DataSource.Dataset do
    MiEquipo.IDCodigo := FieldByName('IDCODIGO').AsInteger;

  Edit1.Text := MiEquipo.Codigo;
  Edit2.Text := MiEquipo.Modelo;
  Edit3.Text := MiEquipo.Descripcio;
end;

En un Boton donde ponga Grabar
Código Delphi [-]
procedure TForm1.GrabarClick(Sender: TObject);
begin
  if MiEquipo.ExisteCodigo then
    ShowMessage('Este código ya existe en la DB')
  else
    MiEquipo.Post;
end;

No lo he probado que funcione lo he realizado todo de memoria

Un saludo

p.d.: añade los campos que te faltan,

p.d2. el IDCODIGO y el FIDCodigo lo he puesto yo para identificar cada registro único e inequívoco
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 04-07-2017 a las 10:58:50.
Responder Con Cita
  #4  
Antiguo 04-07-2017
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Fino Voy a probar a ver como me va
Responder Con Cita
  #5  
Antiguo 06-07-2017
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Yo prefiero trabajar el siguiente modelo (pseudo codigo):

Código Delphi [-]
TEquipo = class(Tobject)
Private
  Procedure setCodigo(Value: Integer)
Public
  Property Codigo: Integer read Fcodigo write setCodigo
  Property Modelo
  Property Descripcion
  {....}
  Construtor
  Destructor
  {....}
  function Guardar
  function Eliminar
end;


Procedure TEquipo.setCodigo(Value: Integer);
Begin
   {al asignar, el codigo Consultas si el codigo existe y cargas la info en los demas datos.. si no existe, no deberias asignar el codigo (si es un incremental o algo asi en la BD).. FCodigo=-1}
   FModelo:= consulta.modelo
   FDescripcion:= consulta.modelo
end;

function Guardar()
begin
if fcodigo= -1 then InsertarEnBD
else ActualizarEnBD
end;


Lo utilizarias de esta forma:

Código Delphi [-]
equipo:= TEquipo.Crate( constructor para que te cargue un eqquipo>)
equipo.codigo:= 5; {carga los datos}
equipo.Descripcion:= 'nueva descripcion'
equipo.guardar

Por otro lado, te recomiendo realizar todas las operaciones de base de datos en otro unidad o clase... por si algun dia decides cambiar los componentes o el motor de base de datos, no afectes la dinamica de tu clase TEquipo...

saludo,
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como crear clases correctamente? alquimista OOP 10 10-04-2010 13:21:15
puntero a un procedure en un procedure como parametro fcios Varios 2 14-03-2009 04:41:22
como declarar Clases que almacenen imagenes morfeo21 Varios 6 08-09-2006 17:43:58
Necesito Orientación (como cuando se esta entre los 15 y los 20) sercornejov .NET 6 07-06-2006 23:39:32
¿Como cambiar la orientación del papel al imprimir? neon Impresión 1 11-11-2004 14:00:55


La franja horaria es GMT +2. Ahora son las 00:34:44.


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