11.05.2013 Views

La Cara Oculta de Delphi 6

La Cara Oculta de Delphi 6

La Cara Oculta de Delphi 6

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

860 <strong>La</strong> <strong>Cara</strong> <strong>Oculta</strong> <strong>de</strong> <strong>Delphi</strong> 6<br />

Supongamos que hemos <strong>de</strong>finido una tabla Banners con el siguiente esquema (utilizo<br />

el dialecto <strong>de</strong> InterBase), y que el contenido <strong>de</strong>l campo Imagen es precisamente una<br />

imagen en formato JPEG:<br />

create table BANNERS (<br />

IDBanner integer not null primary key,<br />

URL varchar(127) not null unique,<br />

Imagen blob<br />

);<br />

Para simplificar, asumiremos que la columna IDBanner contiene valores enteros sucesivos,<br />

contando <strong>de</strong>s<strong>de</strong> cero. No es muy complicado mantener esta secuencia si tras<br />

cualquier inserción o borrado en la tabla ejecutamos un procedimiento <strong>de</strong> enumeración.<br />

Entonces el siguiente método <strong>de</strong> respuesta a una acción muestra una <strong>de</strong> las<br />

imágenes <strong>de</strong> la tabla, suponiendo que se recibe el código asociado a la misma en uno<br />

<strong>de</strong> los parámetros <strong>de</strong> la petición:<br />

procedure TWebModule1.acBannerAction(Sen<strong>de</strong>r: TObject;<br />

Request: TWebRequest; Response: TWebResponse;<br />

var Handled: Boolean);<br />

begin<br />

qrCount.Open;<br />

try<br />

qrBanner.ParamByName('BannerID').AsInteger :=<br />

Random(qrCount.Fields[0].AsInteger);<br />

finally<br />

qrCount.Close;<br />

end;<br />

qrBanner.Open;<br />

try<br />

Response.ContentType := 'image/jpeg';<br />

Response.ContentStream :=<br />

qrBanner.CreateBlobStream(qrBannerImage, bmRead);<br />

finally<br />

qrBanner.Close;<br />

end;<br />

end;<br />

El ejemplo utiliza dos consultas, qrCount y qrImage, basadas en estas dos instrucciones<br />

<strong>de</strong> selección:<br />

select count(*) from BANNERS<br />

select Image from BANNERS where BannerID = :BannerID<br />

En primer lugar, la respuesta al evento abre una consulta para recuperar el número<br />

<strong>de</strong> imágenes que hay en la tabla. Sin pausa alguna, pasa el valor obtenido por la función<br />

Random para obtener un i<strong>de</strong>ntificador <strong>de</strong> fila aleatorio. Entonces recupera la fila<br />

en cuestión.<br />

NOTA IMPORTANTE<br />

Hay que tener mucho cuidado con la función Random. Esta función genera una sucesión<br />

<strong>de</strong> números <strong>de</strong> apariencia aleatoria a partir <strong>de</strong> un valor inicial, o semilla. El caso

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!