Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con Firebird y Date (https://www.clubdelphi.com/foros/showthread.php?t=68024)

Paulao 20-05-2010 15:50:26

Problemas con Firebird y Date
 
hizo la function abajo:
Código Delphi [-]
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:
Código Delphi [-]
ShowMessage(FloatToStr(PegaVendaPorCaixa('53',now)));

Casimiro Noteví 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.

Código Delphi [-]
  ....................................................................
  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:
Código Delphi [-]
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:
Código Delphi [-]
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:

Código Delphi [-]
    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

yo lo veo bien
 
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.
Código Delphi [-]
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;


La franja horaria es GMT +2. Ahora son las 02:04:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi