martes, 25 de diciembre de 2007

FELIZ NAVIDAD!!!

Feliz Navidad a todos, espero que paséis unos buenos días en estas fechas navideñas acompañados de la gente que más os importa.

domingo, 23 de diciembre de 2007

Explicación visual de los SQL JOIN

Hace un tiempo buscando por la red me encontré con un artículo interesante para la gente que empieza con SQL, como me pareció de ayuda he vuelto a buscarlo para aquellos que puedan necesitarlo. Aquí os dejo los enlaces al mismo artículo uno en castellano y el otro en inglés:

http://boozox.net/mysql/explicacion-visual-de-los-sql-join-unir-tablas-con-sql/
http://www.codinghorror.com/blog/archives/000976.html

lunes, 26 de noviembre de 2007

3er Aniversario GUSENET

GOZADA, así con letras mayúsculas eso es lo que ha sido para mí el 3er aniversario del grupo Gusenet. Evento organizado en Santa Pola gracias a Oscar Montesinos. Hemos pasado un fin de semana inolvidable, en el que he conocido gente como el Guille (con dedicatoria de libro incluida), David Salgado, Eladio Rincón, Salvador Ramos, Pedro Hurtado, José Miguel Torres, Francisco González, si me dejo alguno en el camino lo siento. Gente con la cual he podido charlar y comprobar que es gente cercana y dispuesta a darte una solución a un problema de manera desinteresada. La verdad es que se me ha pasado volando el finde y no veo el momento de poder repetirlo.

Desde aquí animo a la gente que no conoce el grupo a que se una y podamos compartir entre todos nuestros conocimientos por pequeños que sean.

Queda pendiente el que suba algunas fotos para el recuerdo de todos y ampliar un poco más el post con las sesiones que impartieron El Guille y David Salgado.

sábado, 20 de octubre de 2007

Enumeración de Instancias de SQL Server

.Net Framework nos provee de una clase que nos permite enumerar todos los servidores de SQL Server en una red local. La clase en cuestión es SqlDataSourceEnumerator. La manera de usarla sería

Dim servidores As System.Data.Sql.SqlDataSourceEnumerator = System.Data.Sql.SqlDataSourceEnumerator.Instance

Combobox1.DataSource = servidores.GetDataSources

El método GetDataSources devuelve un DataTable que podremos usar para devolver los valores en un ComboBox o en un DataGridView. La tabla que devuelve la llamada al método contiene las siguientes columnas, cada una de las cuales incluye valores string:


Columna Descripción
======= =========
ServerName Nombre del servidor.
InstanceName Nombre de la instancia del servidor. Si el servidor se
ejecuta como instancia predeterminada,
esta columna se muestra en blanco.
IsClustered Indica si el servidor forma parte de un clúster.
Version Versión del servidor (8.00.x para SQL Server 2000
y 9.00.x para SQL Server 2005).

Limitaciones de la enumeración
Es posible que en la lista no aparezcan todos los servidores disponibles. La lista puede variar dependiendo de algunos factores, como los tiempos de espera o el tráfico de la red. Como consecuencia, la lista puede ser diferente en dos llamadas consecutivas. Sólo aparecerán en la lista los servidores de la misma red. Normalmente, los paquetes de difusión no recorren los enrutadores; este es el motivo de que a lo mejor no pueda ver uno de los servidores que aparecen en la lista, aunque se mantenga estable entre llamadas.
Los servidores de la lista pueden tener o no información adicional como IsClustered y la versión. Todo depende de cómo se haya obtenido la lista. Los servidores que aparecen en la lista a través del servicio de explorador de SQL Server tendrán más detalles que los que se encuentran a través de la infraestructura de Windows, que sólo muestra el nombre.

La enumeración de servidores sólo se encuentra disponible cuando se ejecuta con plena confianza. Los ensamblados que se ejecutan en un entorno de confianza parcial no podrán utilizarla, aunque dispongan del permiso de seguridad de acceso a código (CAS) SqlClientPermission.
SQL Server 2000 proporciona información del SqlDataSourceEnumerator a nivel interno. SQL Server 2005, sin embargo, lo hace mediante el uso de un servicio externo llamado Explorador de SQL. Este servicio está habilitado de forma predeterminada, pero los administradores pueden desactivarlo o deshabilitarlo, para que la instancia del servidor sea invisible para esta clase. Este servicio sólo se aplica a SQL Server 2005 y no tiene efecto alguno en el comportamiento de SQL Server 2000.
El hardware o el software puede limitar la capacidad para buscar instancias de SQL Server.

Si queréis más información la podéis conseguir en la msdn en el siguiente enlace:
http://msdn2.microsoft.com/es-es/library/a6t1z9x2(VS.80).aspx

Gracias a la MSDN por alumbrarme en ciertas tareas del trabajo.

viernes, 19 de octubre de 2007

FRVSoft Google Analytics

Allá vamos, el blog se une a la moda de BI de la mano de Google Analytics y yo con estos pelos.




Por algún sitio hay que empezar, más limpito imposible xD

Data Mining Add-ins para Excel 2007

En este enlace os podéis descargar unas herramientas interesantes para trabajar con minería de datos desde Excel y Visio 2007. http://www.microsoft.com/downloads/details.aspx?FamilyId=7c76e8df-8674-4c3b-a99b-55b17f3c4c51&displaylang=es#filelist

Los requisitos son:
Los complementos de minería de datos requieren una conexión a una instancia de SQL Server 2005 Analysis Services. Esta instancia debe encontrarse en un equipo que ejecute cualquiera de las siguientes versiones de SQL Server 2005:
-SQL Server 2005 Enterprise Edition
Service Pack 1 (SP1) de SQL Server 2005 Enterprise Edition
Service Pack 2 (SP2) de SQL Server 2005 Enterprise Edition
-SP2 de SQL Server 2005 Standard Edition, con la revisión acumulativa (compilación 3152) instalada. El hotfix lo podemos obtener de http://support.microsoft.com/kb/933097

Una captura de pantalla con el add-in incorporado en el ribbon de excel.


domingo, 14 de octubre de 2007

Cálculos erróneos en Excel 2007

