Monday, December 17, 2012

Ayuda gatuna

Esta imagen realmente me hizo reír porque lo he experimentado muchas veces. Mi compañero de la vida, el que siempre estuvo conmigo todas las noches de desvelo, el que se caminaba por encima de mi teclado, se acariciaba el cuerpo con mi monitor... Mi gato querido que también chateaba... Este post va para vos!


Thursday, November 15, 2012

Restar dos fechas

Cómo restar dos fechas en Visual Basic .Net vb.net DateTimePicker

Problema: Dada dos fechas, cómo restarlas para saber cuántos días, horas, minutos o segundos han transcurrido.

En mi caso, yo tengo configurado en una tabla el número de días permitidos para tener acceso a ver cierto reporte a partir de la fecha actual. Por ejemplo, si hoy es 15/11/12 y el número configurado es 15 días, debo saber cuántos días hay entre la fecha que eligió el usuario a la fecha actual. Si esa resta es igual o menor al número de días que tengo configurado (15 en este caso), podrá visualizar el reporte.

Podemos hacerlo de dos maneras: utilizando "Subtract" (TimeSpan) y "DateDiff"

Dim resta1 As TimeSpan = Now.Date.Subtract(Me.dtpFechaInicial.Value.Date)

Dim resta2 As Integer = Now.Date.Subtract(Me.dtpFechaInicial.Value.Date).Days

Dim resta3 As Integer = DateDiff(DateInterval.Day, Me.dtpFechaInicial.Value.Date, Now.Date)

resta1 nos devuelve un objeto de tipo TimeSpan. Al darle resta1. nos lista los métodos disponibles y uno de ellos es Days. Eso devuelve resta2, un Integer. Significa el número de días que hay entre el rango de fechas. Por otro lado, resta3 nos devuelve asimismo el número de días que hay entre el rango de fechas dados que también es un Integer.

HaPPy Coding =)

Friday, October 12, 2012

SQL SERVER 2008: volver Una columna A identity

Recuerdo que en SQL Server 2005 era fácil volver una columna a identity. Solo tenías que hacer clic derecho sobre la columna en el Management Studio, Modificar/Modify y en la ventanita Collumn Properties bajo la propiedad Identity Specification: Yes, Identity Seed: el último ID.

Pero con el SQL SERVER 2008 no se puede. Los pasos para hacerlo serían:

1. Te creas una tabla auxiliar de la que quieres volver identity.

create table Boveda_Auxiliar(
 Cod_Boveda int primary key identity(1,1),
 Cod_Sucursal smallint,
 Descripcion varchar(50),
 Cod_Cobertura int,
 sLastUpdate_id varchar(16),
 dtLastUpdate_dt datetime,
 iConcurrency_id int,
 FechaCreacion datetime,
 Activo bit
)

2. Ponemos el Identity Insert en on


SET IDENTITY_INSERT Boveda_Auxiliar ON

3. Llenamos la tabla auxiliar con los datos insertados en la tabla original.

insert into Boveda_Auxiliar (Cod_Boveda, Cod_Sucursal,Descripcion, Cod_Cobertura,sLastUpdate_id, dtLastUpdate_dt, iConcurrency_id, FechaCreacion, Activo  ) 
select Cod_Boveda, Cod_Sucursal,Descripcion, Cod_Cobertura,sLastUpdate_id, dtLastUpdate_dt, iConcurrency_id, FechaCreacion, Activo from Boveda

5. Ponemos el Identity Insert en off

SET IDENTITY_INSERT Boveda_Auxiliar OFF

6. Eliminamos la tabla Original

drop table Boveda

7. Renombramos la tabla auxiliar con el nombre de la tabla original.

sp_rename 'Boveda_Auxiliar','Boveda'

8. Llevamos la semilla del Identity al último ID

DBCC CHECKIDENT('Boveda', RESEED, select max(Cod_Boveda) from boveda)

Fácil, no? Sí, fácil pero tedioso. No tengo idea por qué no se puede hacer este proceso como en el caso del Sql Server 2005.

HaPPy Coding! =)

Monday, October 8, 2012

Cómo descargar videos en flash .swf


Sin preámbulos ni nada, a continuación una forma fácil para que podás bajar a tu disco duro un vídeo .swf

Para empezar, debés tener el browser o navegador FireFox.

Luego, estando en la página donde se encuentra el video, dale clic derecho (no sobre el video) y selecciona la opción "Ver información de la página"

A continuación, se te desplegará una ventanita con las pestañas "General", "Medios", "Permisos" y "Seguridad". Elije "Medios" y busca el que tenga la extensión ".swf", lo seleccionas, copias y pegas en la barra de navegación de tu navegador (valga la redundancia). 

Una vez copiado el link completo, le das el famoso "Guardar como" y listo! Ya lo tienes ;)

Friday, August 3, 2012

Formato fecha dd/MM/yyyy en sqlserver

Si querés hacer un SELECT a una columna de tipo Date o Fecha y querés que únicamente se vea la Fecha (y no la hora) y que sea del formato dd/MM/yyyy, el código sería así:

SELECT convert(char(10), EspecificoDel, 103) as FechaInicio FROM myTable

convert(char(10), NombreColumnaTipoDate, 103) 

 Sencillo pero útil.

 HaPPy CoDiNg :)

