PDA

Ver la Versión Completa : error con qreport y qrrichtext


aladelta
16-01-2008, 22:53:43
Hola amigos de nuevo:

que tal estais....

Pues os vengo a exponer un problema que llevo unos dias con el...intentando solucionar y no puedo...Trabajo con delphi 7, el qreport 4.07 y firebird 2.0

La cuestion es que necesito hacer un listado de una tabla en la que tengo un campo blob-texto...llendo al grano todo esta bien hecho ("creo"),...y lo digo porque despues de hacer todas las pruebas pertinentes el listado aparece bien con el previewmodal pero al cerrar la ventana, me dice que "system error code 1400, el identificador de la ventana no es valido", y llegue a la conclusión de que el problema me lo esta dando un componente que se llama qrrichtext y qrdbrichtext, si los pongo en el quickrep tengo el error, si los quito o los pongo en "enabled:false" no aparece el error y la ventana se cierra bien.

El listado no tiene codigo, solo enlazo qrdbtext en los campos a imprimir en sus bandas correspondientes.

He probado a desinstalar el quickreport e instalarlo de nuevo, he eliminado la el form del listado y creado uno nuevo desde cero, añadiendo uno a uno los campos a imprimir hasta que me dio el error con este en concreto, tambien he probado la 4.06 del qreport y tambien me da el error, lo he probado en otro ordenador y lo mismo, con lo que pienso que algo esta mal en este data-aware...

Quizas tengo que empezar con rave, pero primero escribo aqui a ver si algun amigo le ha pasado esto y hay solucion o existe otro componente para poder imprimir campos de texto que previamente han sido editados con un dbrichedit.

Gracias por leer...saludos

salvica
17-01-2008, 20:23:36
Hola aladelta.

Yo también tenía ese problema. Investigando lo resolví poniendo un TRichEdit en el Informe y asignandolo en OnBeforePrint de una banda SubDetail


procedure TForm_RptContratos.QRSubDetail_OnBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
var
DirProy : string;
DirRtf : string;
FileRtf : string;
AliasRtf : string;
fullName : string;
strClave : string;
strTipo : string;
begin
{ esto se ejecuta antes de imprimir la banda }
{ leer el directorio de trabajo }
DirProy := GetCurrentDir+OS_Separador+'FICHEROS';
{ crear el nombre del documento a imprimir }
with ZQuery do begin
strClave := FieldByName('ID_CLAVE').AsString;
strTipo := FieldByName('TIPO').AsString;
AliasRtf := 'CONTRATO_' + strTipo + '_' + strClave;
fullName := SISTEMA_OnReplaceChar( REEMPLAZAR, Trim(FieldByName('APELLIDO_1').AsString) ) + ' ' +
SISTEMA_OnReplaceChar( REEMPLAZAR, Trim(FieldByName('APELLIDO_2').AsString) ) + ', ' +
SISTEMA_OnReplaceChar( REEMPLAZAR, Trim(FieldByName('NOMBRE').AsString) );
end;
{ comprobar su existencia }
DirRtf := GetCurrentDir+OS_Separador+'FICHEROS'+OS_Separador+'COPIAS_CONTRATOS';
FileRtf := AliasRtf+'_'+fullName+'.rtf';
RichEdit_DOCUMENTO.Lines.Clear;
if FileExists( DirRtf+OS_Separador+FileRtf ) then begin
{ el documento existe, cargarlo }
RichEdit_DOCUMENTO.Lines.LoadFromFile( DirRtf+OS_Separador+FileRtf );
end else begin
{ el documento NO existe, no imprimir la banda }
RichEdit_DOCUMENTO.Lines.Clear;
RichEdit_DOCUMENTO.Lines.Add( 'No existe documento de CONTRATO tipo '+strTipo );
RichEdit_DOCUMENTO.Lines.Add( '' );
RichEdit_DOCUMENTO.Lines.Add( 'ID_INQUILINO: '+strClave );
RichEdit_DOCUMENTO.Lines.Add( 'Inquilino...: '+FullName );
RichEdit_DOCUMENTO.Lines.Add( 'Directorio..: '+DirRtf );
RichEdit_DOCUMENTO.Lines.Add( 'Fichero.....: '+FileRtf );
RichEdit_DOCUMENTO.Lines.Add( '' );
RichEdit_DOCUMENTO.Lines.Add( 'Plantilla...: CONTRATO_'+strTipo+'.rtf' );
RichEdit_DOCUMENTO.Lines.Add( '' );
end;
QRRichText_RTF.ParentRichEdit := RichEdit_DOCUMENTO;
end;

Lo cargo desde un fichero porque no he podido nunca almacenarlo en un campo de la tabla y ya que estamos :D ¿puedes decirme como lo haces tú?

Chao, salvica

aladelta
18-01-2008, 10:02:52
Hola salvica;

He examinado tu codigo, y lo he puesto en mi prg, pero el problema persiste. La cuestion es que al activar un componente qrrichtext o el data-aware, el listado aparece bien pero al cerrar la ventana o el programa tenemos el error.

Sigo intentando buscar otro componente que imprima campos de texto o bien tendre que pasar del qreport y aprender rave.

Por otro lado, decirte que la filosofia que usas, bajo mi punto de vista es correcta, pero no se que motor de base de datos utilizas. Si es firebird 2.0 como yo, pues los campos blob que se crean en las tablas, los puedo editar directamente con un trichedit e imprimirlos con un tqrrichtext, asignando el campo directamente, eso no tiene problema, salvo lo ya comentado.

Si te refieres a como lo hago, es de esta forma, si te refieres a otra cosa y la respuesta no te agrada, me dices que necesitas que con gusto te lo aclaro, no hay problema. Tambien decirte que cuando usaba el bde para las tablas, los memos nunca los creaba en las tablas paradox porque miles de veces de fastidiaban los indices y al recuperar con el "paradox table repair", por ejemplo, pues ocurria que los campo memo se borraban enteros, y decidi que los memo tendrian que estar en archivos de texto, y que forma mas facil que usar los archivos ".ini", que con etiquetas puedes acceder a la parte que necesites, cargarlos directamente en los trichedit y grabarlos igual, si quieres esta formula te la escribo aqui...probe este metodo en red y no hay problema de handle del archivo, o por lo menos no me dio problema alguno.

Bueno, agradecido por todo, recibe un saludo...