PDA

Ver la Versión Completa : Problemas con Firebird y Date


Paulao
20-05-2010, 15:50:26
hizo la function abajo:
function PegaVendaPorCaixa(pComputador: String;
pData: TDateTime): Double;
var
sql: String;
lQuery : tQualquerQuery ;
begin
lQuery := tQualquerQuery.Create( objDataBaseMidle ) ;
with lQuery do
begin
sql.add('select sum(n_vlr_total_ped)total from tbl_pedido ');
sql.add('where id_computador = ' + pComputador);
sql.add(' and d_ent_ped = ' + pData);
try
open;
if RecordCount > 0 then
Result := lQuery.FieldValues['total'];
except
on e: exception do
begin
MessageDlg( e.Message, mtError, [ mbOk ], 0 ) ;
end ;
end;
end;
end;
Que pasa es que estoy con problemas en la llamada a la function, pues en Brasil las dates son: DD/MM/YYYYY y en FB son MM/DD/YYYY, pero que no eh logrado exito con la llamada, tipo:
ShowMessage(FloatToStr(PegaVendaPorCaixa('53',now)));

Casimiro Notevi
20-05-2010, 15:57:56
En firebird puedes usar 'dd.mm.yyyy', 'mm/dd/yyyy' y creo que también 'yyyy-mm-dd'

Caro
20-05-2010, 16:04:09
Hola Paulao, debes formatar la fecha o utilizar parámetros.


....................................................................
with lQuery do
begin
sql.add('select sum(n_vlr_total_ped)total from tbl_pedido ');
sql.add('where id_computador = ' + pComputador);
sql.add(' and d_ent_ped = ' + FormatDateTime('mm/dd/yyyy', pData));

.......................................................


Saluditos

Paulao
20-05-2010, 16:29:54
Hizo o FormateDate y puzo asi em mi llamada:
ShowMessage(FloatToStr(PegaVendaPorCaixa('53',StrToDate('13/01/2010'))));
El error es: Modify Request. Error Conversion from String y viene unos numeros.
Mi funcion estas asi:
function PegaVendaPorCaixa(pComputador: String;
pData: TDateTime): Double;
var
sql: String;
lQuery : tQualquerQuery ;
begin
lQuery := tQualquerQuery.Create( objDataBaseMidle ) ;
with lQuery do
begin
sql.add('select sum(n_vlr_total_ped)total from tbl_pedido ');
sql.add('where id_computador = ' + pComputador);
sql.add(' and d_ent_ped = ' + FormatDateTime('mm/dd/yyyy', pData));
try
sql.savetofile('c:\lixo\tt.txt');
open;
if RecordCount > 0 then
Result := lQuery.FieldValues['total'];
except
on e: exception do
begin
MessageDlg( e.Message, mtError, [ mbOk ], 0 ) ;
end ;
end;
end;
end;

Paulao
20-05-2010, 16:32:59
Creo que el problema sea las comas que fueran colocadas en la llamada.

Paulao
20-05-2010, 16:33:42
Que no fueran

Caro
20-05-2010, 16:48:04
Hola de nuevo, añade comillas a tu fecha, puedes hacerlo con QuotedStr:


sql.add('select sum(n_vlr_total_ped)total from tbl_pedido ');
sql.add('where id_computador = ' + pComputador);
sql.add(' and d_ent_ped = ' + QuotedStr(FormatDateTime('mm/dd/yyyy', pData)));


Saluditos

Crisperre
20-05-2010, 16:54:08
Hola.

Yo lo veo bien, una vez tuve un problema parecido en un cliente era con un campo Time y al final fue porque habian tocado en la configuración regional y de idioma del windows. Lo puse yo al valor correcto y funcionó.

No sé si tendrá algo que ver, pero pr comprobarlo no pierdes nada

un saludo

duilioisola
20-05-2010, 17:08:38
La solución a todo esto es no utilizar un string para pasar una fecha sino un parámetro.
function PegaVendaPorCaixa(pComputador: String;
pData: TDateTime): Double;
var
sql: String;
lQuery : tQualquerQuery ;
begin
lQuery := tQualquerQuery.Create( objDataBaseMidle ) ;
with lQuery do
begin
sql.add('select sum(n_vlr_total_ped)total from tbl_pedido ');
sql.add('where id_computador = ?id_computador ');
sql.add(' and d_ent_ped = ?d_ent_ped ');
try
{Parametros --------------------------------------------}
Params.ByName['ID_COMPUTADOR'].AsString := pComputador;
Params.ByName['D_ENT_PED'].AsDateTime := pData;
{Parametros --------------------------------------------}
sql.savetofile('c:\lixo\tt.txt');
open;
if RecordCount > 0 then
Result := lQuery.FieldValues['total'];
except
on e: exception do
begin
MessageDlg( e.Message, mtError, [ mbOk ], 0 ) ;
end ;
end;
end;
end;