Wednesday, August 1, 2012

Google presentations

Presentaciones online del gigante Google (una buena alternativa a MS PowerPoint) agregó 450 nuevas fuentes. 

Para agregar una nueva fuente, selecciona la opción "Añadir Fuentes", a continuación se desplegará una ventana emergente donde podrás elegir las fuentes que desees.

 

Thursday, June 14, 2012

HTML5 desde cero


Estás buscando aprender HTML5? Te recomiendo que te descargués el PDF que ofrece "mejorando.la" que está muy bueno. Te cuesta 1 tweet, nada más que 1, está baratísimo XD (Te dejo el link al final de este post).

Con la guía tomarás las bases para iniciar y crear sitios y aplicaciones en HTML5 para PCs y teléfonos móviles. Funcionales en PC, Mac, iPhone, Androids e iPads.

También podés optar por otros cursos que también están interesantes como el de Android, Producción de Video para Internet, etc.

Bájate el Curso de HTML5 y otros



Thursday, May 31, 2012

Poner fija Una fila En excel 2010


Sin nada de preámbulos, a continuación cómo poner fijo un "encabezado" de filas en MS Excel 2010.

Seleccionas la fila hasta dónde quisieras que se ponga fijo. Por fijo se dice que cuando movás el scroll, el encabezado seguirá siendo visible.

Luego te vas a la ficha o menú que dice Vista. Clic en Inmovilizar Paneles tal como se muestra en la imagen.


Friday, May 25, 2012

¿Qué Es Foo, Bar En programación?


Siempre que revisa código ajeno, solía ver como nombres de variables de programación a "foo" o "bar".

El otro día justamente me volvió a pasar y esta vez me entró más la curiosidad del saber qué significado tiene eso. La explicación es tan graciosa.

foo

Utilizada generalmente como un nombre de ejemplo para absolutamente cualquier cosa, especialmente programas y archivos (sobre todo archivos scratch). 

Cuando se utiliza en conexión con 'bar' generalmente hace referencia al acrónimo de la II Guerra Mundial FUBAR ('Jodidos Sin Remedio', 'Fucked Up Beyond All Repair'), posteriormente modificado a foobar. Las primeras versiones del Archivo Jargon [JARGON] interpretaron este cambio como una moderación posguerra, pero parece ser que FUBAR se derivó de 'foo', tal vez influenciado por el alemán 'furchtbar', (terrible) - puede que incluso 'foobar' haya sido la forma original. 

Wednesday, May 23, 2012

Buscar dentro De Un string case-insensitive

Cómo comparar dos cadenas sin importar si el patrón de comparación está en mayúscula o minúscula.
String.Contains efectivamente busca pero es case-sensitive. Si intentás hacerlo con String.Contains te lanza la siguiente excepción:

"Unable to cast object of type 'System.OrdinalComparer' to type 'System.Collections.Generic.IEqualityComparer`1[System.Char]'."

Esto es porque el método String.Contains no soporta comparaciones case-insensitive .

Así que la opción para hacer la comparación case-insensitive es utilizando String.IndexOf.

Yo lo empleé de la siguiente manera:
 
For Each temp As LibreriaBrinks.eCliente.clsAgencia In todas
        If (temp.Nombre_Ref.IndexOf(txtBusquedaAgencia.Text, StringComparison.OrdinalIgnoreCase) <> -1) Then
            getItemListadoAgencias(temp)
        End If
Next

Bueno, a lo que a vos te debe importar es el If, obvia el For Each. Checka que la pregunta del if lleva "<> -1". Eso es importante. Fácil, no? A mi me funcionó. Está probado en VS2008.

HaPPy CoDiNg =)

Thursday, May 17, 2012

CSS3 - @font-face

Puede que desde mi archivo hoja de estilo, ponga cierta fuente tipográfica a mis títulos y desde mi máquina se vea genial. Pero, y desde otra máquina? Puede que no se vea tan genial jeje. Porque si esa fuente no está instalada en el sistema cliente, éste no lo verá y lo reemplazará por una que sí tenga instalada.

CSS3 tiene una propiedad especial para que los diseñadores web puedan utilizar cualquier fuente indpendientemente de si está o no está instalada en la máquina cliente.

@font-face se llama la propiedad y permite utilizar una fuente referenciando su ubicación la cual puede estar subida a nuestro servidor web o a un servidor externo.

La fuente tipográfica puede estar en distintos formatos:

Embedded OpenType (EOT)
True Type (TTF)
Open Type (OTF)
Web Open Font (WOFF)

No todos los navegadores soportan el mismo formato, por tanto, podés tener una misma fuente con diferentes formatos y describirlos en tu hoja de estilo. Checa más abajo cómo listo los diferentes formatos.

Cómo usar la directiva @font-face

@font-face {
 font-family: "AltamonteNF";
 font-style: normal;
 font-weight: normal;
 src: url("/fonts/AltamonteNF.ttf") format("truetype"),
 url("/fonts/AltamonteNF.woff") format("woff"),
 url("/fonts/AltamonteNF.eot") format("embedded-opentype");
}

body {
        background: #333333;
        font-family: AltamonteNF;
        font-size: 24pt;
        color: #ffffff;
}

Se vería así:


