Buscar en este blog

sábado, 2 de octubre de 2010

Procedimientos almacenados

Los Stored procedures o procedimientos almacenados son un conjunto de operaciones, instrucciones o como su nombre lo dice procedimientos que estan almacenados en una base de datos.

Un solo stored procedure puede contener desde una hasta varias instrucciones.


Estos se ejecutan directamente en el motor de la base de datos. La ventaja de estos, es cuando con unos parametros se ejecuta multiples operaciones, de las cuales el servidor se encargaria y a nosotros solo nos retorna los resultados finales. En estos casos en vez de nosotros hacer multiples cnosultas y transacciones al servidor generando trafico en la red, solo le mandamos los parametros necesarios y nos devuelve una respuesta final (ya sea unica o en forma de tabla).




La estructura para crear un SP (Stored procedure) es muy simple.


CREATE [PROCEDURE] [DBO].[nombre] <parametro_1 tipo_de_dato>[,<parametro_N tipo_de_dato>]
as
begin
<instrucciones>
end



Ejemplo: Suponiendo que tenemos las dos tablas "empleados" y "ventas" siguiente y queremos sacar diferentes datos como cantidades vendidas por en unidades y en pesos (por ahorita solo esas dos formas) en un solo sp, quedaria de la forma siguiente:


----table empleados----
|    cve_emp int,         |
|    nombre char(25),   |
|    app char(20),        |
|    apm char(20)        |
-----------------------

------table ventas-----
|    emp int,               |
|    fec char(8),          |
|    uds double,           |
|    monto money        |
-----------------------



-------------------------
-------PROCEDURE-------
-------------------------
create procedure dbo.consulta_empleados
@tipo char(1)
as
begin
if @tipo='1' begin
   select v.fec,e.nombre+' '+e.app+' '+e.apm, count(v.monto)
   from empleados e, ventas v
   where e.cve_emp=v.emp
   group by v.fec,e.nombre,e.app,e.apm
end else @tipo='2' begin if begin
   select v.fec,e.nombre+' '+e.app+' '+e.apm, sum(v.monto)
   from empleados e, ventas v
   where e.cve_emp=v.emp
   group by v.fec,e.nombre,e.app,e.apm
end else
   select 'OPCION NO VALIDA'
end
end




Y para ejecutarlo se puede hacer de las siguientes formas.

--Consulta las unidades que cada empleado (agrupado por fecha y empleado)
exec cnsulta_empleados "1"
--Consulta el total de valor vendido de cada empleado (agrupado por fecha y empleado)
exec cnsulta_empleados "2"

