PDA

Ver la Versión Completa : FastReport con tablas en memoria


andriy_89
29-01-2013, 14:09:07
Pues eso, como dice el título, necesito conectar el fr con los datos que tengo guardados en una table en memoria.
Tengo un proyecto donde saco los datos con un ClientDataSet y luego otro ClientDataSet (este no tiene ninguna conexión) que utiliza las tablas del primero. Y a la hora de agregar los campos en el fr pues no me sale...
Alguien me echa una mano? Por mas que busco no encuentro nada...

AzidRain
30-01-2013, 00:22:47
Tienes que enlazar el reporte NO con el ClientDataset que trae los datos sino con el que no tiene conexión. Aunque con tan poca información es lo más que se me ocurre.

andriy_89
30-01-2013, 10:22:33
A ver me explico un poco mas, tengo un ClientDataSet1 con el que obtengo los datos de la base de datos, luego tengo ClientDataSet2 (este no tiene conexión ninguna) que obtiene los datos del ClientDataSet1. Luego tengo un frxDBDataSet que enlazo con el ClientDataSet2 y creo el informe. Al agregar data al fr agrego el frxDBDataSet pero no me saca los campos y no puedo trabajar con el...espero que te quede todo mas claro.
Espero sus ayudas

Combat-F2D
30-01-2013, 12:06:29
estas seguro de tener definidos los campos del ClientDataSet2 que enlazas al frxDBDataSet?
has comprobado que la consulta o activacion del ClientDataSet2 devuelve campos como debería de ser?

andriy_89
30-01-2013, 12:38:09
La cosa esta en que el ClientDataSet2 no tiene ninguna consulta, se le van introduciendo los datos desde el código por lo que tampoco lo puedo activar...

Combat-F2D
30-01-2013, 14:09:06
y no puedes definir previamente en diseño los campos que empleará?
así podrias enlazarlos con el frxdataset y tenerlos disponibles psra su uso dentro drl frxreport

andriy_89
30-01-2013, 18:53:17
Efectivamente, por fin lo he solucionado! Muchas gracias

andriy_89
31-01-2013, 17:12:38
Ahora tengo el problema de que quiero reutilizar el ClientDataSet para crear otro informe con una query diferente (el resultado tiene campos diferentes).
Por lo que empiezo cambiando la estructura desde el código:

DataSet.FieldDefs.Clear;
DataSet.FieldDefs.Add('nombre', ftString, 30, False);

en esta última linea me da un error de Field ... not found.

Alguna solución??

Al González
31-01-2013, 17:21:16
Agrega antes: DataSet.Fields.Clear; (eliminar los objetos campos del conjunto de datos). :)

andriy_89
31-01-2013, 18:38:34
Agrega antes: DataSet.Fields.Clear; (eliminar los objetos campos del conjunto de datos). :)

muchas gracias!! :D:D Ahora el problema que tengo es que no me actualiza los campos del DataSet y al agregarlos al fastreport y ejecutar me da error diciendo que no los encuentra.... AYUDA PLEASE

Al González
31-01-2013, 19:16:18
Código y mensaje de error exacto...please! :rolleyes:

andriy_89
01-02-2013, 10:24:25
with MTRaveCurso1 do // REDEFINO LA ESTRUCTURA
begin
Active := False;
Fields.Clear;
FieldDefs.Clear;
FieldDefs.Add('nombre', ftString, 30, False);
FieldDefs.Add('apellidos', ftString, 30, False);
FieldDefs.Add('asignatura', ftString, 30, False);
CreateDataSet;
end;

// HAGO UNA CONSULTA SQL CON CLIENTDATASET

while not CDSActualiza.Eof do // LOS VOY METIENDO EN UNA TABLA
begin
with MTRaveCurso1 do
begin
Append;
FieldByName('nombre').AsString := CDSActualiza.FieldByName('nombre').AsString;
FieldByName('apellidos').AsString := CDSActualiza.FieldByName('apellidos').AsString;
FieldByName('asignatura').AsString := CDSActualiza.FieldByName('asignatura').AsString;
Post;
end;
CDSActualiza.Next;
end;

frxReport1.ShowReport();

Hasta aquí bien, pero cuando abre el informe FALLA: Field not found: frxDBDataset1,"nombre", Field not found: frxDBDataset1,"apellidos", Field not found: frxDBDataset1,"asignatura"

Espero tu ayuda!