Podés descargarte gratuitamente fuentes tipográficas compatibles con @font-face en http://www.creamundo.com/ y http://www.fontsquirrel.com

Saturday, April 28, 2012

Desarrollo ASP.NET y herramientas De desarrollo


ASP.NET es un Framework gratuito de Microsoft para crear aplicaciones Web que trabaja con las normas basadas en HTML, CSS y JavaScript, entre otros.

Hay tres maneras de desarrollar con ASP.NET.

1. Web Forms.
ASP.NET Web Forms permite un modelo de desarrollo familiar que posibilita volver a utilizar los controles y sin esfuerzo incorporar datos en su sitio web, haciendo de su trabajo reutilizable y más productivo.

2. ASP.NET MVC. 
Es un enfoque poderoso que proporciona una separación clara de las capas de sus aplicaciones web y permite el control total sobre HTML para disfrutar un desarrollo ágil.

3. Web Pages.
Las ASP.NET Web Pages proporcionan una manera fácil de conexión a base de datos o añadir contenido de redes sociales con server code dinámico mezclado con HTML usando la nueva y liviana sintaxis RAZOR.

Microsoft proporciona un conjunto de herramientas de desarrollo Web optimizada para los diversos usuarios y experiencias a diseñar, construir, probar e implementar.

1. Expression Web.
Está optimizado para los diseñadores web que se centran en HTML, CSS y en las imágenes para diseñar, desarrollar y validar las experiencias Web contras múltiples Browsers.

2. Visual Studio.
Es un poderoso entorno de desarrollo optimizado para los profesionales que demandan la máxima flexibilidad y riqueza en la arquitectura de nuevas aplicaciones Web para la empresa o del mercado de Internet.

3. Web Matrix.
Ofrece una manera sencilla para los desarrolladores Web, para crear, personalizar e implementar sitios con aplicaciones de Open Source o páginas Web personalizadas con ASP.NET o PHP.

Fuente: WebCast. Introducción a WebMatrix y Razor Sintax

Friday, April 27, 2012

Dada una fecha, obtener fecha inicio y fecha fin (VB.NET)

OoOoh, qué título más largo XD. No encontré otro que pueda resumir bien esta tarea.

Aquí la digo otra vez... (en Visual Basic .NET)

Dada una fecha, obtener o extraer la fecha inicial y la fecha final de esa fecha, valga la redundancia.

Ejemplo, fecha: 26/04/2012
La fecha inicial: 01/04/2012
La fecha final: 30/04/2012

La fecha inicial obvio es fácil, siempre será 01 y el mes y el año lo podes obtener a través de los métodos propios de VB.NET (.month, .year) Pero se puede evitar la fatiga haciendo eso... Cómo? Así:

Dim fecFin As New Date
Dim fecIni As New Date
fecFin = Me.txtFechaX.Value
fecIni = Me.txtFechaX.Value
fecIni = fecIni.AddDays(-fecIni.Day + 1)
fecFin = fecFin.AddDays(-fecFin.Day + 1).AddMonths(1).AddDays(-1)

A mi me sirvió de mucho, espero que sea lo que estés buscando. Saludos.

HaPPy CoDiNg! =)

Thursday, April 26, 2012

Usar case en claúsula order By

La verdad es que yo nunca he utilizado el CASE dentro de un ORDER BY. Pero hoy aprendí a hacerlo :) Tal vez me sirva más adelante. Aun no he pensado en el beneficio que pueda sacar de esta característica. 

Es sencillo, voy a dejar dos ejemplos. Por si acaso, cogí la primer tabla que vi cuando abrí mi base de datos y la adapté para dicho ejemplo. Todo con fines académicos, no lo veo para implementarlo en la vida real, no este ejemplo, jeje. :) 

(Probado en Microsoft SQL Server 2008)

Con parámetros.
Le mando la columna con la cual se ordenará y si se ordenará de manera ascendente o descendente.

DECLARE @columna varchar(50)
    SET @columna = 'tipo_registro'
    
 DECLARE @orden varchar(4)
    SET @orden = 'ASC'

 DECLARE @mix varchar(55)
    SET @mix = @columna + ':' + @orden

SELECT * FROM com.Contrato WHERE cod_cliente in (29,30)
ORDER BY


 CASE
        WHEN (@mix = 'tipo_registro:ASC')
        THEN tipo_registro
    END ASC,
    CASE
        WHEN (@mix = 'tipo_registro:DESC')
        THEN tipo_registro
    END DESC
 
 

Con condición. 
Ordenará por cierta columna de acuerdo a una condicionante.

SELECT * FROM com.Contrato WHERE cod_cliente in (29,30)
ORDER BY
 CASE
  WHEN cod_cliente=29
  THEN tipo_registro
  END,
 CASE
  WHEN cod_cliente=30
  THEN nro_contrato
  END 

HaPPy CoDiNg =)

Thursday, April 12, 2012

Cómo implementar una base De datos: 6to paso

Y llegó la hora de consultar los datos de las tablas de nuestra base de datos. Este paso es para satisfacer los reportes requeridos por los usuarios. Nuestro interés no solo es almacenar y almacenar datos sino también consultarlos, extraerlos, estudiarlos, etc.

Como sexto paso, utilizaremos la sentencia de consultas del SQL: SELECT.

El SELECT puede ser tan sencillo como complejo. Todo dependerá de los requerimientos, de lo que queremos.

