Forum > Spanish

Insertar registro númerico con más de 4 decimales

<< < (2/2)

Edson:
No trabajo mucho con Base de datos en Lazarus, pero en tu lugar verificaría las funciones que llevan valores al SQL. Tal vez en alguna parte se truncan los decimales, o usan el tipo Single de baja precisión.

GAN:
A ver si esto te sirve: http://mc-computing.com/Databases/Delphi/QueryParameters.html


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TxxDataSet.FloatPut(Field: string; A_Value: Double);begin  with Params.CreateParam(ftFloat, Field, ptInput) do    AsFloat := A_Value;end;
Saludos.

esdonis:
La verdad que no se como agregar ese procedimiento al TSQLQuery.

Yo al pasar el sql al query ya trae implicitos los parametros usados:

por ejemplo hago:

rsuvt.SQL.Clear;            
rsuvt.SQL.Text := 'insert into tabla (..., cantidad) values  (..., :fCan)';
rsuvt.Params.ParamByName('fCan').AsFloat:=1.012345;

Pero el sql es dinamico por lo que cambia el numero de parametros en dependencia de la consulta y los campos a actualizar

En este ejemplo me guarda el dato como 1.012300

GAN:
Parameters in TSQLQuery.SQL

In most situations, the SQL property of TSQLQuery will contain the select statement which in most situations doesn't need parameters. However, it can contain them. This allows a very easy and powerful way to filter your records.

Parameters have the following advantages:

 no need to format your data as SQL text, date etc arguments (i.e. no need to remember how to format a date for MySQL, which might differ from the Firebird implementation; no need to escape text data like O'Malley's "SQL Horror"

Esto dice la wiki de Free Pascal.

Por qué no intentas insertar la fila con TSQLTransaction.ExecuteDirect ? Ahí se manda todo texto y no deberías tener problemas. Te dejo el link en español de la wiki respecto de como hacer esto último: http://wiki.freepascal.org/SqlDBHowto/es#.C2.BFC.C3.B3mo_ejecutar_consultas_directas_o_crear_una_tabla.3F

esdonis:
Ese metodo lo conozco, y al utilizarlo me inserta bien los datos.

Pero lo que queria era solucionar el problema que tiene Lazarus con los parametros numericos cuando estos tienen mas de 4 decimales. Ya que esto es un problema que va a afectar a todos los que lo usen.

Por ahora de forma temporal estoy insertando el valor de forma directa:

Por ejemplo tengo que hacer lo que sigue:

scant:=AnsiReplaceStr(FormatFloat('#0.000000', ds.FieldByName('cantidad').AsFloat), ',', '.');
sexit:=AnsiReplaceStr(FormatFloat('#0.000000', ds.FieldByName('exist').AsFloat), ',', '.');

strsql := 'insert into vtractual (idac, ida, num, fecha, factura, importe, idp, codigo, desp, um, area, idcto, cantidad, pre1, pre2, saldo1, saldo2, exist, clave) ';
strsql := strsql + 'values (:iEnt, :iAlm, :iNum, :dFec, :sFac, :cImp, :iIdp, :sCod, :sDes, :sUm, :sArea, :iIdc, ' + scant + ', :cPcup, :cPcuc, :cVcup, :cVcuc, ' + sexit + ', :sCla)';

Navigation

[0] Message Index

[*] Previous page

Go to full version