PDA

Ver la Versión Completa : Porque fibClientDataset no regresa el registro actual ????


AGAG4
29-02-2008, 19:27:06
Buen dia compañeros, estoy empezando a cascarear ó a probar los fibClientDataset de los fibPlus, con el unico objetivo de que en estos componentes tiene una herramienta muy buena de las tantas que tiene, que es la de poder crear campos AGREGADOS, hasta aqui vamos bien, el problema viene cuando quiero tomar el registro actual, este componente lo uso para un detalle, del cual tengo como llave primaria un campo INDICE de tipo entero, donde tiene que tomar un numero diferente en cada registro, he realizado pruebas en los diferentes eventos del fibClientDataset Beforepost, Afterpost, BeforeInsert y AfterInsert, ejemplo:


CDSDetalleIndice.AsInteger := CDSDetalle.RecNo;


Y todo el tiempo toma el dato -1, checando en el fuente DB.pas, miro alro raro en las 2 funciones con que se relacionan esta propiedad: :eek:


DB.pas
....
//Siempre Regresa -1
function TDataSet.GetRecNo: Integer;
begin
Result := -1;
end;
//Función Vacia
procedure TDataSet.SetRecNo(Value: Integer);
begin
end;
.....


No quiero usar los memoryData para tomar una copia del fibclientdataset y posteriormente regresarme la posición del registro, quiero que el propio fibClientDataset lo haga, espero alguien me pueda orientar ó ayudar con cualquier comentario al respecto....

Lepe
29-02-2008, 19:45:09
En realidad, tienes que mirar la implementación de los FIbPlus

function TFibClientDataSet.GetRecNo: Integer;

o bien, si el origen de datos es un TIBDataset, pues la implementación de ellos que redefinen (override) el comportamiento de los TDatasets de delphi.

En todo caso, creo que yendo al último registro de tu dataset, después te dará el valor correcto. Es un tema recurrente en todos los componentes c/s.

Saludos

AGAG4
01-03-2008, 00:19:34
En realidad, tienes que mirar la implementación de los FIbPlus

function TFibClientDataSet.GetRecNo: Integer;

o bien, si el origen de datos es un TIBDataset, pues la implementación de ellos que redefinen (override) el comportamiento de los TDatasets de delphi.

En todo caso, creo que yendo al último registro de tu dataset, después te dará el valor correcto. Es un tema recurrente en todos los componentes c/s.

Saludos


Creo que no me explique bien LEPE, cuando digo que no me funciona el RECNO, es por que la tabla del clientdataset esta vacia, es decir, voy a meter registros nuevos a un campo en este caso lo llamo INDICE de tipo entero, lo tengo como llave primaria, por lo tanto en los eventos Before,After Insert y Post del fibClientDataset ya le puse la asignación a ese campo del RECNO y me devuelve en cada registro el valor -1, por lo tanto me marca error de PK al guardar, con los Dataset's del fibPlus si funcionan, se me hace raro que con los ClientDataset no se pueda....

AGAG4
04-03-2008, 02:59:06
Creo que no me explique bien LEPE, cuando digo que no me funciona el RECNO, es por que la tabla del clientdataset esta vacia, es decir, voy a meter registros nuevos a un campo en este caso lo llamo INDICE de tipo entero, lo tengo como llave primaria, por lo tanto en los eventos Before,After Insert y Post del fibClientDataset ya le puse la asignación a ese campo del RECNO y me devuelve en cada registro el valor -1, por lo tanto me marca error de PK al guardar, con los Dataset's del fibPlus si funcionan, se me hace raro que con los ClientDataset no se pueda....

Tuve que hacer una mexicanada, si asi lo quieren llamar, tengo una tabla maestra solo le agregue un campo entero, donde cada vez que entra al evento beforeinsert en la tabla detalle, le voy incrementando en 1 a dicho campo para llevar ese control en el detalle.... :)