Una regla general para saber si la consulta será una consulta anidada es cuando en el enunciado encontramos dos preguntas. Mi clásico ejemplo es: Quién es el alumno que obtuvo la mejor nota del semestre I/2012? Aquí primero debemos encontrar cuál es la mejor nota del semestre y luego saber qué alumno obtuvo esa nota.

La sintaxis de la instrucción SELECT es:

SELECT [DISTINCT] nombre de las columnas
FROM nombre de la tabla(s)
[WHERE condición de búsqueda]
[GROUP BY nombre de las columnas de agrupamiento]
[HAVING condición de búsqueda para el Group By]
[ORDER BY nombre las columnas de ordenamiento [ASC | DESC]]

Un SELECT mínimo debe ser así:

SELECT * FROM tabla

TIPS

Si hay un GROUP BY, es porque estamos utilizando funciones agregadas en el SELECT.

Puede existir un función agregada en el SELECT sin usar GROUP BY. Pero no puede existir un GROUP BY si existir una función agregada en el SELECT.

En el GROUP BY deben ir todas las columnas que van en el SELECT.

No puede existir un HAVING sin existir un GROUP BY. Puede existir un GROUP BY sin que haya un HAVING.

Existen tres tipos de consultas anidadas. Los SELECTs que van en el SELECT principal, los SELECTs que van en el FROM y los SELECTs que van en el WHERE.

Bueno, esta publicación no pretende enseñarte SQL. En la web hay n manuales para aprender cómo hacer consultas complejas y optimizadas.

Wednesday, April 11, 2012

Cómo implementar una base De datos: 5to paso

Habrán filas en nuestras tablas que ya no se requieran más. Como quinto paso, emplearemos la sentencia DELETE.

1. Delete Simple

Sin especificar una condición, eliminaremos todas las filas de una tabla sin eliminar la tabla

DELETE FROM persona

2. Delete con Condición

Podemos eliminar las filas de una tabla sólo aquellas que cumplan una condición

DELETE FROM presona WHERE fec_nac > '1985/01/01'

Como en todo, también podemos agregarle una consulta anidada el WHERE. Todo es cuestión de creatividad y basado en conocimiento. Nuestro delete puede convertir de algo sencillo a algo muy complejo.

Tuesday, April 10, 2012

Cómo implementar una base De datos: 4to paso

Después de haber hechos los INSERT INTO, es probable que los datos cambien con el tiempo, por tanto, se recurre a la sentencia UPDATE. Esta sentencia llega a ser nuestro cuarto paso.

La sentencia UPDATE puede ser desde lo más sencillo hasta lo más complejo.

1. Update Simple

UPDATE persona
SET fec_nac= '1985/08/20'

En un update simple, actualizamos TODOS los registros de la tabla

2. Update con Condición

UPDATE persona
SET fec_nac= '1985/02/23'
WHERE id=1

En un update con condición, actualizamos únicamente los registros que cumplen esa condición. En el WHERE podemos agregar una condición simple o compleja a través de consultas anidadas. (un SELECT)

3. Update con CASE

Podemos actualizar una tabla de base de datos de acuerdo a distintos casos. Por ejemplo, queremos ponerle un descuento a un producto pero esto lo queremos hacer de acuerdo al precio del producto.

UPDATE producto
SET descuento= CASE
WHEN (precio < 100) THEN precio*0.1
WHEN (precio <=100 AND precio <500) THEN precio*0.2
ELSE descuento=precio*0.3 END

Para utilizar la cláusula CASE, hay dos maneras de hacerlo:

CASE
 WHEN condición THEN resultado_1
 ELSE resultado_2
 END
 CASE la expresión
 WHEN la condición THEN resultado_1
 ELSE resultado_2
 END

La cláusula ELSE se puede omitir pero el resultado será NULL.

Monday, April 9, 2012

Cómo implementar una base De datos: 3er paso

Una vez creada la base de datos, las tablas, es hora de poblarla. Tercer paso: INSERT INTO.

A la hora de realizar un INSERT INTO podemos hacerlos de 3 maneras.

Considérese la siguiente tabla para los ejemplos:

CREATE TABLE persona(
 id int identity(1,1) primary key,
 nombre varchar(20) not null,
 ap_paterno varchar(20) not null,
 ap_materno varchar(20) null,
 fec_nac datetime null,
 direccion varchar(30) not null
)

1. Sin especificar las columnas a insertar (por defecto, todas).

INSERT INTO persona VALUES ('lizzy', 'mendivil', null, null, 'california st #159')

Cuando no especificamos las columnas, éstas deben coincidir con el tipo de datos y la cantidad de columnas que tiene nuestra tabla. Resulta en desventaja ya que si existen valores nulos posibles, éstos debemos registrarlo también llenándolo con "null" (tal como se muestra en el ejemplo) y además si nos equivocamos y no hacemos coincidir con el tipo de datos, la ejecución de la sentencia resultará en error.

Otra desventaja es que dejamos que el compilador trabaje más analizando que los valores y las columnas correspondan.

2. Especificando las columnas a insertar.

INSERT INTO persona (nombre, ap_paterno, direccion) VALUES ('benjamin', 'villarroel', 'florida st #748')

