Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Grabar datos definodos por el usuario en B.D (https://www.clubdelphi.com/foros/showthread.php?t=3441)

frankmch 07-09-2003 06:45:31

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.

javiermorales 07-09-2003 11:38:13

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.

frankmch 07-09-2003 17:41:27

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

Viet 08-09-2003 19:22:21

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....

delphi.com.ar 08-09-2003 20:11:33

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!

frankmch 09-09-2003 04:51:24

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...

Julià T. 09-09-2003 05:44:29

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;


socom 18-10-2007 23:51:14

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

arleyb 05-12-2007 18:46:58

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!!


La franja horaria es GMT +2. Ahora son las 11:52:38.

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