Cambiar el color del scrollbar en Internet Explorer 11

Trabajando con la versión 11 de Internet Explorer, es un fastidio no poder distinguir la scrollbar por ser de un color gris muy tenue, no lograba distinguir si la barra estaba hacia la izquierda o a la derecha, para mi gusto, el color intenso de la barra debería ser el color primario.

Buscando en los foros de ayuda me topo con esta solución.

Los pasos son:

  1. Menú: Herramientas.
  2. Opciones de internet.
  3. Ficha General
  4. Botón Accesibilidad.
  5. En Hojas de estilo del usuario, seleccionar la opción de Hojas de Estilos y a continuación buscar el archivo de estilos correspondientes.
  6. Hacer clic en Aceptar en esta ventana y la siguiente.

Esta es la hoja de estilo que integré:

html {
scrollbar-base-color: #999999;
scrollbar-arrow-color: #888888;
scrollbar-track-color: #e5e5e5;

scrollbar-shadow-color: gray;
scrollbar-lightshadow-color: black;
scrollbar-darkshadow-color: gray;

scrollbar-highlight-color: white;
scrollbar-3dlight-color: black;
}

Usando la misma paleta de colores en todo el reporte en Reporting Services (SSRS)

Si deseas usar una misma paleta de colores para los gráficos, para que los colores sean consistentes, la forma común de hacerlo es aplicar la misma paleta de colores a cada gráfico.

Si usas las paletas de colores predefinidos, no tendrías mayores problemas, sin embargo, para aquellos que queremos usar una paleta personalizada, puede ser un problema, configurar en cada grafico y volver a crear la misma paleta de colores personalizada, una y otra vez. Con el consiguiente problema de que si deseas cambiar la paleta, debes ir nuevamente a configurarlo.

Una forma que se tiene de solventar este probema es creando un snippet en la parte del código del reporte. En este enlace pueden encontrar mas detalles: Specify Consistent Colors across Multiple Shape Charts (Report Builder and SSRS).

La ventaja que provee es que la paleta de colores se mantiene en un solo lugar y facilita las modificaciones y con el mínimo esfuerzo permite reusar este misma paleta en otros reportes.

Private colorPalette As String() = {"Color1", "Color2", "Color3", "Color4", "Color5", "Color6"}<span id="mce_SELREST_start" style="overflow:hidden;line-height:0;"></span>
Private count As Integer = 0
Private mapping As New System.Collections.Hashtable()
Public Function GetColor(ByVal groupingValue As String) As String
    If mapping.ContainsKey(groupingValue) Then
        Return mapping(groupingValue)
    End If
    Dim c As String = colorPalette(count Mod colorPalette.Length)
    count = count + 1
    mapping.Add(groupingValue, c)
    Return c
End Function

El codigo mencionado en el enlace, funciona bien y está basado en una tabla de hash para que los valores iguales muestren el mismo color.

Habemos algunos que requerimos que los colores se reinicien por cada gráfico, para que vuelva a empezar por el color1. Para ello, modifique ligeramente el código anterior y adaptarlo del siguiente modo:

Private colorPalette As String() = {"Color1", "Color2", "Color3", "Color4", "Color5", "Color6"}
Private groupConsolidate  As New System.Collections.Hashtable()

Private Function GetColorValue(ByRef hashValues As System.Collections.Hashtable, ByVal groupingValue As String) As String
	If hashValues.ContainsKey(groupingValue) Then
		Return hashValues(groupingValue)
	End If
	Dim c As String = colorPalette(hashValues.Count Mod colorPalette.Length)
	hashValues.Add(groupingValue, c)
	Return c
End Function

Public Function GetColor(ByVal groupValue As String, ByVal groupingValue As String) As String
	If groupConsolidate.ContainsKey(groupValue) Then
		Return GetColorValue(groupConsolidate(groupValue), groupingValue)
	End If

	groupConsolidate.Add(groupValue, New System.Collections.Hashtable())
	Return GetColorValue(groupConsolidate(groupValue), groupingValue)
End Function

La forma de usarlo es similar. Se agrega un identificador al inicio que represente el nombre de la gráfica o el agrupador de las series.

=Code.GetColor("NombreGrafica",Fields!MyCategoryField.Value)

SQL Server – Remplazar los TAB \t, Line Feed \n en un string varchar

Me toco que tenia un string varchar, aclaro que era varchar porque no hice las pruebas para nvarchar. Bien como decía, al querer procesar una dimensión me marcaba error en una fila, aislé esa fila y lo que creia era una descripcion igual y que no deberia marcar error, al parecer no lo era.

Primero convertí la cadena a hexadecimal para compararlos.

SELECT CONVERT(VARBINARY(MAX), Description)
FROM Table

Después ya que identifique que eran distintos, noto que tenia TAB (\t) y Line Feed(\n)

para reemplazarlo, lo hice en dos partes, no fue elegante, pero funciona y para lo que requeria era suficiente.

UPDATE t SET Description= REPLACE(Description, CHAR(9), '')
FROM Table t

 

UPDATE t SET Description= REPLACE(Description, CHAR(10), '')
FROM Table t

Si cuando vean que el string al convertirlo a hexadecimal no reconocen a simple vista el codigo ASCII, siempre tendrán a la mano la Wikipedia.

Oracle, Claúsula ESCAPE en LIKE, usar el guión bajo (underscore) _

En Oracle, el LIKE nos pemite hacer una búsqueda de patrones usando los ‘%’ o los ‘_’ sin embargo queremos buscar precisamente esos carateres debemos usar la claúsula ESCAPE e indicar que caracter de escape se usara.

SELECT * FROM Tabla WHERE Variable LIKE '\_%' ESCAPE '\'

La anterior consulta nos mostrará aquellas filas que contengan en la columna ‘Variable’ el patrón ‘_%’ es decir que empiece con guión bajo (underscore).

Para mas información referirse a la Documentación de oracle.

SQL Server – Insertar Datos a una tabla desde otra. INSERT INTO SELECT FROM TABLE, SELECT INTO FROM TABLE

Existen dos formas de insertar datos de una tabla a otra, la primera es creando la estructura de la tabla destino y luego haciendo un INSERT INTO SELECT FROM TABLE o creando al vuelo la tabla e insertando los datos en la misma instruccion.

El Primero Modo es como se describe a continuación:

--Crear Tabla Destino
CREATE TABLE TablaDest (Col1 VARCHAR(100), Col2 VARCHAR(100))
--INSERT INTO TablaDest usando SELECT
INSERT INTO TablaDest (Col1, Col2)
SELECT Col1, Col2
FROM TablaFuente
WHERE --<Condicion>

La segunda forma de hacerlo es así:

--Crear una nueva tabla al tiempo que seleccionamos los datos desde la tabla fuente
SELECT Col1, Col2
INTO TablaDest
FROM TablaFuente
WHERE --<Condicion>

Ambos modos funcionan también con tablas temporales.

1Saludo

SSIS: Error en OLE DB Source

Me aparecio este warning/error cuando revisaba un paquete de SSIS (SQLServer Integration Services).

Cannot retrieve the column code page info from the OLE DB Provider. If the component supports the “DefaultCodePage” property, the code page from that property will be used. Change the value of the property if the current string code page values are incorrect. If the component does not support the property, the code page from the component’s locale ID will be used.

Al parecer esto se soluciona en las propiedades del objeto, en la parte de AlwaysUseDefaultCodePage lo dejamos en True y la advertencia desaparece.

1Saludo

Database diagram support cannot be installed because this database does not have a valid owner. Solucionado

Este error se presento al querer mostrar los diagramas de SQL Server, al principio crei que se debia a un error de configuración en el cliente del SQL Server Management Studio, sin embargo el error que mencionaba era el siguiente.

Database diagram support cannot be installed because this database does not have a valid owner.
To continue, first use the Files page of the Database Properties dialog box or ALTER AUTORIZATION statement to set the database owner to a valid login, then add the database diagram suppoert objects.

Como se menciona en el mensaje habra que establecer un usuario válido como dueño de la Base de Datos, en mi caso tenia el de NombreMaquina\Administrator. asi que se lo cambie al usuario sa

ALTER AUTHORIZATION ON DATABASE::dbname TO sa

O bien desde la interfase gráfica del SQL Server Management Studio.

Si esto no funciona prueba, esta otra solución o revisen este hilo.

Saludos.

Validar una fecha en formato mm/YYYY (mes/año) con JavaScript y Expresiones Regulares

Para validar una fecha en formato mes/año o mm/YYYY usando JavaScript se puede hace uso de la siguiente funcion, que hace uso de una expresion regular, de hecho, las expresiones regulares abren un mundo de posibilidades.

function validateMMYYYY(cadena) {
	var reg = new RegExp("(((0[123456789]|10|11|12)/(([1][9][0-9][0-9])|([2][0-9][0-9][0-9]))))");

	if (reg.test(cadena))
		return true;
	else
		return false;
}

Recomiendo usar Expresso de www.ultrapico.com, para crear las expresiones regulares y probarlas. Una pagina para las expresiones regulares es precisamente http://regexlib.com

Calcular el primer dia y el ultimo de un mes dado, en SQL

Para el acordeón, una forma de calcular el dia inicial y final de un mes, con el fin de determinar si un mes tiene 28, 30 o 31, es como sigue:

declare @mes varchar(2)
declare @fecha as varchar(8)
set @mes = '02'
set @fecha = '2009' + @mes + '01'
select @fecha AS FECHA_INICIAL,
	CAST (@fecha as smalldatetime) AS FECHA_INICIAL,
	dateadd(m,1, CAST (@fecha as smalldatetime)) AS FECHA_SIGUIENTE,
	dateadd(d,-1,dateadd(m,1, CAST (@fecha as smalldatetime))) AS FECHA_FINAL

Un escenario que me imagino para usarlo es en el que se requiere calcular o ejecutar un proceso en un mes en particular (fecha entre un rango inicial y final), sin embargo, esto es solo una curiosidad, porque tambien es posible hacer un calculo para un mes en particular poniendo en la condicion algo así como esto

SELECT * FROM TABLA WHERE MONTH(FECHA)=@MES

Sin embargo, creo que hacerlo de esta manera, de tener un índice la TABLA en cuestión no se usuaría en la consulta, no así si usaramos una condición de tipo between @FECHA_INICIAL AND @FECHA_FINAL. Que alguien me corriga, si tengo la idea errónea.