Nótese que después de escribir el nombre de la tabla, entre paréntesis espcificamos las columnas que vamos a insertar con los valores.

3. A partir de un SELECT.

INSERT INTO persona (nombre, ap_paterno, direccion) SELECT nombre, ap_paterno, direccion FROM cliente

Solo debemos asegurarnos que el tipo de datos de la tabla de la cual queremos extraer los datos coincida con el tipo de datos de las columnas de la tabla a la cual queremos insertar los valores. El tipo de datos y el número de columnas.

Nótese que se reemplaza la palabra clave VALUES con la instrucción SELECT.

Nota.- Cuando realizamos un INSERT a una tabla la cual contiene referencia a otra (FOREIGN KEY), debemos asegurarnos que el valor de esa columna PRIMERO exista en la tabla a la cual pertenece, esto es la Integridad de Datos.

Friday, April 6, 2012

Cómo implementar una base De datos: 2do paso

Como segundo paso, viene la creación de las tablas de la base de datos: "CREATE TABLE".

Es importante resaltar que la creación de las tablas se debe hacer en orden. Más que todo en las relaciones 1 a N. Por ejemplo, 1 cliente realiza N ventas. No podemos crear primero la tabla "ventas" sin haber creado antes la de "cliente" Por tanto, las tablas que no tienen llave foránea deben crearse primero.

La sentencia CREATE TABLE con todos sus atributos sería como sigue:

CREATE TABLE nombre_table
(
 campo1 tipo_dato [NULL/NOT NULL] | [CHECK (expresion_logica)] | [DEFAULT expresion_constante] | [aqui podemos agregar si va a ser primary o foreign key],
 ...
 PRIMARY KEY (campo_llave_pk),
 FOREIGN KEY (campo_llave_fk) REFERENCES nombre_tabla2 (campo_llave_pk_tabla2)
)
Ejemplo. Creación de las tablas para una base de datos de Ventas (sencilla para fines académicos)

CREATE TABLE cliente(
 id int identity(1,1) primary key, --cuando es llave primaria, automáticamente es NOT NULL
 nombre varchar(20) not null,
 ap_pat varchar(20) not null,
 ap_mat varchar(20) null, --si no se especifica que sea NULL, el DBMS lo pone por defecto.
 direccion varchar(30) null,
 sexo char(1) CHECK (sexo in('M','F')),
 limite_credito decimal(10,2) not null
)

CREATE TABLE vendedor(
 id int identity(1,1) primary key,
 nombre varchar(20) not null,
 ap_pat varchar(20) not null,
 ap_mat varchar(20) null, 
 direccion varchar(30) null,
 sexo char(1) CHECK (sexo in('M','F'))
)

CREATE TABLE producto(
 id int identity(1,1) primary key,
 descripcion varchar(50) not null,
 precio decimal(10,2) not null,
 stock int not null
)

CREATE TABLE ventas(
 id int identity(1,1) primary key,
 fecha datetime not null,
 descuento decimal(10,2) default 0,
 id_cliente int foreign key references cliente(id),
 id_vendedor int foreign key references vendedor(id)
)

CREATE TABLE ventas_detalle(
 id int identity(1,1) primary key,
 cantidad int check (cantidad >0),
 id_producto int foreign key references producto(id),
 id_venta int foreign key references ventas(id)
)

Una vez creadas las tablas, podría darse el caso de que querramos eliminar alguna o modificarla.

Para eliminar una tabla: DROP TABLE

Practicamente, podemos darle un DROP a todo lo que le hayamos dado un CREATE (table, trigger, view, etc.)

Ejemplo:

DROP TABLE venta_detalle

Para modificar una tabla: ALTER TABLE

Podemos agregar una nueva columna a una tabla, eliminar una columna existente de la tabla o modificar una collumna existente de tabla.

1. Añadir una definición de la columna de una tabla. Puede crearse con valores nulos o valores.

ALTER TABLE nombre_tabla ADD nombre_columna_nueva tipo_dato [NULL] | [CONSTRAINT nombre_nueva_restriccion CHECK/DEFAULT]

2. Eliminar una columna de la tabla. Pero antes de su eliminación deben ser eliminados por ALTER TABLE todas las restricciones que estén definidas sobre esta solumna.

ALTER TABLE nombre_table DROP COLUMN nombre_columna

3. Eliminar un constraint.

ALTER TABLE nombre_table DROP CONSTRAINT nombre_del_constraint

4. Crear una llave primaria. En el caso de que esta tabla ya contenga datos, las columnas que escojamos para la llave primaria deben ser de valor únicos por cada fila.

ALTER TABLE nombre_table ADD PRIMARY KEY (key1, key2...)

5. Crear una llave foránea. La columna a definir como llave foránea debe contener previamente valores que corresponden a la llave primaria de la otra tabla.

ALTER TABLE nombre_table ADD FOREIGN KEY (key)

6. Habilitar o inhabilitar los trigger en una tabla.

ALTER TABLE nombre_table ENABLE TRIGGER nombre_trigger

ALTER TABLE nombre_table DISABLE TRIGGER nombre_trigger

Thursday, April 5, 2012

Cómo implementar una base De datos: 1er paso

A lo largo del ciclo de la implementación de una base de datos relacional, entran en juego 3 tipos de lenguajes los cuales el SQL (Structure Query Language - Lenguaje de consulta estructurado) los clasifica como sigue a continuación:

** Lenguaje de Definición de Datos (DDL, Data Definition Language)
** Lenguaje de Manipulación de Datos (DML, Data Management Language)
** Lenguaje de Control de Datos (DCL, Data Control Language)

Para llevar a cabo el primer paso a la hora de implementar una base de datos, utilizaremos lo que es el DDL.

DDL
Grupo de sentencias del SQL que soportar la definición y declaración de los objetos de la base de datos tales como la base de datos misma, las tablas, las vistas, los índices, los procedimientos almacenados, las funciones, los triggers, etc.

Los comandos son:

CREATE
ALTER
DROP

Ok. El primer paso entonces es definir en el disco duro el área física que contendrá las tablas dela base de datos.

El siguiente pedazo de código se encargará de ello:

CREATE DATABASE ventas ON PRIMARY(
 NAME = ventas_data, --Nombre de la BD
 FILENAME='c:\ventas.mdf', --Dirección donde se crea la BD
 SIZE=5MB, --Tamaño de la BD
 MAXSIZE=10MB, --Tamaño máximo de la BD
 FILEGROWTH=1MB --Crecimiento de la BD
)
LOG ON(
 NAME=ventas_log,
 FILENAME='c:\ventas.ldf',
 SIZE=5MB,
 MAXSIZE=10MB,
 FILEGROWTH=1MB
)

La primer sentencia crea un archivo principal de extensión mdf de tamaño inicial de 5 MB, cuando este espacio se agote, 5MB se expandirá en 1MB más para tener espacio libre y poder meter más registros o tablas, y cuando nuevamente se agote, se expandirá nuevamente en 1 MB y así sucesivamente cuando haya alcanzado el máximo de 10MB.

Y lo mismo ocurrirá con el archivo de registro de transacciones (.ldf)

Cuando nosotros no lo especificamos manualmente, el DBMS lo hace. Por ejemplo, al ejecutar solo la sentencia CREATE DATABASE ventas, el DBMS (en este caso, SQL SERVER) hizo lo siguiente: (selecciona la base de datos que acabas de crear, clic derecho y propiedades, te levantará la siguiente ventana)

Tuesday, March 6, 2012

Mañana se lanza SQL Server 2012

Mañana, 07 de marzo, Microsoft lanzará SQL Server 2012.

Las principales novedades se dieron a conocer a través del interesante evento "Las 12 horas de SQL Server 2012".

Algunas novedades en manejabilidad en el siguiente evento. Y a esperar las pocas horas que faltan para tener SQL Server 2012.

Friday, February 17, 2012

Pautas para usar serialización

VB.NET

<Serializable()> Public Class Test

C#

[Serializable]
public class Test

Qué es serialización?
Serialización es el proceso de convertir la información en bytes la cual puede ser guardada o transferida.

Pautas a la hora de utilizar la serialización.

*Si tenés dudas a la hora de serializar tu clase, atrévete a hacerla serializable "Serializable". Pues aunque tal vez ahora no necesites serializarla, en un futuro tal vez lo necesites o tal vez otro desarrollador necesite que esa clase sea serializable. Entonces, si aún tenés dudas, opta por hacerlo.

*Los atributos que son calculados, derivados o temporales deben ser "NonSerialized".

*Utiliza "SoapFormatter" cuando requieras portabilidad. Utiliza "BinaryFormatter" para una mayor eficiencia.

*Utiliza "XML Serialization" cuando necesites intercambiar un objecto a una aplicación que tal vez no está basada en el .NET Framework y cuando no necesites serializar miembros privados. Te da los beneficios: Mayor interoperabilidad, mejor administración, compatiblidad y legibilidad.

Monday, February 13, 2012

Métodos de extensión

