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 07-09-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
Grabar datos definodos por el usuario en B.D

hola a todos, espero alguien me pueda dar una pista con ese pequeño problema que tengo:


estoy haciendo una aplicacion donde tengo definido un tipo de datos de la siguiente manera:

RegCostos = Record
CodeCompra : String[50];
VImpuesto1 ,
VImpuesto2 : Boolean;
CostoActualEx ,
CostoPromedioBs ,
CostoPromedioEx ,
Precios : Array[1..6] of RegUnPrecio;
end;

bien, mi inconveniente es como hago para enviar este tipo de dato definido por usuario a una tabla en una base de datos, al tratar de grabar me encuentro con error de incompatibilidad de datos, creo que se puede hacer con campos tipo blob, pero aun asi no se como convertir este tipo de dato a blob, y por supuesto tambien necesito un metodo para extraerlos de la base de datos.


cualquier ayuda me seria muy buena....


gracias de ante mano.
__________________
ing. frankmch
Responder Con Cita
  #2  
Antiguo 07-09-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 21
javiermorales Va por buen camino
Hola, ¿en las tablas tienes definido un campo para cada uno de los tipos del registro y subregistro?
Código:
RegCostos = Record
  CodeCompra : String[50];
  VImpuesto1,VImpuesto2 : Boolean; 
  CostoActualEx,CostoPromedioBs,CostoPromedioEx ,Precios : Array[1..6] of RegUnPrecio;
end;
Un saludo.
Responder Con Cita
  #3  
Antiguo 07-09-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
Si, en la base de datos en la que estamos trabajando estan definidos estos campos donde se deben guardar y acceder a la informacion. estos campos son de tipo BLOB. y el manejador de base de datos es DBISAM 2.08, establecer la conexion ya no es problema, el inconveniente esta en acceder a la data en estos campos.
y cambiar la estructura de la B.D no es una opcion disponible ya que esta base de datos interactua con otro sistema de informacion.

Gracias por Interesarte...


saludos
__________________
ing. frankmch
Responder Con Cita
  #4  
Antiguo 08-09-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Es una lastima que no puedas cambiar el modelo de datos, ya que es relativamente sencillo realizar una estructura que contenga estructuras dinamicas.

Pero se me ocurre que puedes implementar lo siguiente: Trata de generar dos funciones GetCampo(NombreCampo) y SetCampo(nombreCampo; Valor), con esas funciones podes guardar en una estructura propia que vos definas el Record;

Por ultimo este Record lo traduces en un Text y lo guardas y lees directamente, obviamente que para todo tipo de manipulacion sobre un registro deberas usar tus funciones de traduccion de extructuar....

No se si se entiende mi idea....
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #5  
Antiguo 08-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Sinceramente no me gusta para nada la idea de guardar registros dentro de campos long, pero si no hay otra, podrías utilizar un record de este tipo:
Código:
  TRegCostos = record
    CodeCompra : String[50];
    VImpuesto1 ,
    VImpuesto2 : Boolean;
    CostoActualEx ,
    CostoPromedioBs ,
    CostoPromedioEx ,
    Precios : Array[1..6] of Currency; 
  end;
  TDatos = record
    case Integer of
      0: (RegCostos: TRegCostos);
      1: (Data: array[0..247] of char);
  end;
y te evitarías mover datos de un record a un string/pchar...

Código:
var
  MisDatos: TDatos;
begin
  MisDatos.RegCostos.CodeCompra := 'delphi.com.ar';
  MisDatos.RegCostos.Precios[1] := 1.2;
  Field.AsString :=MisDatos.Data;
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 09-09-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
Thumbs up

muchas gracias a todos por interesarse, pero he aqui una solucion que logre construir, aunque confieso que no me convence mucho, hasta ahora es lo que he logrado.
reconosco debo pulir un poco mas la idea...

procedure TForm1.Button2Click(Sender: TObject);

type
RegUnPrecio = Record
PorcUtil,PorcUtilEx : Boolean;
Utilidad,UtilidadEx,SinImpuesto,MtoImpuesto1,MtoImpuesto2 ,
TotalPrecio ,TotalPrecioEx: Currency;
TipoRound : Byte;
end;