Bueno pues asi de facil es, y complicado como se lo pongan, ustedes pueden hacer que les haga unir con tablas hasta con las que era imposible con uniones en querys de SQL unicos (o que eran muy dificiles, tambien pueden crear variables de tabla que funcionan como una tabla temporal solo que estas se destruyen inmediatamente se termina de ejecutar el procedimiento almacenado, todo esto lo veremos mas adelante.

Saludos y espero les sea de utilidad esta informacion.

Leer post completo...

miércoles, 29 de septiembre de 2010

Creacion de usuarios desde CMD

Buenas tardes, no se si habran tenido la necesidad de crear un usuario o quitarle la contraseña a este usuario pero sin tener que abrir el panel de control.

Bien, pues es muy fácil desde el simbolo del sistema (CMD) como veremos a continuacion...


Precionamos la tecla de windows + r (con esto nos aparecera la ventana de ejecutar)
Escribimos "CMD" (no importa si son mayusculas o minusculas o combinadas)

Ahora, en esa pantallita negra, podemos ver todos los usuarios de nuestra equipo con tan solo escribir en ella lo siguiente "NET USER". Asi listara los usuarios.

Para ver el estado de un usuario podemos especificarlo, por ejemplo el Administrador, de la siguiente manera: "NET USER ADMINISTRADOR".

Para activar un usuario o desactivarlo solo escriba:
"NET USER ADMINISTRADOR /ACTIVE:YES" (Para activar) ó
"NET USER ADMINISTRADOR /ACTIVE:NO" (Para desactivar).
Estos comandos solo desactican al usuario, no lo eliminan.

Para crear un nuevo usuario solo ejecute de la siguiente manera:
"NET USER JUAN /ADD" (Crea el usuario JUAN sin contraseña)
"NET USER JUAN 123456 /ADD" (Crea el usuario JUAN con contraseña 123456)
"NET USER JUAN /DELETE" (Borra el usuario JUAN)

Ahora si queremos que nuestro usuario sea administrador, tenemos que agregarlo a ese grupo de la siguiente manera.
"NET LOCALGROUP ADMINISTRADORES JUAN /ADD" (Agrega el usuario "JUAN" al grupo de Administradores)

Y para quitarlo del grupo de administradores es:
"NET LOCALGROUP ADMINISTRADORES JUAN /DELETE" (Elimina al usuario JUAN del grupo de Administradores)

Y ahora el comando esperado. Como establecer, cambiar o quitar una contraseña a un usuario. Tomando el ejemplo del usuario JUAN ,solo necesitan ejecutar este comando:
"NET USER JUAN * "
Y despues, les pedira la nueva contraseña, si quieren colocarle una, solo escribanla, si quieren borrar la contraseña solo tecleen un enter. Despues les pedira confirmar la contraseña, de igualmanera, vuelvan a escribirla y den enter o simplenteme den enter si estan eliminando la contraseña.

Parece que esto es todo por hoy.

Espero sus comentarios. Saludos.

Leer post completo...

viernes, 24 de septiembre de 2010

Tareas en Windows Server 2008 (BAT)



No sé si les ha pasado que colocan una tarea programada, la cual ejecuta un archivo BAT, que este asu vez, genera archivos, ya sea un log, un zip u otro, y aparentemente el bat se ejecuta sin problemas pero cuando consultamos si el archivo que genera el bat existe... sorpresa!!!, no existe, jamás fue generado.

Eso es lo que pasa en el S.O. Windows server 2008 R2, sin embargo descubri la forma de programarlos y que trabajen como debe ser.

Les mostraré como deben colocar una tarea programada en el sistema operativo Microsoft Windows 2008 server R2 que ejecuta un queridisimo y muchas veces necesario archivo de ejecucion por lotes (BAT).


Teniendo el archivo BAT listo. (En este ejemplo el archivo bat despliega un "dir" y el resultado almacena en un arhivo de texto dentro de la misma ruta donde esta el bat)

Paso 1.- Abrir el programador de tareas de Windows.

Paso 2.- Crear nueva tarea.




Paso 3.- En la pestaña "General" colocar el nombre y descripcion de la tarea programada y en la parte inferior escoger la opcion "Ejecutar tanto si un usuario inicio sesion como si no" y palomear "Ejecutar con los mas altos privilegios" y por ultimo en "Configurar para" escoger "Windows server 2003, Windows XP o Windows 2000", este ultimo es muy importante para que funcione correctamente nuestro BAT.





Paso 4.- En la pestaña "Desencadenadores" escoger el momento en que uno busca se ejecute la tarea, ya sea una hora especifica en un dia especifico, un fecha diaria, por semana, por mes, al iniciar windows, etc.







Paso 5.- En la pestaña "Acciones" elegir "nueva.." y en esa nueva ventana, seleccionar el BAT que queremos que se ejecute y en donde dice "Iniciar en (opcional)" se coloca la ruta donde esta nuestro BAT , es muy importante que se ponga la ruta, porque aunque dice (opcional) no lo es, ya que si no la colocamos, el bat jamas se ejecuta correctamente.







Paso 6.- En la pestaña "Condiciones" deseleccionaremos todo.





Paso 7.- En la pestaña "Configuración" tambien deseleccionaremos todo, este y el anterior paso son opcionales, queda a disposicion del usuario configurar estas dos pestañas.





Paso 8.- Aceptar. Aqui le pedira el usuario y contraseña que usara la tarea para ejecutarse. Debe ser un usuario con privilegios para ejecutar un archivo de ejecucion por lotes.





Y esos son los pasos a seguir.

Ahora podemos ver que ya nos aparece esta tarea.





Si nos vamos a la ruta donde esta el bat, podemos ver que es el unico archivo que existe.

Procedemos a ejecutar la tarea y nos volvemos a fijar en la ruta del archivo bat.

Y efectivamente, nuestro archivo bat genero un archivo txt, que si lo revisamos contiene el listado de este mismo directorio

Nuestra tarea programada ya fue probada y si funciona.

Saludos.

Espero sus comentarios. Cualquier duda o aclaracion seran contestadas.

Leer post completo...

martes, 21 de julio de 2009

Whatever My Love by Austin Butler


Ahora les colo la letra de un soundtrack que presentaron en la serie televisiva icarly y que me gusto (version en ingles) la cancion la pueden escuchar en este link de youtube y la letra esta acontinucación. Disfrutenla:

Whatever My Love by Austin Butler:

You're so beautiful
I need the world to see
You're my mirical
Just take the time that you need
to breath
And nevermind the things I've done
You make me feel like I'm the rising sun
You've fade me in my line
And show me its alright and
I know that you're the one
And you'll always be the one
And you'll always be
You'll always be the one
And you'll always be
And you'll always be the one

Leer post completo...

jueves, 9 de julio de 2009

Descargas


Aqui se colocaran los diagramas y algunos codigos que se explican en los post, con sus respectivos enlaces. Si alguno se encuentra roto, favor de decirmelo para checar el enlace, Gracias!. Espero les sea de uilidad.

NOTA: Los codigos Assembler RISC (Ensamblador RISC) esta compilados en el software MPLab. El cual lo pueden descargar de la pagina www.microchip.com, El simulador que ocupo es el famosisimo Proteus y lo pueden descargar de este blog: http://controlpublix.blogspot.com. Estos enlaces son externos a este blog.

Operaciones Lógicas

Ejemplo: AND
Ejemplo: COMF




Leer post completo...

domingo, 28 de junio de 2009

Operaciones Lógicas


Assembler permite las siguientes instrucciones lógicas:
  • AND
  • OR
  • XOR
  • NOT, Negación o Complemento

Sus respectivas instrucciones en lenguaje ensamblador son:

  • ANDWF, para el and
  • IORWF, para el or
  • XORWF, Para el xor
  • COMF, Para el Not


Estas istrucciones reciben uno o dos argumentos (origen, destino), de los cuales solo uno es obligatorio de especificar (origen). Si no se le otorga un destino, lo guarda por defecto en el registro origen.

Ejemplo: hacemos un AND de dos variables (var1 y var2) y lo guardamos en otra variable (var3)


movfw var1 ;Carga en W el contenido de var1
andwf var2,w ;Hace un AND entre el contenido de W y var2
movwf var3 ;el resultado lo guarda en var3


Utilizando el ejemplo Anterior, suponiendo que var1 tiene el valor binario '00001111' y var2 tiene el valor binario '11001110', en resultado seria '00001110'.
El resultado puede verse en este Diagrama de Proteus.



Ejemplo 2: Hacemos un AND entre dos variables (var1 y var2) y queremos que el resultado se quede en una de las variables anteriores, para tener menos variables y menos consumo de recurso. En este ejemplo se puede guardar el resultado tanto en la primera variable como en la segunda.
A continuacion se guardara en la primera variable.


movfw var2 ;Carga en W el contenido de var2
andwf var1 ;AND (w y var1) y guarda el resultado en var1

Ahora se guardara en la segunda variable.


movfw var1 ;Carga en W el contenido de var1
andwf var2 ;AND (w y var2) y guarda el resultado en var2


Ejemplo 3: Hacemos un AND entre 1 variable (var1) y una literal (valor dado x el usuario) y guardamos el resultado en la variable (var1). En este caso se hace uso de una sola variable (var1).


movlw b'01100111' ;Carga en W la literal
andwf var1 ;Hace un AND y guarda el resultado en var1


LAS TRES PRIMERAS INSTRUCCIONES (ANDWF, IORWF, XORWF) FUNCIONAN DE LA MISMA FORMA (COMO EXPLIQUE ARRIBA). ACONTINUACION SE EXPLICA LA INSTRUCCION COMF

La instrucción COMF lo que hace es invertir los bits. Esto es colocar 1 en donde habia 0 y viceversa. Esto no quiere decir que sea una resta, no lo vallan a confundir. Por ejemplo. Si varl tiene el valor decimal 30 (en binario '00011110'), su complemento sera en decimal 225 (en binario '11100001'). La explicacion es la siguiente, su complemento es basado en la cantidad de bits que tiene el registro, el cual es de 8 bits (255 en decimal), su suman bien la cantidad 30 mas la cantidad 225 le da de resultado 255, asi como si hacen un or entre las cantidades binarias '00011110' y '11100001' les da re resultado la cantidad binaria '11111111' lo que es igual a 255 en decimal.

Ejemplo: Sacar el complemento de una variable (var1) y guardalo en una segunda variable (var2)


comf var1,w ;Saca el complemento de var1
movwf var2 ;El resultado es guardado en var2


Aqui dos diagramas que muestran el funcionamiento de la instruccion COMF, la primera muestra solo la variable y la segunda muestra el complemento de la variable.


Muestra el contenido de var1


Muestra el complemento de var1.

Ver Zona de Descargas



Leer post completo...

viernes, 26 de junio de 2009

Instrucciones BTFSS y BTFSC de Ensamblador RISC


La instrucción BTFSS y la instrucción BTFSC son cada una como una simple instrucción de comparación, como lo es un IF en otros lenguajes de programación, a excepción de que los if pueden contener varias instrucciones como en el siguite código de Java:


if (variable=='condición')
{
   instrucción1;
   instrucción2;
   instrucción3;
}
else
{
   instrucción4;
   instrucción5;
   instrucción6;
}


  • La instrucción BTFSS de Assembler RISC verifica que el bit del puerto o variable especificado se encuentre en 1 lógico (alrededor de los 5v), si la respuesta es cierta entonces se salta la siguiente instrucción, mientras que si no lo es, realiza la sig instrucción. Como se muestra en el ejemplo:



 BTFSS PORTA,0 ;"Bit 0" del puerto A esta en 1 lógico (5volts)?
   goto noestaen1 ;No, (esta en 0volts).
   goto siestaen1 ;Si, (esta en 5volts).


  • Por otra parte la instrucción BTFSC de Assembler RISC verifica que el bit tenga un 0 lógico, y de igualmanera, si es cierto, se salta la instrucción siguiente, y si es falsa entonces hace la siguiente.



 BTFSC PORTA,0 ;"Bit 0" del puerto A esta en 0 lógico (0volts)?
   goto noestaen0 ;No, (esta en 5volts).
   goto siestaen0 ;Si, (esta en 0volts).


En resumen uno se encarga de verificar si hay 1 lógico (BTFSS) y el otro verifica si hay un 0 lógico (BTFSC).

NOTA: goto es una instrucción que hace un salto a la etiqueta especificada.

Leer post completo...

jueves, 12 de julio de 2007

Buscan software, musica, etc.

Pues ya no busquen mas, en ba-k existe software, musica, tuoriales, comics, noticias, entretenimiento, etc.

Es una pagina bien hecha, tambien puedes registrarse en los foros donde pueden encotrar muchas mas cosas.

Leer post completo...

martes, 10 de julio de 2007

CONTACTO, DUDAS Y ACLARACIONES.

Aqui pueden preguntar por todas sus dudas y contactarme, solo dejen su dirección de correo electronico. o en su defecto pasen a revisar su respuesta aqui en este mismo post. Tratare de revisar el blog diario para responder lo mas pronto posible a sus dudas. De antemano Muchas Gracias por visitar este su blog.



Leer post completo...