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 ||
=========
Earlier message 81 lines
----- 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�
--------------------------------------------------------------------------------