miércoles, 1 de diciembre de 2010

SQL Server - Operaciones con Fechas y Horas

El tratamiento de fechas y horas en SQL Server es uno de los temas que más generan preguntas en los foros y grupos de noticias de programación.

Aquí muestro algunas consultas que usé alguna vez para hacer comparaciones entre fechas. Para más referencias podemos buscar DATEADD en el ayuda del SQL.

Cuando queremos:

-- Restar 30 minutos a la fecha y hora actual
SELECT DATEADD(MINUTE, -30, GETDATE()) AS '30 minutos antes'
GO

-- Sumar 1 hora a la fecha y hora actual
SELECT DATEADD(HOUR, 1, GETDATE()) AS '1 hora después'
GO

-- Restamos 1 día a la fecha actual
SELECT DATEADD(DAY, -1, GETDATE()) AS '1 día antes'
GO

-- Seleccionar solo la Fecha de un campo DATETIME (Fecha y Hora)
SELECT CONVERT(DATETIME, CONVERT(VARCHAR, @variable-fecha, 101), 101)
GO

viernes, 24 de septiembre de 2010

SQL Server - Reducir Log de Transacciones eficientemente (MSSQL 2000-2005)

/*
Ejecuta dos o tres veces la instrucción CHECKPOINT.
Esto asegurará que todas las páginas de memoria se han escrito en el fichero de datos.
*/
CHECKPOINT

/*
Luego haz un BACKUP LOG WITH TRUNCATE_ONLY para que trunque el registro de transacciones.
*/
BACKUP LOG
NombreBaseDatos WITH TRUNCATE_ONLY

/*
Posteriormente ejecutas DBCC SHRINKFILE indicando el nombre del fichero del log a reducir
*/
DBCC SHRINKFILE (
NombreBaseDatos_Log)

Vale aclarar que estas instrucciones funcionan para la versión 2000 y 2005 del SQL Server.
Listo!!!

lunes, 20 de septiembre de 2010

Tip Linux: Loguearse como root en Ubuntu

En contra de lo que muchos usuarios creen, en Ubuntu también es posible loguearse como root desde un terminal. Salvo que la forma de hacerlo es diferente a la tradicional ($ su).

El comando a escribir para loguearse como superusuario en un terminal bajo Ubuntu, es el siguiente:

$ sudo -s

Luego el interprete nos preguntará nuestra contraseña de usuario antes de mostrarnos el prompt correspondiente al superusuario.

Otras maneras de loguearse como root son:

$ sudo su

$ sudo bash

Ah!, y para salir del login como root, basta escribir "exit" en la terminal.

root@desktop:~# exit
exit
cristian@desktop:~$

lunes, 30 de agosto de 2010

SQL Server - "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value"

Cuando buscamos en el ayuda en línea de "Don Microsoft" encontramos esto:

"...This error occurs when trying to convert a string date value into a DATETIME data type but the date value contains an invalid date. The individual parts of the date value (day, month and year) are all numeric but together they don’t form a valid date."

Cuya traducción by "CristianTranslator" podría ser:

"...Este error se produce al intentar convertir un valor fecha en un tipo de datos DATETIME, pero el valor fecha contiene una fecha no válida. Las partes individuales del valor fecha (día, mes y año) son numéricos, pero juntos no forman una fecha válida."

Solución:

En el Servidor de Base de Datos --> Seguridad --> Inicios de sesion,

elegir con cual usuario nos estamos conectando (el que nos trae el problema) y cambiarle el idioma Ingles por Español.

lunes, 23 de agosto de 2010

SQL Server - Registros Duplicados

Muy util query de SQL Server para saber los registros duplicados por un cierto campo x en una tabla:

SELECT *
FROM Tabla
WHERE CampoX IN
(SELECT CampoX
FROM Tabla
GROUP BY CampoX
HAVING COUNT(*) > 1)

jueves, 12 de agosto de 2010

Tip Clarion Nro. 1 - TAB dentro del Embed

Cortito y al pié:

Cuando empecé como programador en Clarion descubrí, sin querer, que apretando TAB dentro del embed se abre la ventana "Block Indent" para poder indentar un grupo de sentencias que estén dentro de un mismo bloque.

Lo comparto porque los todos los "gurus" de Clarion que me acompañaban en la ofi, y de los cuales aprendí todo, no lo sabían y en los foros de programación del lenguaje tampoco figuraba ese atajo de teclado.

Era eso nomás, justo lo utilicé recién y me acordé.

Abrazo de gol y hasta la próxima...

lunes, 9 de agosto de 2010

Replica SQL: Registros Obsoletos de DNS

Escenario:

Duplicación o Réplica de Mezcla mediante SQL Server 2000.

Posible Problema:

LLama el cliente porque no se están actualizando los datos en sus sucursales.


Analisamos:
  1. Desde el "Administrador Corporativo" verificamos que el agente de réplica informa que no está pudiendose conectar al suscriptor.
  2. Mirás los dns: Están ok!!
  3. Entrás por Escritorio Remoto al Servidor que no se está replicando: Anda bien!! Se puede entrar.
  4. Ejecutás el Administrador Corporativo en el Servidor Suscriptor y querés conectarte desde ahí al Servidor suscriptor: Ajá!!!! Acá hay algo!!! NO SE PUEDE CONECTAR!!!
  5. A ver otra cosa, si queremos conectarnos, vía escritorio remoto por DNS, desde el servidor de réplica (el que publica) al suscriptor que no está recibiendo las actualizaciones no se puede. Pero poniendo la IP si nos deja!!!
