viernes, 14 de agosto de 2015

Hacer copias de seguridad y restauraciones por línea de comandos en SQL Server


Hace poco intente restaurar una copia de seguridad en un equipo desde el “Microsoft SQL Server Management Studio” utilizando las opciones del menú, desafortunadamente por permisos o algún problema con el ordenador, no pude hacerlo, así que investigue como hacer la restauración y de paso la copia de seguridad por medio de línea de comandos.
Para copia de seguridad:
BACKUP DATABASE [Nombre base de datos] TO DISK = 'C:\Copias\BaseDeDatos.Bak' WITH init

Para restaurar:
RESTORE DATABASE [Nombre base de datos] FROM DISK = ' C:\Copias\BaseDeDatos.Bak' WITH REPLACE


Espero que esto les sea de utilidad.

viernes, 7 de agosto de 2015

Windows 10: Actualizaciones P2 y el ahorro del ancho de banda



Una de las nuevas funcionalidades de Windows es la distribución de actualizaciones a través de redes P2P, esto quiere decir que Windows puede compartir actualizaciones entre computadores, ahorrándole a la persona que tiene muchos computadores ancho de banda en el momento de compartir las actualizaciones, sin embargo también puede ir en detrimento del ancho de banda si compartes tus actualizaciones a través de la LAN.

Lo anterior debido a que las actualizaciones no solo se comparten de manera predeterminada entre tus equipos, sino también en redes WAN (Internet).

Este vídeo muestra cómo se configura las actualizaciones para que solamente distribuya las actualizaciones a través de nuestros computadores.

La manera de deshabilitar la opción de compartir tus actualizaciones es la siguiente:
Ingresas a la configuración:
  • Clic en notificaciones (Ilustración 1)
  • Clic en abrir todas las configuraciones (Ilustración 2)
  • Clic en Actualización y seguridad (Ilustración 3)
  • Clic en Opciones Avanzadas (Ilustración 4)
  • Clic en Elige el modo de que quieres que se entreguen las actualizaciones (Ilustración 5)
  • Clic en Equipos en la red local y equipos en Internet (Ilustración 6)

Ilustración 1


Ilustración 2
Ilustración 3
Ilustración 4

Ilustración 5

Ilustración 6



Espero que esta ayuda les sea de utilidad, no olviden que estas recomendaciones se distribuyen sin responsabilidad alguna.










martes, 28 de abril de 2015

Copiar el listado de archivos de un directorio (Carpeta) a un archivo texto.


A veces necesitamos copiar el listado de archivos que se encuentra en un directorio o careta a un archivo, por ejemplo cuando necesitamos entregar un DVD con información mediante un memorando o sencillamente cuando necesitamos colocar dentro de una tabla de un documento el listado de archivos.
La manera más rápida que he encontrado es la siguiente:

1.       Creamos un archivo texto en la carpeta donde queremos generar el listado de archivos, por ejemplo Lista.txt
2.       Lo abrimos y escribimos dentro de él la sentencia Dir *.*/b > Lista.csv
3.       Después de guardar cambiamos la extensión del archivo de .txt a .bat.
4.       Pulsamos doble clic sobre el archivo .bat.
5.       Después abrimos el archivo lista.csv  en Excel.

Para cambiar la extensión del archivo texto basta con pulsar clic derecho sobre el archivo e ir a la opción de propiedades.
Para listar los archivos incluyendo sub carpetas se tiene que agregar el comando /s a la sentencia, esta queda así: Dir *.*/b/s > Lista.csv

Una vez más. El uso de esta sentencia es bajo su propia responsabilidad y si te es de utilidad, por favor no olvides regalarme un like al artículo.

miércoles, 8 de abril de 2015

Campo calculado para mostrar la edad en años - SQL Server

Existen muchas maneras fórmulas para calcular la edad, la más sencilla que he encontrado es la de calcular los días de diferencia entre dos fechas y dividirlos entre 365.25 que son los días de un año. Para lo anterior utilizo la función de SQL server DateDiff. A continuación el ejemplo:


set dateformat dmy
Declare @FechaNacimiento as Date = Cast('08/04/2010' as Date)

Select Cast((DATEDIFF(day,@FechaNacimiento , GetDate())/365.25) as int) Edad


Es una formula sencilla pero que me a ayudado mucho. Espero les sirva y si les es de utilidad, no olvides dejar un Like en el artículo.

miércoles, 25 de marzo de 2015

Remover acentos y caracteres especiales en textos en Excel


Existen ocasiones que tenemos que simplificar o unificar una lista de nombres (valores)  únicos, para ello recibimos la información en un listado de Excel y en estos valores recibimos palabras con tildes, sin ellas., caracteres especiales y dobles espacios Ejemplo de esto puede ser: TECNICO y TÉCNICO. Aunque en teoría son muy iguales, necesitas dejar un valor único para poder unificar las listas.

