Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-10-2006
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
Crear tabla en tiempo de ejecución...

Hola a todos!
Estoy aquí nuevamente ya que necesitaría que me den una mano con lo siguiente.
Estoy tratando de cargar unos datos desde una tabla Paradox a un objeto para luego utilizarlos en otro procedimiento. En realidad estoy empezando a tratar con el tema de objetos y haciendo algunas pruebas. Lo que quiero hacer es que la aplicación sea totalmente independiente de la cantidad de tablas que cree, nombres, ubicacion, etc. Hasta ahora vine bien, hasta que me di cuenta que había un campo Blob dando vueltas, me explayo:

La clase la cree de la sig.manera (resumiendo):

Código:
Type TDatos = class
  public
    codigo,
    marca,
    rubro,
    producto : string;
    imagen : TMemoryStream; //para el campo blob
end;
(obviamente hice todo para inicializar el objeto TDatos, imagen, etc)

Lo que hago es ir leyendo uno a uno los registros de una tabla y asignándolos a cada campo de TDatos para luego mostrarlos en TEdits o lo que fuere.
No doy mucho detalle de esto, ya que el problema viene mas adelante. Los datos los asigno al objeto de la sig.manera:

Código:
  FDatos.codigo:=Tabla.Fields.Fields[0].AsString;
  FDatos.marca:=Tabla.Fields.Fields[1].AsString;
  FDatos.rubro:=Tabla.Fields.Fields[2].AsString;
  FDatos.producto:=Tabla.Fields.Fields[3].AsString;
La tabla la estoy creando en tiempo de ejecución y hasta aquí todo bien, creo las tablas que quiera, con sus nombres, ubicaciones, todo muy lindo hasta que me encontré con un campo Blob...
Si la tabla ya la tenía creada mediante el componente de la paleta BDE, no había problemas, hacía:

Código:
  TablaIMAGEN.SaveToStream(FDatos.imagen);
y listo.

Pero acá se me generó este problema, ya que al hacerlo durante la ejecución, no me genera los campos y no puedo realizar ese procedimiento. Es muy probable que me haya mandado una macana al crear la tabla o tal vez que me haya metido en un embrollo por nada.
Si alguien tiene una sugerencia será muy bienvenida.
Muchas gracias a todos.
Un abrazo.

Walter

Última edición por Walterdf fecha: 28-10-2006 a las 06:17:27.
Responder Con Cita
  #2  
Antiguo 28-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Lo único que se me ocurre, es que no hayas creado el memoryStream en el constructor de tu objeto, y por tanto obtengas access violations. Tal y como lo veo sería algo así:

Código Delphi [-]
Type TDatos = class
  private 
    FStream:TMemoryStream;

   procedure SetFStream(const Value:TMemoryStream);
  function GetFStream:TMemoryStream;
  public

    constructor Create;
    codigo,
    marca,
    rubro,
    producto : string;
    property imagen : TMemoryStream read GetFStream write SetFStream; //para el campo blob
end;

implementation

constructor TDatos.Create;
begin
  FStream := TmemoryStream.Create;
end;

procedure TDatos.SetFStream(const Value:TMemoryStream);
begin
  if not Assigned(Value) then
    raise Exception.Create('no se ha suministrado un Flujo de datos válido');

  Value.SaveToStream(FStream); // lo copiamos a la variable FStream.

function TDatos.GetFStream:TMemoryStream;
begin
  Result := TMemoryStream.Create;
  FStream.SavetoStream(Result);
end;
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 28-10-2006
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
Mil gracias por responder pero el problema no pasa por access violations ya que el stream lo cree en el contructor del objeto. El problema está en la creación de la tabla en ejecución, no reconoce ningún campo como Blob.
Un abrazo y gracias nuevamente.

Walter
Responder Con Cita
  #4  
Antiguo 30-10-2006
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
Post

Bueno, ya pude solucionar el tema de pasar el blob de la tabla al campo del objeto, de todos modos me sirvió lo anterior ya que había metido la pata con la inicialización del objeto.
Pongo el código que utilicé para cargar los datos de los campos del objeto con los de la tabla:

Código:
function TdmFiguras.Cargar(var FDatos : TDatos) : boolean;
var
  Stream : TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  FDatos.codigo:=dmTablas.Tabla.Fields.Fields[0].AsString;
  FDatos.marca:=dmTablas.Tabla.Fields.Fields[1].AsString;
  FDatos.rubro:=dmTablas.Tabla.Fields.Fields[2].AsString;
  FDatos.producto:=dmTablas.Tabla.Fields.Fields[3].AsString;
Stream.LoadFromStream(dmTablas.Tabla.CreateBlobStream(dmTablas.Tabla.FieldByName('FIGURA'),bmRead));
  FDatos.imagen:=Stream;
  result := true;
end;
Muchas gracias.
Walter
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
crear tabla(.bd) noipa Varios 9 26-01-2006 15:47:45
crear una Tabla miguelml Varios 2 04-11-2005 17:59:34
crear tabla cds?¿ acl_gandalf Conexión con bases de datos 3 21-09-2005 16:44:54
Crear tabla Access a partir de tabla FoxPro Tecnic2 Conexión con bases de datos 6 01-09-2004 13:37:43
Crear tabla andrestsas Conexión con bases de datos 2 04-08-2003 20:11:48


La franja horaria es GMT +2. Ahora son las 10:29:41.


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