Encontramos el quid de la cuestión!!!

registros obsoletos de DNS. ¿Qué hacemos entonces? Debemos renovar la cache DNS para obtener nuevos valores de IP, de los servidores DNS y nuevos registros DNS. Por lo tanto, vaciaremos la cache DNS.

Para renovar la cache DNS en sistemas Microsoft Windows (Windows Vista, Win XP, Win 2003, Win 2000):

- Menú Inicio -> Comando Ejecutar -> tipiar el comando “cmd

- En el símbolo del sistema se debe tipiar ipconfig /flushdns

- Listo, ahora su sistema tiene la cache DNS renovada.

referencias:

CodigoMaestro


sábado, 7 de agosto de 2010

Instalación y Configuración del Hasar PT-80

Hoy mostraré como instalar y configurar el colector de datos Hasar PT-80 en Windows XP.

¿Para que se puede usar éste aparatito? Por ejemplo, tiempo atrás, desarrollé una aplicación que se conecta vía wi-fi a una base de datos SQL instalada en el servidor del cliente y permite realizar consultas de stock, inventarios, recepciones y transferencias de mercadería directamente desde la aplicación del colector hacía el Sistema de Gestión Comercial que usa el cliente.

Las ventajas con respecto a los anteriores colectores de datos Hasar (PT-10, PT-12, PT-18) son varías:
  1. La lectura/escritura de datos entre el PT-80 y la PC se realiza directamente (y en "tiempo real") mediante wi-fi en vez de acumular los datos en archivos en el colector y después transferirlos mediante cable serial para luego procesarlos con el Sistema de Gestión (modo "batch")
  2. El manejo de la aplicación del colector es mucho más "amigable" ya que se trabaja sobre una plataforma Windows basada en las familiares ventanas e íconos en lugar de una aplicación de terminal al viejo estilo DOS.
  3. Mayor capacidad de almacenamiento.
  4. Posibilidad de expanción a traves de SD cards.
  5. Mejor scaneo de los códigos de barra por su CCD scanner de mayor amplitud y performance.
Como única y razonable desventaja encontramos que el precio es muy elevado (casi 3 veces más) en comparación con los otros colectores.

Instalación del software necesario para la comunicación vía USB (Modo Batch).

La comunicación de datos a través de la cuna (o "Cradle") se puede hacer mediante cable serial (RS-232) o USB. Aquí mostraré como hacerlo mediante USB.

Conectamos los cables como indica la figura:


Dejamos que el XP reconozca el nuevo hardware instalado, ponemos el cd que acompaña al producto, navegamos por la unidad de cd-rom y ejecutamos argox.exe (si es que no se inicia automáticamente el cd).

Una vez iniciado el cd nos mostrará la pantalla siguiente:


Clickeamos en el botón Go. En la pantalla siguiente hacemos click en la pestaña Portable Data Collector Downloads y seleccionamos el modelo PT-80.

Si hicimos bien lo anterior, tendriamos que observar una pantalla como la siguiente:


Ahora hacemos click en PT-80_USB Driver y descomprimimos los archivos en alguna carpeta de nuestro disco rígido (por ej. C:\Drivers).

Prendemos el PT-80, si es que se suspendió, para que lo reconozca el XP al hardware si no lo instala automáticamente vamos al Administrador de Dispositivos del XP. (Inicio -> Ejecutar... y escribimos: DEVMGMT.MSC)

Hacemos doble click sobre el dispositivo no reconocido y buscamos la carpeta: PT80_USB Driver dentro del path creado anteriormente.
Una vez hecho esto el Administrador de Dispositivos tendría que quedar de la siguiente forma con el nuevo hardware instalado:


Ahora debemos instalar el Microsoft ActiveSync 4.5 (o superior) para poder sincronizar los datos (documentos, imágenes, videos, etc) entre el dispositivo
y el PC.
En la instalación del ActiveSync no hay nada raro: Es descargar el instalador
setup.msi, ejecutarlo y darle al botón Siguiente, Siguiente... hasta que termine.

Una vez terminado, el ActiveSync tratará de sincronizarse con el aparato preguntándonos si deseamos crear una asociación. De hacer todo correctamente aparecerá automáticamente la pantalla del ActiveSync.


Para ver o enviar datos al dispositivo clickeamos en el botón Explorar de la pantalla principal del ActiveSync y de allí copiamos y pegamos nuestros archivos del PC al PDA y viceversa. También se puede sincronizar datos copiándolos a la carpeta que el ActiveSync nos crea en el Escritorio de Windows (en mi caso se llama "PT80 My Documents") para que el programa se encargue de sincronizar automáticamente cuando haya un cambio.


Eso es todo, ahora ya podremos intercambiar nuestros archivos de la PC con los del dispositivo mediante la cuna por USB.

En otra publicación explicaré como instalar y configurar la tarjeta WLan para poder trabajar inalámbricamente. Lógicamente, que para ello necesitaremos de todo el hardware implicado en cualquier conexión wi-fi entre dos computadoras. Pero esa será otra historia.

Hasta la próxima!!!