Para sacar un mejor partido a la opción “Quitar duplicados” de la cinta de Excel, lo primero que debes hacer es guardar el archivo con la lista en formato .xlsm. “Libro de Excel habilitado para macros”.  Después habilitar la cinta de Desarrollador a través del menú archivo, opciones de Excel y personalizar cinta de opciones.



Posteriormente ir a la cinta de programador, ingresas a la opción Visual Basic. En esta opción y sobre el nombre de archivo usas el clic derecho para insertar un módulo. También puedes llegar a la opción de Visual Basic con las teclas de acceso rápido Alt+F11.


Una vez agregado el módulo, puedes copiar la función que se encuentra escrita abajo. La función quita los acentos, caracteres especiales y reemplaza los dobles espacios por un espacio.
Function QuitarAcentos(Valor As String) As String

    Dim ConSignos As String
    Dim SinSignos As String
    Dim Remover  As String
   
    Dim CaracterOLD As String
    Dim CaracterNEW As String
   
    ConSignos = "áàäéèëíìïóòöúùüçÁÀÄÉÈËÍÌÏÓÒÖÚÙÜÇ"
    SinSignos = "aaaeeeiiiooouuucAAAEEEIIIOOOUUUC"
    Remover = "./\*$-+!#%&/()=?¡'¿¨*@´+~{}[]`^,.:;_<>"
   
    Dim Texto As String
    Texto = Valor
   
  
   If (Len(Texto) > 0) Then
    For iLoop = 1 To Len(ConSignos)
        CaracterOLD = Mid(ConSignos, iLoop, 1)
        CaracterNEW = Mid(SinSignos, iLoop, 1)
        Texto = Replace(Texto, CaracterOLD, CaracterNEW)
    Next iLoop
   
    For iLoop = 1 To Len(ConSignos)
        CaracterOLD = Mid(Remover, iLoop, 1)
        Texto = Replace(Texto, CaracterOLD, "")
    Next iLoop
   End If
  
    While (InStr(Texto, "  ") > 0)
        Texto = Replace(Texto, "  ", " ")
    Wend

   QuitarAcentos = Texto
End Function

Terminada de agregar la función al módulo, basta con insertar la función a la hoja de Excel a través de la opción de “Insertar función”, en la categoría Definidas por el usuario.
A continuación podrás apreciar el resultado de la función.



Texto Original
Texto sin Acentos y Caracteres especiales
TECNICO EN COMPUTACIÓN % +
TECNICO EN COMPUTACION
TECNICO EN   #$ COMPUTACIÓN
TECNICO EN COMPUTACION

Con las listas simplificadas, podrás copiar el resultado sobre la lista original o en una nueva hoja y posteriormente quitar los duplicados, esto facilitará la depuración de textos.

Está función es muy útil cuando toca depurar información para cargar tablas paramétricas en una base de datos.  

Si te es de utilidad la información anterior, no olvides dar un “Like”.


jueves, 5 de marzo de 2015

Eliminando el gasto de energía fantasma o “vampiro”




En la actualidad, casi todos los equipos electrónicos en el hogar tienen leds para indicar si están conectados a la red de energía, otros tienen un modo de “Stand By” o espera para ser activados por control remoto como los televisores, home theater, decodificadores de televisión, consolas de juegos, etc. Esto consume  energía las 24 horas del día durante los 365 días del año, causando un desperdicio de ésta cuando no están siendo usados
.
A este desperdicio de energía se le llama “Gasto fantasma”.  Esto  me estaba ocasionando un gasto superior a los 10 dólares mensuales, por lo que comencé a probar varios métodos de ahorro para mitigar este gasto extra hasta que encontré algunos que me disminuyeron el consumo de energía, ayudando de esta manera al ½ ambiente y, por supuesto, a mi bolsillo.

Lo primero que hice fue cambiar las lámparas alógenas del estudio por lámparas de LED que aunque disminuyen el  consumo de energía, no lo hicieron con el  consumo fantasma.

Después, apagué las extensiones donde conectamos los electrodomésticos;  sin embargo, en muchos hogares éstas quedan ocultas por motivos de  decoración,  generando que el interruptor de la extensión se ubique en sitios de complejo acceso que dificultan el encendido o apagado de los electrodomésticos.

También utilice temporizadores “timers”, tanto independientes como integrados en las extensiones, pero cuando tu horario no es regular este método no funciona muy bien.

Como los anteriores  métodos no me funcionaron muy bien, seguí investigando hasta que encontré unas extensiones eléctricas “inteligentes” que cuentan con un control electrónico en una de sus tomas,  haciendo que el tomacorriente detecte la disminución del uso de energía en ésta  y apague de manera automática las otras tomas de la multitoma.  Estas tomas son buenas cuando quieres, por ejemplo, sincronizar todos los equipos del centro de entretenimiento con el encendido del televisor. Sin embargo, se sigue generando el gasto de un equipo (en este caso, el televisor). El único inconveniente es que estas extensiones o multitomas aún no llegan al país.

Continuando con mi búsqueda,  encontré una extensión que tiene un interruptor conectado mediante un cable para apagar la toma;  lo que me pareció excelente, pero el precio me disuadió de comprarla (60,000). No obstante,  me interesé en ella y, en la misma ferretería donde la vi, compré una toma, cable suficiente, un enchufe y un interruptor y armé una por un valor 5 veces menor a la original.  Una vez fabricada la extensión la ubiqué detrás del mueble que tengo instalado como centro de entretenimiento, disimulada, a una altura media, el interruptor de sobreponer. Ahora, mantengo todo apagado hasta el momento de requerir encender alguno de los electrodomésticos. Con esta extensión el costo del recibo de energía disminuyó 10 dólares. El ahorro del primer mes pagó el costo de los materiales;  por lo cual, en  el segundo mes empezaré a disfrutar de un  ahorro de dinero.

Para hacer la extensión compré un metro de cable de tres hilos número 12, un toma corriente, un enchufe de tres patas, un interruptor de sobreponer y cable de dos hilos número 12;  cuando conecté el tomacorriente con el enchufe cuidé en mantener el orden de los cables, tierra con tierra, neutro con neutro y el fase lo extendí hacia el interruptor con el cable dúplex.  





viernes, 30 de enero de 2015

Traer el último registro de un grupo de registros


Traer el último, primer, etc.  registro de un grupo de registros

En algún momento necesite consultar el último registro ingresado en una tabla detalle por cada registro de la tabla padre, No es traer los primer registro de una consulta “TOP 1”. Para hacerme entender, he creado el siguiente ejemplo:

Tabla maestra “Cliente”
IdCliente
Cliente
1
Homero
2
Barth
3
Lisa
4
Batman
5
Superman

Tabla detalle “Factura”
IdFactura
IdCliente
Valor
Fecha
1
1
50
01/01/2015
2
1
55
01/01/2015
3
1
45
03/01/2015
4
2
38
03/01/2015
5
2
45
03/02/2015
6
3
60
01/02/2015
7
4
54
15/01/2015
8
4
66
03/02/2015
9
5
70
02/02/2015
10
5
62
03/01/2015
11
5
33
02/01/2015

La consulta de todos los datos:
Select Cliente.IdCliente
       ,Cliente.Cliente
       ,Factura.IdFactura
       ,Factura.Fecha
        ,Factura.Valor
From Cliente
     Inner Join Factura On Cliente.IdCliente = Factura.IdCliente

El resultado:
IdCliente
Cliente
IdFactura
Fecha
Valor
1
Homero
1
01/01/2015
50
1
Homero
2
01/01/2015
55
1
Homero
3
03/01/2015
45
2
Barth
4
03/01/2015
38
2
Barth
5
03/02/2015
45
3
Lisa
6
01/02/2015
60
4
Batman
7
15/01/2015
54
4
Batman
8
03/02/2015
66
5
Superman
9
02/02/2015
70
5
Superman
10
03/01/2015
62
5
Superman
11
02/01/2015
33


Ahora necesito extraer la última factura registrada por cada cliente, para eso necesitamos traer el máximo IdFactura por cliente. Para lo anterior utilizo una sub consulta en el Inner Join que me permita traer el máximo IdFactura ingresado por cliente y posteriormente lo incluyo como parte de un segundo Inner Join para poder traer la data como se puede apreciar en la siguiente tabla.

IdCliente
Cliente
IdFactura
Fecha
Valor
1
Homero
3
03/01/2015
45
2
Barth
5
03/02/2015
45
3
Lisa
6
01/02/2015
60
4
Batman
8
03/02/2015
66
5
Superman
11
02/01/2015
33

A continuación la consulta.
Select Cliente.IdCliente
,Cliente.Cliente
,Factura.IdFactura
,Factura.Fecha
       ,Factura.Valor
From Cliente
Inner Join (Select Max(IdFactura) As Id, IdCliente From Factura Group By IdCliente) As Fact On Cliente.IdCliente = Fact.IdCliente
        Inner Join Factura On Cliente.IdCliente = Factura.IdCliente  And Fact.Id = Factura.IdFactura
Order By IdCliente

No es la más eficiente pero es una manera de consultar muy sencilla.

Entrada destacada

Arquitectura de N-Capas con Visual Studio .NET y AngularJS

Este artículo es el primero de una serie de artículos en que quiero explicar mi visión de la programación por capas. La Arquitectura ...