PDA

Ver la Versión Completa : php+blob_firebird+TRichview


apicito
02-08-2005, 17:02:07
Tengo un sistema de gestión administrativa en delphi7 win32 que edita textos a través del componente Trichview y los graba en firebird 1.5 como blob. Ahora estoy implementando algunas consultas web sobre estos registros y me encuentro con el problema de que tengo que convertir los textos blob a html para presentarlos en la web. Dado que TRichview tiene un formateo de textos propietario no consigo mostrarlos directamente con las funciones blob que trae el php.
La solución que se me ocurre es crear un pequeño ejecutable delphi que lea los registros, los transforme a hltm (esta función la realiza el componente Trichview) y los grabe en un fichero de texto que la web lee e imprime en el navegador.
Me surgen las siguientes dudas:
1. La más importante, será demaiado oneroso para el servidor este proceso.
2. Como hago para que el script php espere a que se acabe de ejecutar el programa delphi.
3. Que tipo de proyecto debo crear para que el programa delphi sea lo más pequeno posible.

apicito
05-08-2005, 09:02:04
Por si alguien consulta este hilo voy a exponer como solucioné el tema:
Hice un cgi (ahora quiero cambiarloa un apache share module) que hace la consulta a la base de datos y a través de streams trapaso el valor del campo a un objeto TRichview para que formatee el texto y, desde este, con el metodo para exportar a htmlstream lo devuelvo a la web.
A pesar de que TRichview en principio no está hecho para funcionar en web esto funcionó. Pongo un código de ejemplo:
procedure TWebModule1.WebModule1WebActionItem3Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var f : TStream;
s : TMemoryStream;
Rve: TRichView;
Rvs : TRVStyle;
begin
Rvs:=TRVStyle.Create(self);
Rve:=TRichView.Create(self);
Rve.Visible:=False;
Rve.Style:=Rvs;
with Query do
begin
Sql.Clear;
Sql.Add('Select MOD_TEXTO from MOD where MOD_CODIGO=1007');
try
Open;
except
Response.Content:='<h1> tabla</h1><p><p>No se encuentran datos</p>';
Exit;
end;
end;
f:=TMemoryStream.Create;
f := Query.CreateBlobStream(Query.FieldByName('MOD_TEXTO'), bmRead);
rve.LoadRVFFromStream(f);
f.Free;
s:=TMemoryStream.Create;
rve.SaveHTMLToStream(s,'','','',[]);
s.Position:=0;
Response.ContentStream:=s;
end;
y en el php
include("http://localhost/cgi-bin/p1/texto");
donde p1 es el cgi y texto el nombre de la acción (pathinfo).
Espero que le sirva a alguien.