Cuando estamos desarrollando nuestro propio framework para utilizarlo en nuestros proyectos, generalmente creamos una clase "Utilitarios" en la cual programos métodos que nos servirán de mucho en el desarrollo, métodos del tipo "shared" (si utilizas vb.net y "static" en C#)

Esto "nos ayudaba" a utilizar aquél método sin necesidad de crearnos un objeto de la clase a la cual pertenece, es decir, poder llamarlo directamente desde otros lugares. Pero, por qué digo "nos ayudaba"? Porque felizmente están los "Extensions Methods".

Métodos de Extensión
Nos permiten agregar métodos a las clases existentes de .NET Framework o a nuestras propias clases.

Ejemplo

Nos creamos nuestro módulo (en VB.NET 2008/2010) que se llame "Extensiones". A ese módulo le importamos System.Runtime.CompilerServices para extender los métodos. Mi método de ejemplo es el siguiente:


Imports System.Runtime.CompilerServices
Imports System.Text.RegularExpressions


Module Extensiones

     _
    Public Function hasEspecialCharacters(ByVal input As String) As Boolean
        If Regex.IsMatch(input, "^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ]+$") Then
            Return False
        Else
            Return True
        End If
    End Function
End Module


El método del ejemplo valida dada una entrada si ésta tiene caracteres especiales, devuelve true si los tiene, false si no los tiene. También tuve que importar RegularExpressions para que el ejemplo me funcione.

No te olvides escribir "<Extension()> _" antes de la firma de tu método. (Sólo ahí, el que aparece luego al final del módulo como se ve en el ejemplo es solo por el intérprete html de blogspot jeje, ignóralo.)

Luego, la llamada sería así:



HaPPy CoDiNg

Friday, February 10, 2012

Ceh – certified ethical hacker

Este profesional habilidoso debe entender y conocer como debe buscar debilidades y vulnerabilidades en sistemas objetivo, a demás usar el conocimiento y herramientas como todo un hacker malicioso.

Conocimientos

Introducción al Hackeo Ético
Huellas
Escaneo
Enumeración
Hackeo de sistemas
Troyanos y puertas traseras
Sniffers
Negación del servicio
Ingeniería social
Hijacking de sesión
Hackeo de servidores Web
Vulnerabilidades de aplicaciones Web
Técnicas basadas en la Web de crackeo de claves
Inyección de SQL
Hackeo de redes inalambricas
Virus y gusanos
Seguridad física
Hackeo de Linux
Evasión de IDS’s, Firewalls, y Honeypots
Sobrecarga de Buffer
Criptografía
Pruebas de penetración

Thursday, February 9, 2012

CFE – Certified Fraud Examiner

Un CFE es un líder en la comunidad anti-fraudes, que se destaca como especialista en la prevención y disuasión de fraudes. Representan los estándares más altos de la ACFE y poseen una gran habilidad en todos los aspectos de la profesión. Conducir la investigación y el desarrollo hacia métodos y tecnologías nuevas y emergentes en el campo de las ciencias de la computación forense

Conocimientos

Los conocimientos certificados por la CFE abarcan cuatro áreas:

Criminología y Ética: el propósito de ésta área es probar el conocimiento de los conceptos criminológicos y evaluar la comprensión de la ética fundamental de la profesión de investigador de fraudes. Aquí se incluye la administración de la justicia criminal, las teorías de la causación del crimen, las teorías de prevención del fraude, fuentes de información del crimen, y situaciones éticas.

Transacciones Financieras: se pondrá a prueba el conocimiento de los tipos de transacciones financieras fraudulentas en las que se incurren en los registros contables. Se debe demonstrar conocimiento en contabilidad básica y teoría de auditoría, tipos de fraudes, controles internos para disuadir fraudes y otros asuntos de auditoría y contabilidad.

Investigación de Fraudes: se incluyen temas como: entrevistas, toma de declaraciones, obteniendo información de archivos públicos, rastreando transacciones ilícitas, evaluando engaños y reportes escritos.

Elementos Legales de Fraude: se pondrá a prueba la familiaridad con muchas de las ramificaciones legales de la conducción de investigaciones de fraudes, incluyendo leyes criminales y civiles, reglas de la evidencia, derechos del acusado y del acusador, y experto en asuntos de testigos.

Wednesday, February 8, 2012

Certificaciones afines a La seguridad informática

Entre las certificaciones asociadas al área de la seguridad informática y áreas afines están:

CISA. Certified Information Systems Auditor. Es una certificación para auditores respaldada por la ISACA (Information Systems Audit and Control Association).

CISM. Certified Information Security Management. Es una certificación para administradores de seguridad de la información respaldada por la ISACA.

(Diferencia entra CISA y CISM: CISA es para trabajar como auditor y CISM es para trabajar como gerente o gestor de proyectos.)

CFE. Certified Fraud Examiner - Investigador de Fraudes Certificado. Un CFE es un líder en la comunidad anti-fraudes, que se destaca como especialista en la prevención y disuasión de fraudes.

FCA. Forensic Computer Advisor. La Certificacion FCA comprende ampliamente la ciencia de la Informática Forense, desde temas legales hasta temas muy tecnicos en materia forense.

CEH. Certified Ethical Hacker - Hacker Ético Certificado. Debe entender y conocer como debe buscar debilidades y vulnerabilidades en sistemas objetivo, a demás usar el conocimiento y herramientas como todo un hacker malicioso.

CISO. Certified Information Security Officer. Permite al profesional desarrollar conocimientos y habilidades que lo habilitan para el ejercicio de la función: Oficial de Seguridad obteniendo un reconocimiento, local mediante un certificado profesional.

En las siguientes publicaciones iré desarrollando un poco más en lo que consiste cada certificación.

Monday, February 6, 2012

Informática forense


La otra tarde, conversando entre ingenieros (jeje, es que los ingenieros tenemos conversaciones ingeniosas xD), surgió el tema de la "Informática Forense". Es que resulta que un compañero de la U pronto va a defender su examen de grado de derecho (su segunda carrera).

Hace tiempo ya, a inicio del 2010 leí sobre la informática forense, en la ciudad de Sucre se estaba ofertando una especialidad, su audiencia estaba dirigida para los abogados, ingenieros de sistemas, informáticos...

De las ramas de la carrera de derecho, siempre me interesó más la penal. Mucho por investigar, mucho por analizar, se necesita cuidado, ser minuciosos, para mi es algo apasionante - jejeje.

Pero... qué es la informática forense?

Es la ciencia dedicada a la recolección, preservación, análisis y presentación de la evidencia digital en casos judiciales, arbitrales o procesos internos disciplinarios.

Es el proceso de investigar dispositivos electrónicos o computadoras con el fin de descubrir y de analizar información disponible, suprimida, u ocultada que puede servir como evidencia en un asunto legal.

La Informatica Forense recolecta y utiliza la evidencia digital para casos de delitos informáticos y para otro tipo de crimenes usando técnicas y tecnologías avanzadas. Un experto en informatica forense utiliza estas técnicas para descubrir evidencia de un dispositivo de almacenaje electrónico.

Esta ha sido una pequeña introducción, más adelante desarrollaré un poco más este tema tan interesante y actual.

Tuesday, January 24, 2012

Concatenar filas en SQL

A veces quisiéramos mostrar en nuestro reporte por cada maestro, un detalle de datos no en filas sino separados por coma. Por ejemplo, en un x contrato están asociados n servicios. Estos servicios están guardados en una tabla mientras que el contrato en sí, está guardado en otra. Por tanto si el contrato tiene asociados más de un servicio, vamos a tener n filas de servicios y con el join vamos a tener la misma n filas de datos del contrato siendo que n-1 están repetidas.

Me dejo entender, no?

La vaina es concatenar filas. Hay muchas formas de hacerlo. Pero la que he usado y me ha favorecido es "FOR XML PATH"

Por ejemplo, la forma más sencilla, un SELECT directo sin JOIN sería así:

SELECT descripcion + ', ' FROM Servicios_Detalle WHERE cod_servicio=1 FOR XML PATH('')

En la consulta se está agrupando en una sola fila todos los ítem que cumplan el Where dado.

Podrás notar que el resultado se vuelve un link.

Y con un JOIN sería así:

SELECT d.cod_servicio, d.descripcion AS maestro,
(SELECT descripcion + ', '  FROM Servicios_Detalle d2 WHERE d2.cod_servicio=d.cod_servicio FOR XML PATH('')) AS detalles
FROM Servicios d

Esta consulta concatena las filas de detalle que pertenezcan a un maestro dado. La cantidad de filas de resultado será la misma cantidad de filas que hay en la tabla maestro. Ya no se repetirán pues todo estará resumido en una sola fila.

HaPPy CoDiNg! =)

