[Lazarus-es] Uso de par?metros opcionales o polimorfismo.

Ismael L. Donis Garc?a ismael en citricos.co.cu
Jue Dic 24 20:50:40 CET 2009


Los agrego de la siguiente forma:

      strsql := 'select mpmovinv.fecha from mpmovinv where 
(((mpmovinv.fecha)>:dFecha) and ((mpmovinv.entidad)=:sEntidad)) union all 
select mpmovdia.fecha from mpmovdia where (((mpmovdia.fecha)>:dFecha) and 
((mpmovdia.entidad)=:sEntidad)) order by 1 desc';
      List1 := TStringList.Create;
      List2 := TStringList.Create;
      List1.Add('sEntidad');
      List2.Add(dtm.strentidad);
      List1.Add('dFecha');
      List2.Add(formatdatetime('yyyy/mm/dd',EndOfTheMonth(dtmfecha)));
      ejecrsbuscar(strsql, true, false, List1, List2);
      List1.Free;
      List2.Free;


En el procedimiento como verás pongo un ShowMessage y me muestra la fecha 
como 2009-11-30 de la forma correcta.
Como bien dices la configuración local de la PC es dd/mm/yyyy y no 
yyyy/mm/dd pero siempre he puesto esa configuración para asegurarme que 
realice la consulta con la fecha de forma correcta sin interesarme por el 
formato de la fecha corta que tenga el sistema.

Como podría solucionar ese dilema de forma dinámica, ósea que me coja la 
configuración que tenga el sistema sin yo modificarla.


procedure Tfrmdatgmp.ejecrsbuscar(sqlstr: string; blnopen: boolean;
  blnwrite: boolean; LParam: TStrings; LValor: TStrings);
var
  i: Integer;
begin
  ejecrsbuscar();
  if blnopen then
    begin
      rsbuscar.ReadOnly := blnwrite;
      rsbuscar.SQL.Text := sqlstr;
      for i := 0 to LParam.Count - 1 do begin
        if leftstr(LParam[i], 1) = 's' then
          rsbuscar.Params.ParamByName(LParam[i]).AsString:=LValor[i]
        else
          begin
            showmessage(LValor[i]);
            rsbuscar.Params.ParamByName(LParam[i]).AsDate:=StrToDate(LValor[i]);
          end;
      end;
      trabuscar.StartTransaction;
      rsbuscar.Open;
    end;
end;


procedure Tfrmdatgmp.ejecrsbuscar();
begin
  try try
    if trabuscar.Active then trabuscar.Commit;
  except on e:exception do
    trabuscar.Rollback;
  end;
  finally
    trabuscar.EndTransaction;
  end;
  rsbuscar.Close;
  rsbuscar.SQL.Clear;
end;



=========
¦¦ ISMAEL ¦¦
=========
----- Mensaje original ----- 
De: "JoshyFun" <joshyfun en gmail.com>
Para: "Spanish version of Lazarus List" 
<lazarus-es en lists.lazarus.freepascal.org>
Enviado: jueves, 24 de diciembre de 2009 12:19
Asunto: Re: [Lazarus-es] Uso de par?metros opcionales o polimorfismo.


Hello Ismael,

Thursday, December 24, 2009, 4:29:22 PM, you wrote:

ILDG> Trato de pasar la fecha como 2009-11-30 y me pone un 20
ILDG> delante, no se porqué: lo agrego a la lista de la siguiente
ILDG> forma:
ILDG> Lista.Add(formatdatetime('yyyy/mm/dd',EndOfTheMonth(dtmfecha)));

Haz justo antes de esa linea algo como:

TempString:=formatdatetime('yyyy/mm/dd',EndOfTheMonth(dtmfecha));
Application.MessageBox(pchar(TempString),'',0);

Si ahí sale la fecha mal es que falla el "formatdatetime".

Por cierto no pones como le pasas el parámetro al query ya que
sospecho que lo harás con "StringToDate" y ahí tendrías un problema,
StringToDate usa el "locale" actual que no es (supongo) yyyy/mm/dd

-- 
Best regards,
 JoshyFun


_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es






More information about the Lazarus-es mailing list