lunes, 29 de agosto de 2011

Búsqueda de objetos dentro de programables (Stored procedures, vistas, funciones, triggers) de Microsoft SQL Server

 

Antecedentes:

Se tiene la necesidad de encontrar en cuantos y cuales (En donde exactamente) programables (Stored procedures, vistas, funciones, triggers) se encuentra un objeto de base de datos (Tabla, campo, índice o programable).

Esto resulta muy útil para realizar un análisis de impacto. Ponemos un ejemplo, ampliar la longitud del campo “CLABE” de la tabla “CuentasBancarias” ya que no se da abasto para las longitudes manejadas en el sector bursátil.

Solución propuesta

Se cuenta con dos Stored Procedures que nos van a apoyar a esta búsqueda. El primero se llama sp_helptext_Plus y no es otra cosa que una versión modificada del stored del sistema de nombre sp_Helptext que nos ayuda a obtener el código de cualquier programable.

El otro stored procedure es el que hace el trabajo pesado. Se llama P_BusCadTxtProgramables y el ejemplo de ejecución para la problemática planteada en este caso es la siguiente:

 

EXEC P_BusCadTxtProgramables   

@PS_Cadena = ‘CuentasBancarias’,

@PS_TabFisica ='tmpCuentasBancarias’

En donde el parámetro @PS_Cadena recibe el valor de la cadena de caractéres que se desea cnontrar y el parámetro @PS_TabFisica recibe el nombre de la tabla física en donde se van a guardar los resultados de la búsqueda. Si se ejecuta de esta manera, el stored procedure genera la tabla ‘tmpCuentasBancarias’ y posteriormente puede ser consultada por el usuario.

 

Si solo se le envía el primer parámetro:

EXEC P_BusCadTxtProgramables   

@PS_Cadena = ‘CuentasBancarias’

Los resultado de la búsqueda son desplegados al final de le ejecución. Para cualquier duda, quedo a sus órdenes.

jueves, 11 de agosto de 2011

Convertir números a letras en Microsoft SQL Server

 

Me topé con el problema de actualizar masivamente un campo que un componente de la aplicación había calculado en base a un importe de la misma tabla. Debido a que necesitaba hacer la actualización masiva tanto de importes numéricos como de su equivalente en letras, busqué en internet y encontré estas 5 funciones jutas en un BLOG de un colega.

Las funciones las pueden bajar en un archivo comprimido en esta liga. Las funciones están numeradas en base a como se deben de generar en la base de datos, siendo la última función la que realmente hace el trabajo.

Dentro de las funciones hay comentarios con instrucciones sobre su uso, así como ejemplos de ejecución, espero les sean de utilidad

miércoles, 16 de febrero de 2011

DTA ( Database Engine Tunning Advisor ) en SQL 2008

Antecedentes:

Al tratar de ejecutar el DTA en SQL 2008 me marca error de conexión para el Log In SA.

Después de agotar las opciones que todos mis colegas se habían tomado la molestia de publicar en internet (En su mayoría para SQL 2005).

 

Se descargaron varios Scripts para generar las estructuras (Tablas y Stored procedures) que se decían necesarios para que el DTA funcionara.

 

Al ejecutar estos scripts se generaron parcialmente las estructuras ocasionándome otro mensaje de error

 

Solución

Se generó un script  (Anexo a esta liga) de una BD MSDB de una instancia de SQL 2008 en la que el DTA si estuviese funcionando y se corrió sobre el servidor involucrado.

jueves, 7 de enero de 2010

Cambio de usuario para uso de autentificación de Windows

 Antecedentes:

Se cuenta con algún software que tiene la opción de usar la cuneta del usuario de Windows (Windows XP Professional SP 3) para autentificar al usuario, evitando así que el mismo capture otra cuenta de usuario.

Por ejemplo, generamos un nuevo usuario en una base de datos el cual lleva por nombre IERM2. Y nos percatamos que el usuario de Windows lleva por nombre IERM. Esto nos ocasiona que que cada ves que queramos acceder a la BD, tengamos que capturar usuario: IERM2 y su respectivo password.

Si el usuario de Windows correspondiera con el de la BD, la acción de autentificación no fuese requerida.

 

Solución:

Se procede a realizar el cambio del nombre de usuario de Windows desde el panel de control, opción Control de usuarios.

Sin embargo, esto no es suficiente, ya que el sistema operativo solo cambia el nombre largo y no el nombre del usuario en si mismo.

Se tiene que proceder a entrar al panel de control, Herramientas administrativas, Administración de equipos, Usuarios locales y grupos, Usuarios; y proceder a cambiar el nombre manualmente, ya sea dando clic derecho, opción, Cambiar nombre. O Presionando F2 sobre el usuario.

 

Notas adicionales:

Se intentó realizar el primer cambio y reiniciar, como alternativa para reflejar el cambio, esto sin éxito, por lo cual se recomienda realizar los pasos aquí ilustrados para hacer efectivo el cambio de usuario.

Si lo único que se desea es realizar el cambio de nombre del usuario para que aparezca un nombre en particular en el menú inicio o en el inicio de sesión de Windows, entonces el realizar el cambio desde el Administrador de equipos carece de relevancia.

jueves, 5 de noviembre de 2009

Problema con guión alto en Crystal Reports 8.0 (CR 8.0) con SQL Server 2008

Problemática

Al tratar de conectarse a una BD de SQL 2000 – 2008 tanto con el controlador de SQL como el de OLEDB de CR 8.0 cuyo nombre contenga un guión alto, se detona un error general de SQL.

Al realizar un traza con el profiler de SQL 2008 se detecta el siguiente error:

Error: 102, Severity: 15, State: 1, Incorrect syntax near '-'

Esto al tratar de ejecutar la sentencia USE: “USE NombreBD-2”

 

Solución

Por lo tanto se recomiendo renombrar la BD omitiendo el guión alto

sábado, 31 de octubre de 2009

Problemas con MAC Address en Virtual PC

Escenario:

Se instala un entorno de desarrollo en una PC virtual la cual es copiada en distintas máquinas Host de una misma red local.

 

Problemática:

Aunque cada PC virtual se reconfigura con un nuevo nombre y su propia IP para evitar conflictos de cualquier índole, la máquina virtual mantiene la misma MAC Address ocasionando conflictos a la hora de acceder a ciertos servidores.

 

Solución:

Se decidió cambiar la MAC address de cada PC virtual, para ello se procede a realizar lo siguiente en cada máquina Host.

 

  1. Asegurarse que la PC virtual a la cual se le desea cambiar la MAC esta detenida
  2. Cerrar por completo el Manager de Virtual PC
  3. Buscar el archivo con extensión VMC correspondiente
  4. Abrirlo con el block de notas o cualquier editor de texto
  5. encontrar la línea:
    1. <ethernet_card_address type="bytes">0003FFxxxxxx</ethernet_card_address>
  6. Cambiarla por la siguiente línea:
    1. <ethernet_card_address type="bytes"></ethernet_card_address>

 

Al iniciar nuevamente la PC virtual, se regenera automáticamente la MAC Address, resolviendo así el problema.

 

NOTA: en algunos casos se tuvo que realizar la edición del archivo VMC una ves mas e inclusive reiniciar la máquina Host para que surgieran efecto los cambios.

miércoles, 5 de agosto de 2009

Cortes de reporte con sub reportes

Antecedentes.

el reporte cuenta con los siguientes elementos en cuanto a su estructura se refiere:

  • ADO como controlador de acceso a datos
  • Dos grupos basados en campos de tipo numérico
  • Dos Sub reportes localizados en el detalle del reporte (Uno a un lado del otro)
    • Ambos sub reportes son idénticos
    • También desarrollados con ADO como controlador de acceso a datos
    • Tres parámetros de los cuales
      • Uno de ellos es para dar formato a los datos desplegados
      • Los otros dos están involucrados en el Record Selection formula de los sub reportes
      • Ligas con el reporte por medio de estos tres parámetros
  • Dos sub reportes para desplegar dinámicamente imágenes a la izquierda y derecha del encabezado del reporte, estos sub reportes no cuentan con Links hacia el reporte.
  • Encabezado y pie de reporte suprimidos
  • Encabezado de la página suprimido
  • Se usa el encabezado del grupo A a modo de encabezado de página, en este se colocan
    • Los sub reportes de los logos izquierdo y derecho
    • Tres parámetros para desplegar encabezados calculados desde la aplicación
  • Pié de pagina en el cual se despliega
    • El nombre del reporte en el esquina inferior izquierda
    • Pagina X de Y, donde X es la página en curso y Y el total de páginas en la esquina inferior derecha
    • Fecha de impresión en formato largo (DDS DD de MMMM DE YYYY) también en la esquina inferior derecha, justo bajo el conteo de páginas

 

Problemática

Se agregó una validación en la sección correspondiente al pié del segundo grupo para que agregara una salto de página, lo cual funcionaba incorrectamente.

Se desplegaba un corte después del primer corte y un corte mas al empezar el segundo corte, lo que dejaba una página en blanco adicional, entre el encabezado del segundo corte y los primeros datos a desplegar del mismo:

Video1: El cual denota al reporte con los cortes incorrectos:

 

Solución

Aquí va el video de la corrección, la cual consistió en desmarcar dos propiedades del sub reporte:

  • Keep Object Together
  • Close Border on Page Break

Aquí esta el reporte ya con los cortes correctos, espero les sea útil