Wednesday, January 18, 2012

Alternar color De fila en reporting services

Tenemos nuestra tabla de datos, son muchas filas y el alternar color de fila más allá de lo bonito que se ve, creo que permite una mejor lectura de la info.

Hoy me tocó hacer eso y el código es sencillo. No voy a hacer una captura de pantalla de mi reporte porque allí tengo datos confidenciales. Los colores que estoy intercalando es el Gainsboro con el Transparent.

Aquí te van los pasos:

1. En el diseño de Reporting Services, selecciona la fila.


2. Clic derecho, clic en Properties/Propiedades. (También puedes digitar F4 directamente)

3. Se te desplega el cuadro de propiedades.

4. En la propiedad que lleva por nombre "BackgroundColor", desplegas el combo y das clic en "Expression"


5. Se te abrirá la siguiente ventana emergente, allí debes agregar el siguiente código:

= IIf(RowNumber(Nothing) Mod 2 = 0, "Gainsboro", "Transparent")


6. Podés alternar con los colores de tu preferencia.

HaPPy CoDiNg!

Monday, January 16, 2012

No mostrar control cuando No hay datos (reporting services)

Cuando no hay datos, nuestros controles no se cargan, si bien no se ven, sí dejan un espacio y eso es lo que queremos evitar.

Hace un tiempo, esta respuesta fue contestada para Crystal Reports (http://lizzymendivil.blogspot.com/2011/08/no-visualizar-un-subreporte-crystal.html)

Ahora, la forma de hacerlo para Reporting Services es algo distinta pero más sencilla:

Clic derecho sobre el control que vamos a ocultar en el caso de que no hayan datos, clic en Properties. Clic sobre la pestaña Visibility. Elije la opción "Expression", clic sobre el botón de función (fx) o ingresa lo siguiente sobre el textbox de Expression:

= IIf (CountRows() = 0, true, false)


Y nada más!

HaPPy CoDiNg =)

Tuesday, January 10, 2012

Cabecera líquida - CSS

A la hora de maquetar nuestra página web, tenemos dos opciones con respecto al header o cabecera. Una es la cabecera líquida y la otra es la cabecera fija.

La líquida, a diferencia de la fija, se adaptará a la resolución de la pantalla del usuario que está visualizando nuestro sitio.

(Blogger.com utiliza cabecera líquida)

Maquetación con Cabecera Fija

Tenemos un div mayor como contenedor de todo, allí dentro estará la cabecera, el menú, el contenido, el pie de página y las cajas que querramos meterle.

Código XHTML


Maquetación con Cabecera Líquida

A diferencia del anterior, aquí el contenedor mayor no contendrá a la cabecera (incluso puede no contener el menú). La cabecera estará fuera.

Código XHTML

Nombre del Sitio

Slogan del Sitio

Bienvenido

Párrafo ...
Pie de pagina

Código CSS

* 
{
 margin:0;padding:0;
}

body 
{
 font-family: Arial, Helvetica, sans-serif;
}
h1,h3
{
 margin-left:10px;
}

#cabecera 
{
 height:75px;color:#fff;background:#036;
}

#contenido 
{
 width:770px;
 margin:0 auto;
 text-align:justify;
}
#pie 
{
 text-align:center;
 border-top:1px solid #eee;
 margin-top:20px;
}