lunes, 23 de marzo de 2009

Scroll en resoluciones bajas

Esta vez va de diseño,

El escenario es un buscador telefónico para un partner en otro país. El principal problema que nos hemos encontrado los programadores es que no conocemos la resolución con la que se está visualizando nuestra aplicación Web. Esto, junto a los dictados de la moda actual para el diseño de páginas centraditas y con amplios y limpios márgenes a ambos lados, nos dio el resultado de que en resoluciones bajas (1024) la página queda descentrada hacia la derecha al tener valores absolutos para las medidas de las tablas.

La solución de pasar a valores relativos, aparte de costosa en tiempo, nos suponía destrozar literalmente la armonía del conjunto. En vez de eso nos propusimos engañar al navegador, modificando los valores de la barra horizontal de scroll para que la situase en el centro exacto de nuestro conjunto.

La manipulación del scroll, la haremos por código de cliente, por JavaScript mismo, fabricando la siguiente función, que llamará a la propiedad scrollBy de Windows a la cual le pasaremos los pixeles desde la izquierda y desde arriba:


function CenterScroll()
{
window.scrollBy(512,0)
}


Con esta función adecuadamente llamada, por ejemplo, en el onLoad del BODY, conseguiremos que nuestro diseño centrado esté perfecto para resoluciones normales y que cuando la aplicación sea ejecutada en resoluciones más bajas de monitor, no perdamos el tiempo con las dichosas barritas.

Un placer y ¡¡hasta la próxima!!

miércoles, 28 de enero de 2009

Comilla or not Comilla

Buenas, 

Voy a exponer un caso de bricolaje constructivo en Transact SQL. Un compañero de la empresa necesitaba ejecutar una consulta pasándole el nombre de la tabla por una variable. Todos sabemos que eso es imposible, sin embargo hay una manera bastante común que es darle la vuelta a la consulta, meterla en una variable y luego ejecutarla en un exec:

Declare @Tabla as nvarchar (15)
Declare @Consulta as nvarchar(100)
Select @Consulta='Select * from '+@Tabla
Exec(@Consulta)

Los problemas empiezan cuando la consulta de mi amigo no cabe en un campo de texto normal y tampoco podemos recurrir a los campos binarios de Text, NText o Image porque no se pueden declarar variables de esta manera (No reservan espacios en memoria, generan pequeños archivos completos en local y almacenan punteros en memoria posteriormente). Este segundo escollo lo superamos incrustando el código directamente en el Exec:

Declare @Tabla as nvarchar (15)
Exec('Select * from '+@Tabla)

Pero desgraciadamente un tercer problema nos tuvo un pequeño rato entretenidos, necesitamos meter un where fijo sobre un campo de texto (la porra de las comillas ataca de nuevo), lo más fácil sería pensar en un +Char(39) + Peeero el problema es que el comando Exec no admite que le metamos esa funcioncita, dando un error de sintaxis. 
Pues bien, la solución es tan sencilla como absurda, se trata de timar al sistema haciendole creer que le vamos a pasar otra variable. Solo que esa variable contendrá nuestra ansiada comilla simple:

Declare @Tabla as nvarchar (15)
Declare @Comilla as char (1)
Select @Comilla=Char(39) 
Exec('Select * from '+@Tabla+' where [ID]='+@Comilla+'3'+@Comilla)

Con esto solucionamos el problema de la absurda restricción del comando EXEC

Un saludo.