Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Grabar En SQL Campos Decimales, Solo me graba enteros? Con Codigo (https://www.clubdelphi.com/foros/showthread.php?t=35684)

freddiaz07 18-09-2006 16:21:25

Grabar En SQL Campos Decimales, Solo me graba enteros? Con Codigo
 
hola amigos anteriormente les habia escrito sobre mi duda, la aplicacion no me esta grabando los decimales, solo la parte entera ej. 15.20 solo graba 15. en el codigo esta resaltado con rojo la liena del problema. los campos estan bien definidos en las tablas. todo lo demas me funciona bien
Código Delphi [-]
//..............................//
 
procedure TForm2.BitBtn2Click(Sender: TObject);
Var
i, j, fila : byte;
begin
For j:= 1 to (data.RowCount-1) do
begin
If Strtofloat(Data.Cells[5,j]) < Strtofloat(Data.Cells[6,j]) Then
Begin
Application.MessageBox('No puede Entregar.', 'Error', mb_OK+mb_IconWarning);
Data.Cells[6,j]:= '0';
End;
End;
AdoTable1.TableName:='DESPACHO';
ADOTable1.Open;
//Table1.Edit; Modificar
//Table1.Delete; Eliminar
AdoTable1.Insert;
AdoTable1.Fields.FieldByName('Numero').AsString := Label8.Caption;
AdoTable1.Fields.FieldByName('Factura').AsString :=Label4.Caption;
AdoTable1.Fields.FieldByName('Fecha').AsDateTime := StrToDate(label7.Caption);
AdoTable1.Fields.FieldByName('Anulado').AsString :='0';
AdoTable1.Post;
AdoTable1.Close;
AdoTable1.TableName:='ITEMDESP';
AdoTable1.Open;
i:=1;
While Data.Cells[data.Row,i]<> '' Do
Begin
Fila:=i;
If Data.Cells[6,Fila]<> '0' Then
Begin
AdoTable1.Insert;
AdoTable1.Fields.FieldByName('Numero').AsString := Label8.Caption;
AdoTable1.Fields.FieldByName('Codart').AsString := Data.Cells[0,Fila];
AdoTable1.Fields.FieldByName('Desart').AsString := Data.Cells[1,Fila];
AdoTable1.Fields.FieldByName('Almacen').AsString := Data.Cells[2,Fila];
AdoTable1.Fields.FieldByName('CantDesp').AsFloat :=Strtofloat(Data.Cells[6,Fila]);
// AdoTable1.Fields.FieldByName('CantDesp').AsFloat :=Strtofloat(edit1.Text);
AdoTable1.Fields.FieldByName('Anulado').AsString:='0';
AdoTable1.Fields.FieldByName('Factura').AsString := Label4.Caption;
AdoTable1.Post;
End;
i:=i+1;
End;

reina 20-09-2006 18:16:37

Hola! desde donde estas viendo lo que te graba??
Proba con value
salu2

freddiaz07 20-09-2006 23:58:58

No Entiendo?
 
Hola Amiga No entiendo tu repuesta todos las operaciones que realizo con el programa me las hace bien pero al querer grabar decimales solo me toma la parte entera ej 15,20 solo me graba 15. debe ser que me falta una conversion o algo para que me permita grabar decimales en la base de datos esta bien definido como tipo decimal.

lo que me dices de value noce donde colocarlo si me puedes escribir un ejemplo.


Gracias de antemano

Caral 21-09-2006 00:24:51

Hola freddiaz07
Veo que la variable fila la declaras tipo Byte, es para enteros, no decimales
declara fila tipo real o float, con esto sera suficiente pienso.
Saludos

Caral 21-09-2006 00:26:29

Hola algo asi:
Código Delphi [-]
Var
i, j : byte;
fila : real;
begin
Saludos

egostar 21-09-2006 00:44:44

No, no, fila es un entero que hace referencia a la matriz del Data.Cell[x,y], eso no tiene nada que ver.

Cita:

Empezado por Reina
Hola! desde donde estas viendo lo que te graba??
Proba con value
salu2

Lo que te decia Reina es que en lugar de usar AsFloat debes usar Value.



Código Delphi [-]
AdoTable1.Fields.FieldByName('CantDesp').Value :=Strtofloat(Data.Cells[6,Fila]);



Sin embargo se me hace raro que te omita los decimales, prueba cambiando el VALUE haber si se resuelve el problema.


La otra cuestión es si pruebas pasando directamente un valor Real y te daras cuenta de que lado esta el error, por ejemplo:


Código Delphi [-]
AdoTable1.Fields.FieldByName('CantDesp').Value := 12.56;
Saludos

Caral 21-09-2006 01:00:48

Bueno ya que meti las patas en la primera tengo derecho a repetir, asi aprendo:
Código Delphi [-]
AdoTable1.Fields.FieldByName('CantDesp').AsFloat :=Strtofloat(Data.Cells[6,Fila]);
Me parece que si viene de StrToFloat debe venir de string, ya que hace la transformacion.
Código Delphi [-]
AdoTable1.Fields.FieldByName('CantDesp').AsString :=Strtofloat(Data.Cells[6,Fila]);
Saludos

egostar 21-09-2006 01:06:50

No quisiera decirlo pero creo que hay otro error en tu sentencia.

Código Delphi [-]
AdoTable1.Fields.FieldByName('CantDesp').AsString :=Strtofloat(Data.Cells[6,Fila]);

//debería ser 

AdoTable1.Fields.FieldByName('CantDesp').AsString := Data.Cells[6,Fila];

Saludos.;) ;)

