[Lazarus-es] Función Locate

Ismael L. Donis García ismael en citricos.co.cu
Mie Mayo 4 14:40:30 CEST 2011


El problema es que TBufDataSet no tiene los eventos que tiene TMenDataset y 
por ese hecho no me sirve, si tuviera los eventos en ese caso si me 
serviría.

Por tal motivo tengo 2 opciones:
1.- Poner los eventos al TBufDataSet
2.- Implementar la función Locate en el componente TMenDataset

Anoche estuve mirando y vi que en la units BufDataset está implementada la 
función, entonces cogí y puse en uso la units BufDataset en la units memds y 
agregé la función:

function Locate(const keyfields: string; const keyvalues: Variant; options: 
TLocateOptions) : boolean; override;

y la implementé como:


function TMemDataset.Locate(const keyfields: string; const keyvalues: 
Variant;
  options: TLocateOptions): boolean;
begin
  Result:=inherited Locate(keyfields, keyvalues, options);
end;

pensando que cuando la llamara en el componente TMenDataset me pidiera esta 
función la cual llamaría la función de la units BufDataset que esstá 
declarada de igual forma ósea:


function Locate(const keyfields: string; const keyvalues: Variant; options: 
TLocateOptions) : boolean; override;

Pero parece que no ala de la units BufDataset, sino de la units db que es 
donde tiene la declaración inicial de la siguiente forma:

function Locate(const keyfields: string; const keyvalues: Variant; options: 
TLocateOptions) : boolean; virtual;

He tratado de heredar de una función heredada, pero como yo no he trabajado 
nunca con pascal, realmente no se bien como hacerlo.

Ahora la pregunta: es posible hacer esto de alguna forma y que funcione?

Es decir que herede de la units BufDataset en la cual si está implementada 
la función.

Repito todo esto me hace falta porque en la units BufDataset no han 
implementado los eventos siguientes que si están implementados en la units 
TMenDataset

    property Filtered;
    Property Active;
    Property FieldDefs;
    property BeforeOpen;
    property AfterOpen;
    property BeforeClose;
    property AfterClose;
    property BeforeInsert;
    property AfterInsert;
    property BeforeEdit;
    property AfterEdit;
    property BeforePost;
    property AfterPost;
    property BeforeCancel;
    property AfterCancel;
    property BeforeDelete;
    property AfterDelete;
    property BeforeScroll;
    property AfterScroll;
    property OnDeleteError;
    property OnEditError;
    property OnNewRecord;
    property OnPostError;
    property OnFilterRecord;

Saludos Cordiales
=========
|| ISMAEL ||
=========
----- Original Message ----- 
From: "José Mejuto" <joshyfun en gmail.com>
To: "Spanish version of Lazarus List" 
<lazarus-es en lists.lazarus.freepascal.org>
Sent: Wednesday, May 04, 2011 4:01 AM
Subject: Re: [Lazarus-es] Función Locate


Hello Ismael,

Tuesday, May 3, 2011, 9:53:36 PM, you wrote:

ILDG> A que se debe la no corrección de Bugs del TMenDataset?. El que lo
ILDG> desarrolló a dejado de soportarlo?

Probablemente...

ILDG> No puedo ofrecerme para ello porque:
ILDG> 1ro no tengo conocimientos para eso.
ILDG> 2do no tengo conexión a Internet.
ILDG> Pero lo que no me agrada para nada es que no se le corrijan los 
problemas
ILDG> detectados. Me gustaría que lo hicieran porque la verdad que en lo 
personal

Si ha sido detectado, pero TMemDataSet ha sido "marcado" como
"deprecated" y se recomienda el uso de "TBufDataSet" en su lugar. Lo
bueno de TBufDataSet es que usa el mismo código de soporte que el
resto de SQLDataSets así que debería siempre estar más actualizado.

Te mando la página de la Wiki al respecto.

ILDG> me parece útil el componente, y de hecho he estado utilizándolo en las
ILDG> pequeñas cosas que he realizado hasta ahora, lo que me deja un poco
ILDG> atolondrado el que existan cosas en Lazarus que no sean actualizadas, 
para
ILDG> mi eso desvalora el sistema como tal.

Cuando no se actualiza algo normalmente es que hay otra cosa mejor que
se está desarrollando.

ILDG> Ahora perdona que te haga otra pregunta, no se si recuerdas que soy 
bien
ILDG> nuevo en esto,  nunca he tenido instalado delphi en mi pc, es más 
pienso
ILDG> nunca tenerlo tampoco, hasta ahora todo lo que he visto de pascal ha 
sido en
ILDG> Lazarus.
ILDG> Me podrías dar un poco más de luz con eso de la función?
ILDG> Realmente estoy atascado por este problema.

Una versión "casera" de locate sería algo como esto, aunque no tan
potente como el Locate original, claro:

function LocateCasero(const aDS: TDataSet; const aField: string; const
aToLocate: string): Boolean;
var
  oldRec: integer;
begin
  oldRec:=aDS.recno;
  aDS.First;
  while not aDS.EOF do
  begin
    if aDS.FieldByName(aField).asString = aToLocate then
    begin
      Result:=true;
      exit;
    end;
  end;
  aDS.recno:=oldRec;
  Result:=false;
end;

-- 
Best regards,
 José


--------------------------------------------------------------------------------


_______________________________________________
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