Aquí os dejo el enlace (http://download.microsoft.com/download/6/1/3/61343075-aa12-4152-a761-fccc16d6cef4/office-kb943075-fullfile-x86-glb.exe), para descargaros el parche que soluciona un bug de Excel 2007, el problema es el siguiente:
-Si el resultado del cálculo es un número entre 65534.99999999995 entre 65.535. Se realiza el cálculo correctamente. Sin embargo, el resultado se muestra incorrectamente como 100.000.
-Si el resultado del cálculo es un número entre 65535.99999999995 entre 65.536. Se realiza el cálculo correctamente. Sin embargo, el resultado se muestra incorrectamente como 100.001.

Después de aplicar el parche hay que recalcular las hojas de cálculo que estén en modo manual para corregir los posibles errores.

sábado, 15 de septiembre de 2007

Versiones de SQL Server

Para conocer la versión de SQL Server que usa un servidor, usaremos la sentencia SELECT @@Version, en negrita he resaltado los resultados que nos puede devolver la consulta. A continuación os detallo las distintas versiones de SQL Server que existen: (he omitido las actualizaciones acumulativas excepto las de SQL Server 2008)

SQL SERVER 2008
---------------
SQL Server code name "Katmai" (CTP) - 10.0.1075.23 (no podía resistirme)
SQL Server 2008 RTM 10.00.1600
SQL Server 2008 RTM CU1 10.00.1763
SQL Server 2008 RTM CU2 10.00.1779
SQL Server 2008 RTM CU3 10.00.1787
SQL Server 2008 RTM CU4 10.00.1798
SQL Server 2008 RTM CU5 10.00.1806
SQL Server 2008 SP1 10.00.2531
SQL Server 2008 SP1 CU1 10.00.2710
SQL Server 2008 SP1 CU2 10.00.2714

SQL SERVER 2005
---------------
SQL Server 2005 RTM 9.00.1399
SQL Server 2005 Service Pack 1 9.00.2047
SQL Server 2005 Service Pack 2 9.00.3042
SQL Server 2005 Service Pack 3 9.00.4035

SQL SERVER 2000
---------------
RTM 2000.80.194.0
SQL Server 2000 SP1 2000.80.384.0
SQL Server 2000 SP2 2000.80.534.0
SQL Server 2000 SP3 2000.80.760.0
SQL Server 2000 SP3a 2000.80.760.0
SQL Server 2000 SP4 2000.8.00.2039

SQL SERVER 7.0
--------------
7.00.1063 SQL Server 7.0 Service Pack 4 (SP4)
7.00.961 SQL Server 7.0 Service Pack 3 (SP3)
7.00.842 SQL Server 7.0 Service Pack 2 (SP2)
7.00.699 SQL Server 7.0 Service Pack 1 (SP1)
7.00.623 SQL Server 7.0 RTM (Release To Manufacturing)

SQL SERVER 6.5
--------------
6.50.479 SQL Server 6.5 Service Pack 5a (SP5a) Update
6.50.416 SQL Server 6.5 Service Pack 5a (SP5a)
6.50.415 SQL Server 6.5 Service Pack 5 (SP5)
6.50.281 SQL Server 6.5 Service Pack 4 (SP4)
6.50.258 SQL Server 6.5 Service Pack 3 (SP3)
6.50.240 SQL Server 6.5 Service Pack 2 (SP2)
6.50.213 SQL Server 6.5 Service Pack 1 (SP1)
6.50.201 SQL Server 6.5 RTM

viernes, 14 de septiembre de 2007

Shift + Botón derecho para Windows Vista

Navegando por el ciberspacio he encontrado una combinación de teclas y ratón que nos puede ayudar en el día a día de nuestro trabajo.
Si sobre un fichero pulsamos SHIFT + Botón derecho del ratón veremos como se despliegan nuevas opciones, una de ellas que nos puede resultar bastante útil es la de Copiar como ruta de acceso, lo que hace es, copia la ruta dónde se halla este fichero al portapapeles, ya os podéis imaginar para que lo podemos usar, se acabó el ir abriendo la ruta y seleccionándola para luego copiar y pegar.

Espero que os sea de utilidad.

viernes, 24 de agosto de 2007

Existe un campo en una tabla

Bueno visitando las news de microsoft.public.es.sqlserver he visto que alguien preguntaba cómo saber si en una tabla existe un determinado campo, para en caso de no existir, añadirlo. Así que me he decidido a responderle y de paso postearlo aquí por si le sirve a alguien más.

IF NOT Exists(SELECT * FROM syscolumns AS sc INNER JOIN sysobjects AS so ON
sc.id=so.id AND
sc.name='NombreCampoNuevo' AND
so.name='NombreTabla')

Aquí pondríais la instrucción ALTER TABLE

GO

domingo, 19 de agosto de 2007

Integración CLR

Para poder usar esta nueva característica de SQL Server 2005 primero debemos habilitarla, para ello tenemos 2 opciones:
1.- Desde la Configuración del área de superficie para características. Desplegamos el nodo Motor de Base de datos, seleccionamos la opción Integración CLR marcando o desmarcando la casilla para habilitar o deshabilitar la característica.
2.- O bien mediante una sentencia T-SQL. Para poder ejecutar con éxito esta sentencia debemos tener permisos de sysadmin y serveradmin. La consulta es esta:
sp_configure ‘clr enabled’, 1
GO
RECONFIGURE
GO
Para deshabilitar la opción sustituiremos el 1 por un 0 (‘clr enabled’, 0)

Una vez ya tenemos activada esta opción pasamos a ver las posibilidades que nos brinda.

1.- Crearemos un nuevo proyecto de tipo Base de datos


2.- Una vez creado añadiremos un elemento nuevo, en este caso vamos a añadir una función definida por el usuario y la llamaremos clrDiaSemana



3.- Agregamos funcionalidad a nuestra función:



La función es muy sencilla y en SQL Server ya existe una función para devolver el día de la semana según una fecha dada (DATEPART, ver los BOL para su uso).

Una vez hecho esto tenemos que compilar el proyecto y una vez compilado lo implementamos (deploy), en SQL Server 2005 que es el servidor que acogerá el código .Net (en forma de ensamblado, en este caso de dll) y lo ejecutará en su interior.
Para comprobar que tenemos el ensamblado .Net que acabamos de implementar en SQL Server 2005, abriremos Sql Management Studio y desplegaremos la subcarpeta Ensamblados de la carpeta Programación de la base de datos que especificamos como conexión.


En la imagen podéis ver la manera de invocar a la función pasándole un parámetro, siempre que queramos hacer uso de la función debemos especificar a que esquema pertenece la función.

Enviar mails desde nuestra aplicación

Esta es una manera sencilla de implementar el envío de correo electrónico desde nuestra aplicación (la aplicación de ejemplo consta sólo de un formulario con un botón).
También podríamos crear un sistema de mailing masivo, implementando un bucle que recorra los destinatarios, de esta manera podríamos enviar noticias a nuestros clientes acerca de nuevos productos en nuestra empresa, sin tener que depender de productos de terceras personas.

Imports System.Net
Imports System.Net.Mail
Public Class Inicio
Private Sub Enviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Enviar.Click
Try
Dim mensaje As New MailMessage()
Dim cliente As SmtpClient = New SmtpClient("smtp.loquesea.com")
Dim cuerpo As String = "Esto es una prueba de mailing usando Visual Studio 2008, desde un formulario sencillo"

'TODO: Podemos implementar un bucle que procese los registros con emails (podemos obtenerlos de una BD por ejemplo)
With mensaje
.From = New System.Net.Mail.MailAddress("francisco@nospam.com")
'Iremos añadiendo los distintos destinatarios de los mensajes
.To.Add("irma@nospam.com")
.Subject = "Pruebas"
.Body = cuerpo
End With

cliente.Credentials = New System.Net.NetworkCredential("francisco@nospam.com", "1234")
'Añadimos las credenciales
cliente.Credentials = CredentialCache.DefaultNetworkCredentials
cliente.Send(mensaje)
MsgBox("Mensaje enviado con éxito")

'TODO: En esta parte podríamos controlar los distintos tipos de excepciones que se pueden presentar, fallo al enviar,
'correo lleno, ... para ello usaríamos en lugar de exception SmtpFailedRecipientsException y con una variable de tipo
'SmtpStatusCode podríamos recuperar el estado y asignar un mensaje más entendible para el usuario.
Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub
End Class

martes, 19 de junio de 2007

Checkbox con 3 estados

El código que os pongo es la manera más sencilla de implementar un checkbox con 3 posibles estados en WPF:

CheckBox Name="checkbox1" IsThreeState="True" IsChecked="{x:Null}"
CheckBox en estado indeterminado
CheckBox

No se porqué no puedo añadir las marcas de apertura y cierre, el caso es que si las pongo el blog quita todo el código contenido dentro de las marcas.

Ahora sólo falta adornarlo con una plantilla y a usarlo en nuestras aplicaciones, pero eso ya será otro día porque ya es tarde y mañana hay que currar.

En respuesta a tu petición voy a poner unas capturas que espero te sirvan de ayuda



Ejecutando el programa y revisando los distintos estados del checkbox



viernes, 12 de enero de 2007

Año Nuevo info Nueva

Feliz Año a todos con retraso, es lo que tiene el no tener vacaciones, que te lías con el curro y se te quitan las ganas de escribir. A continuación os voy a dar unas direcciones interesantes con herramientas que pueden sernos útiles en algún momento:

UTILIDADES
- http://www.giveawayoftheday.com/ (sitio con software gratuito que cambia cada 24h)
- http://www.phoenixbit.com/products.asp?productid=imageminimizer (programa para cambiar el formato, calidad y tamaño de las imágenes. Puede hacer conversiones en masa)
- http://www.testmyhardware.com (freeware para chequear nuestro ordenata)
- http://www.desktopsidebar.com (simula la barra lateral de Windows Vista en nuestro XP)