Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-03-2009
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
Post Llenar Clase con DataSet

Saludos mis queridos amigos,

Tengo una duda. Quisiera saber, si es posible popular una clase dada, ejemplo :
Código Delphi [-]
Type TClientes = Class Private fID: Int; fNombres: String; fApellidos: String; procedure SetApellidos(const Value: String); procedure SetCedula(const Value: String); procedure SetID(const Value: Int); Published Property Nombres : String Read fNombres Write SetNombres; Property Apellidos : String Read fApellidos Write SetApellidos; Property ID : Int Read fId Write SetID; elefono2; End; ......

Bueno la idea es crear un metodo que me cargue los datos en mi clase atendiendo a una consulta, mi campo clave seria el ID. y de ser posible si se le hace una modificacion a cualquiera de los valores de las propiedades de mi clase poder hacer la actualizacion de igual manera.

Muchas Gracias.
__________________
El conocimiento es un Patrimonio Universal....
Responder Con Cita
  #2  
Antiguo 24-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Dado que tienes las propiedades como published, puedes hacer un método del estilo:

Código Delphi [-]
  procedure ChargeValues(Cli:TBaseClase; DataSet:TDataSet);

NOTA: Como ves te he puesto el los parámetros TBaseClase en lugar de TCliente, ya que creo que para lo que estás haciendo es mejor que Todas tus clases de negocio hereden de una clase base donde poder implementar Métodos y propiedades comunes a todos

Volviendo al método. Por un lado puedes recorrer los campos (Fields) del Dataset utilizando métodos como GetFieldsList, GetFieldsNames,... Y para acceder a las propiedades de tu clase puedes utilizar RTTI (Acceder a las propiedades de un componente vía RTTI).
Entre unas y otras deberías poder cargar los datos en tu clase.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 24-03-2009
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
Thumbs up

Gracias Neftali,

Imaginate que mi clase Base es tClientes, este metodo entonces aceptaria como parametro una instancia de mi clase y me la devolveria con los valores obtenidos de la consulta? Perdona mi Ignoracia, pero es que nunca me habia detenido a trabajar con POO y siempre hacia todo crudo. Pero eh pensado en implementar una Clase Generica de Clientes la cual pueda utilizar en cualquier aplicacion que utilize clientes. Espero haberme explicado bien. es Decir imaginemos que mi clase la cargo por medio del ID como seria para llamar el metodo?

Código Delphi [-]
Procedure Consultar Begin Clientes : ClientesBase; Var Clientes := ClientesBase.Create; Clientes.CargarDatos( .... ) End;

Seria algo asi no?
__________________
El conocimiento es un Patrimonio Universal....
Responder Con Cita
  #4  
Antiguo 24-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Jvilomar Ver Mensaje
Seria algo asi no?
Sí perfectamente podría ser así.
Simplemente, que yo ese método CargarDatos lo programaría en la clase Base, para que te sirva para todas las clases; Si lo haces utilizando RTTI, como te he explicado antes, te servirá tanto para TClientes, TProveedores, TMonedas o TCarritoDelHelado.

Si quieres prueba a implementarlo en TCliente (ahora te será más sencillo para comenzar), pero debes tener presente que la idea final es Abstraerlo a la Clase Base, para que no tengas que programarlo en todas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 26-03-2009
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Poder: 19
JoseAntonio Va por buen camino
Post

Hola, yo anduve haciendo experimentos en ese aspecto durante mis ratos libres, aqui un ejemplo, espero que le sirva

Código Delphi [-]
procedure TPadre.loadFromDB(CodPadre: String);
var
  SQLStr: string;
  ADataSet: TDataSet;
begin
  sqlStr:= 'select * from padre where codpadre = ' + QuotedStr(CodPadre);
  TDMDBManager.GetSQLDataSet(SQLStr, ADataSet); // Clase que genera Datasets
  fCodPadre := ADataset.fieldByName('CODPADRE').AsString;
  fNombres := AdataSet.FieldbyName('NOMBRESPADRE').AsString;
  fSexo := ADataSet.FieldbyName('SEXO').AsInteger;
  fTipoDocumento := ADataSet.FieldByName('TIPODOCUMENTO').AsInteger;
  fEstadoCivil := ADataSet.FieldByName('ESTADOCIVIL').AsInteger;
  fFechaNac := ADataSet.FieldbyName('FECHANACIMIENTO').AsDateTime;
  fDescPadre := ADataSet.FieldByName('DESCPADRE').AsString;
  LoadChilds;   // para leer los hijos
end;
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.
Responder Con Cita
  #6  
Antiguo 27-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por JoseAntonio Ver Mensaje
aqui un ejemplo, espero que le sirva
A algo así me refería yo, pero de forma genérica para que sirve para cualquier clase del Modelo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Copiar el contenido de un DataSet a otro DataSet Javi2 Varios 82 22-11-2022 09:26:16
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
Actualizar un dataset desde otro dataset jafera Conexión con bases de datos 17 18-12-2008 23:57:10
llenar un combo pzhero .NET 3 07-06-2004 20:13:35
llenar sqlclientdataset jgutti Conexión con bases de datos 5 18-12-2003 18:42:35


La franja horaria es GMT +2. Ahora son las 19:27:34.


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