RegCostos = Record
CodeCompra : String[50];
VImpuesto1 ,
VImpuesto2 : Boolean;
CostoAnteriorBs ,
CostoAnteriorEx ,
CostoActualBs ,
CostoActualEx ,
CostoPromedioBs ,
CostoPromedioEx ,
MImpuesto1 ,
MImpuesto2 : Currency;
PorcentImp1 ,
Exento1 ,
PorcentImp2 ,
Exento2 : Boolean;
FechaVencimiento: TDateTime;
NumeroDeLote : String[50];
Precios : Array[1..6] of RegUnPrecio;
end;
var
registro:regcostos;
Stream1 : tStream;
begin
//inicializar el registro...
dbisamtable1.Open;
dbisamtable1.edit;
Stream1 :=DBISAMTable1FX_COSTOS.DataSet.CreateBlobStream(DBISAMTable1FX_COSTOS,bmread); //creo una variable blob para lectura
stream1.read(registro,Sizeof(registro));//leo la variable blob en mi record

label3.Caption:=floattostr(registro.Precios[1].SinImpuesto);//imprimo en valor (opcional)
stream1.Free; //libero el stream, no se por que. lo recomienda borland


Stream1 :=DBISAMTable1FX_COSTOS.DataSet.CreateBlobStream(DBISAMTable1FX_COSTOS,bmwrite); //instancio un nuevo stream en modo de escritura

registro.Precios[1].SinImpuesto:=strtofloat(label3.Caption)+500;
stream1.Write(registro,Sizeof(registro)); //actualizo en registro



dbisamtable1.Post; //grabo en la tabla

end;




si `pueden brindar alguna sugerencia estare argadecido...
__________________
ing. frankmch
Responder Con Cita
  #7  
Antiguo 09-09-2003
Julià T. Julià T. is offline
Miembro
 
Registrado: may 2003
Ubicación: en el teclado
Posts: 314
Poder: 21
Julià T. Va por buen camino
puedes aprovechar el BeforePost y el AfterScroll para cargar y guardar los datos
Código:
procedure TForm1.T1BeforePost(DataSet: TDataSet);
begin
 Re.a:=100;
 Re.b:=110;
 Re.c:=120;
 Re.d:=inttostr(t1num.value);
 with TDBISAMBlobStream.Create(T1aaa,bmWrite) do
 try
  Write(Re,SizeOf(TRe));
 finally
  Free;
 end;
end;

procedure TForm1.T1AfterScroll(DataSet: TDataSet);
begin
 with TDBISAMBlobStream.Create(T1aaa,bmRead) do
 try
  Read(Re,SizeOf(TRe));
  label1.Caption:=Re.d;
 finally
  Free;
 end;
end;
Responder Con Cita
  #8  
Antiguo 18-10-2007
socom socom is offline
Registrado
 
Registrado: oct 2007
Posts: 1
Poder: 0
socom Va por buen camino
Estamos hablando de Hey tu (A**2) el sistema administrativo?

Hola, buscando en la internet sobre como abrir campos blob de la base de datos del sistema administrativo previamente mensionado, encontre por casualidad tus comentarios. Seria posible ponernos en contacto a traves d este foro para comentar mis avances y los tuyos en esta area?

Gracias
Responder Con Cita
  #9  
Antiguo 05-12-2007
arleyb arleyb is offline
Registrado
 
Registrado: dic 2007
Posts: 1
Poder: 0
arleyb Va por buen camino
Buenas, hace ya un rato estoy averiguando la forma de hacer operaciones sobre tablas (*.*dat) que trabajan con el manejador de bases de datos DBISAM 2.08 desde Delphi... la verdad es que no he encontrado la forma de hacerlo y realmente te urge que alguien me ayude.... sera que alguno de los foristas o frankmch puede decir como es la forma de lograr conectarse a traves de delphi a este tipo de BD?? muchas gracias por su ayuda!!
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


La franja horaria es GMT +2. Ahora son las 01:54:12.


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