Caral 21-09-2006 17:11:09

Gracias egostar
Cita:

No quisiera decirlo pero creo que hay otro error en tu sentencia.
Si no lo dices como se aprende?:D
Gracias por decirlo y tomarte tu tiempo, lo analice y aprendi.
Saludos

egostar 21-09-2006 17:18:36

Cita:

Empezado por Caral
Gracias egostar

Si no lo dices como se aprende?:D
Gracias por decirlo y tomarte tu tiempo, lo analice y aprendi.
Saludos

Hombre, pues que bueno que haya servido de algo, pero a todo esto.....

Que es lo que nuestro amigo freddiaz07 ha analizado y/o aprendido, ¿ya habrá resuelto su problema?, ¿como lo resolvió?. No ha vuelto a mencionar palabra alguna, sería bueno que nos actualizara, ¿no lo crees?.

Saludos.

Caral 21-09-2006 17:27:57

:D :D :confused: :confused:
Me he dado cuenta no solo en este hilo sino en otros que parece:rolleyes:
Cita:

Agarro lo que me interesa y luego me voy
Dejando a las personas que se tomaron su tiempo con por lo menos la duda razonable de si aprendieron o no.
No te preocupes, que hay quienes como yo que le sacamos el jugo y por lo menos damos un GRACIAS POR TU AYUDA, que es lo que creo realmente vale.
Saludos

freddiaz07 21-09-2006 17:45:48

No Encuentro Solucion
 
Hola amigos gracias por sus repuesta pero todavia nada. cuando coloco la variable fila tipo: real o float me salen errores de incopatibilidad, cuando coloco .value me hace los mismo solo enteros y la otra solucion que era de quitar el .Asfloat por .Asstring me sale un error de doubles and string.

de todas maneras estoy dandole a pie en esa sola tabla a ver que pasa con otro programa a ver si resuelvo de todas maneras Gracias.

Los Foros son para Ayudarnos.

Caral 21-09-2006 18:17:17

Hola
Realmente no se que pasa pero????
Cuando tengo un problema que no puedo resolver trato de ver que pasa el el codigo sql dando un mensaje asi:
Debajo del codigo que me da el Problema:
Código Delphi [-]
Begin
AdoTable1.Insert;
AdoTable1.Fields.FieldByName('Numero').AsString := Label8.Caption;
AdoTable1.Fields.FieldByName('Codart').AsString := Data.Cells[0,Fila];
AdoTable1.Fields.FieldByName('Desart').AsString := Data.Cells[1,Fila];
AdoTable1.Fields.FieldByName('Almacen').AsString := Data.Cells[2,Fila];
AdoTable1.Fields.FieldByName('CantDesp').AsFloat :=Strtofloat(Data.Cells[6,Fila]);
// este mensaje se usa para saber si el sql envia la informacion que quiero      
Showmessage(AdoTable1.Fields.FieldByName('CantDesp').AsFloat :=Strtofloat(Data.Cells[6,Fila]);
//
// AdoTable1.Fields.FieldByName('CantDesp').AsFloat :=Strtofloat(edit1.Text);
AdoTable1.Fields.FieldByName('Anulado').AsString:='0';
AdoTable1.Fields.FieldByName('Factura').AsString := Label4.Caption;
AdoTable1.Post;
End;
Ta vez veas que pasa
Saludos

freddiaz07 21-09-2006 18:44:34

Ya Encontre Solucion
 
Hola Amigos ya encontre la solucion tube que cambiar el tipo de campo en la tabla sql de decimal a float y me funciona Gracias.


La franja horaria es GMT +2. Ahora son las 03:50:28.

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