sábado, 29 de octubre de 2011

Crear una Consulta de Resumen de Ventas en Asp.Net

Ahora presentamos este pequeño video donde creamos una Consulta para listar el Resumen de Ventas según Pedidos por Fechas, todo esto es en un Sitio Web de Asp.Net.
Espero en las próximas entregas el audio no me haga una mala pasada.


Hasta luego.

Crear una Vista en SQL Server 2005

En esta oportunidad en un pequeño video mostramos como crear una Vista en SQL Server 2005, parte importante cuando estamos generando consultas e informes que serán aprovechados en el motor de Base de Datos y Visual Studio.



Hasta pronto.

jueves, 27 de octubre de 2011

Reproductor de Video en Sitio ASP.NET

Cuando se logra  insertar un reproductor de video de Windows Media Player en una página web desarrollado en ASP.NET es darle un plus a nuestro sitio entonces nuestros visitantes lograrán visualizar contenido multimedia que como ya es obvio lo hace muy interesante.
Pero realizar este trabajido a veces también se torna fastidioso cuando no sale como uno lo piensa, entonces que mejor que dejarlos un pequeño aporte.

miércoles, 26 de octubre de 2011

PC nueva, cual y porque

Un PC emsamblada
Mainboard integrada
Muchos de los que estamos inmersos en la tecnología y más aún cuando vemos casos particulares de usuarios finales y lo digo esto por experiencia propia que muchas veces te consultan después de comprar la PC soñada, más porqué no quería estar en desventaja tecnológica con el vecino, el compañero de aula, el compañero de trabajo, etc. y te cuentan con algarabía mira que tiene un Procesador Intel I3, memoria Ram Kingston 4 gb, HD Seagate 500 gb, mainboard Intel integrada s/v/r, DVD rw LG, y para completar el vendedor muy buena gente lo entregó instalado Sistema Operativo, Office 2010 y algunas cosas más.

Bien, y porqué detallo esas características de PC que por lo general compran los usuarios en casa, puede influir muchos otros factores al ya expuesto al inicio y que dista mucho del real uso que tendrá ese equipo.

Memoria RAM
Cuando compramos un equipo compatible ensamblado debemos de tener bien claro la compatiblidad establecida por los fabricantes de las partes, siendo responsables debemos contrastar las especificaciones del fabricante y estar seguro que no tendrá problemas en la instalación del sistema y también en el futuro.
Disco Duro
Cuando elegimos agregar 4 gb ó más de Ram debemos tener claro que si instalamos un Sistema Operativo de 32 bits standar no estaremos usando el total de memoria física instalada en estos casos ya es necesario un Sistema Operativo Enterprise o en su defecto uno de 64 bits y lo más importante las licencias del software a instalarse.
Como todo lo que se hace en el día a día es bueno planificar primero el uso cotidiano te daremos al equipo ha adquirir, por ejemplo si se utilizará para trabajar con programas de diseño entonces no es bueno que el video sea integrado por citar alguna desventaja que se presentaría en lo sucesivo.

En conclusión primero preguntar y luego comprar.

PD: Las marcas mencionadas corresponden a sus respectivos propietarios en sus paises de origen.

Hasta pronto.

lunes, 24 de octubre de 2011

Actualizar datos desde un DataGridView

En esta entrega trataré de manera simple una forma de actualizar datos de una tabla en una Base de Datos SQL Server 2005, es que muchas veces resulta tedioso tener que realizar estos pasos cuando solamente se trata de cambiar los datos de ciertas columnas desde un DataGridView.
El ejemplo se plantea de la siguiente manera:
Creamos un proyecto nuevo,  con un formulario Prueba puede asignarle el nombre que mejor le parece al ejemplo y añadiremos los controles siguientes:

- Una etiqueta: lblTitulo
- Una caja de texto : TxtPedido
- Un botón: btnMostrar
- Un DataGridView: DataGridView1
- 4 botones: btnInicio, btnAnterior, btnSiguiente, btnFinal
- Un botón: btnGuardar
- Un botón: btnSalir

El formulario debería quedar como la imágen de muestra.

En el formulario pedimos la entrada del Número de Pedido a consultar y modificar, si no existe le mostrará un mensaje de advertencia, si el Pedido existe en la tabla PedidosDetalles entonces llenará el DataGridView para su modificación de la columna que desee a excepción de las columnas que son llaves, han como requisito para este tipo de UPDATE es que la tabla debe tener una llave primaria, hechos los cambios Click en el botón guardar y listo.

Lo demás es programar un poco pero que es bastante didáctico y que con pequeñas modificaciones pueden adaptarlo a sus requerimientos.

A continuación el código completo, espero sea de utilidad.

Hasta pronto.

Option Explicit On
Option Strict On
' '''''''''''''''''''''''''''''''''''''''''  
Imports System.Data.SqlClient

Public Class Prueba
    Private WithEvents bs As New BindingSource
    Private SqlDataAdapter As SqlDataAdapter
    ' conexión  
    Private Const cs As String = "Data Source=.\sqlexpress;" & _
                                     "Initial Catalog=database;" & _
                                     "Integrated Security=true"
    ' flag para activar la edición en el DGV  
    Private bEdit As Boolean
    ' También actualiza al cerrar el formulario
    Private Sub Prueba_FormClosing(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.FormClosingEventArgs) _
        Handles Me.FormClosing
        If bEdit Then
            If (MsgBox( _
                    "Guardar cambios ?", _
                     MsgBoxStyle.YesNo, _
                    "guardar")) = MsgBoxResult.Yes Then
                Actualizar(False)
            End If
        End If
    End Sub

    Private Sub Prueba_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
        With DataGridView1
            .DataSource = bs
        End With
        TxtPedido.Text = ""
    End Sub

    Private Sub cargar_registros(ByVal sql As String, _
        ByVal dv As DataGridView)
        Try
            SqlDataAdapter = New SqlDataAdapter(sql, cs)
         Dim SqlCommandBuilder As New SqlCommandBuilder(SqlDataAdapter)
            ' carga el DataTable  
            Dim dt As New DataTable()
            SqlDataAdapter.Fill(dt)
            bs.DataSource = dt
            With dv
                .Refresh()
                .FirstDisplayedScrollingRowIndex = bs.Position
            End With
            bEdit = False
        Catch exSql As SqlException
            MsgBox(exSql.Message.ToString)
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try
    End Sub

    ' botón para guardar los cambios y llenar la grilla  
    Private Sub btnGuardar_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btn_update.Click
        Actualizar()
    End Sub

    Private Sub Actualizar(Optional ByVal bCargar As Boolean = True)
        If Not bs.DataSource Is Nothing Then
            Me.SqlDataAdapter.Update(CType(bs.DataSource, DataTable))
            If bCargar Then
cargar_registros("Select PedidoID,ProductoID,”_
“Cantidad,usuario,d_completa as Unidad”_
“From PedidosDetalles Where PedidoId=" & _ Me.TxtPedido.Text, DataGridView1)
            End If
        End If
    End Sub

    Private Sub btnInicio_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
Handles btnInicio.Click, btnAnterior.Click, _   btnSiguinte.Click, btnFinal.Click
        ' Botones de movimientos
        If sender Is btnAnterior Then
            bs.MovePrevious()
        ElseIf sender Is btnInicio Then
            bs.MoveFirst()
        ElseIf sender Is btnSiguiente Then
            bs.MoveNext()
        ElseIf sender Is btnFinal Then
            bs.MoveLast()
        End If
    End Sub

    Private Sub DataGridView1_CellEndEdit( _
        ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
            Handles DataGridView1.CellEndEdit
        bEdit = True
    End Sub

Private Sub btnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMostrar.Click
        Try
            If Me.TxtPedido.Text = "" Then
MsgBox("Debe ingresar un Número de Pedido...!",_ MsgBoxStyle.Critical, "Atención")
            Else
cargar_registros("Select PedidoID,ProductoID,_ Cantidad,usuario,fecha as Unidad From _ PedidosDetallesA Where PedidoId=" & _ Me.TxtPedido.Text, DataGridView1)
            End If
        Catch exSql As SqlException
            MsgBox(exSql.Message.ToString)
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try
    End Sub

    Private Sub btnSalir_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSalir.Click
        Me.Close()
    End Sub
End Class


domingo, 23 de octubre de 2011

La Seguridad elemental en una PC

Lo que sucede cuando se instala el Sistema Operativo de Microsoft a sugerencia o no del sistema siempre se crea el primer usuario de la PC que será la del Administrador local, por lo general esto sucede en los usuarios de casa donde no se toma mucho en cuenta la seguridad del equipo y por ende la información que allí se almacenará, muchos técnicos que realizan esta tarea dejan a los usuarios interactuar con la cuenta del administrador con todos los derechos sobre el equipo. Esto significa un serio riesgo para la seguridad de la información y por su puesto del buen funcionamiento del propio sistema operativo. Hoy en día internet así como es el mejor de los medios para conseguir buena información también existe información dañina tanto para los usuarios y obviamente puede ser fatal para el funcionamiento de tú PC.

Una de las tareas principales despues de instalar el equipo es crear una o varias CUENTAS con derechos limitados para el uso cotidiano de la PC, si están trabajando en una red la figura cambia desde el punto de vista de la administración de red ya que será el responsable que creará las cuentas en un Equipo Servidor ó un Dominio con Active Directory. La cuenta de administrador solamente se debe de usar para instalar otros programas o tareas administrativas del entorno de la PC.

La razón es que cuando el usuario se encuentra con derecho de administrador cualquier amenaza que llegue tanto de internet o por otros medios llámese infecciones por copias o lecturas de programas, documentos que introduzca desde diskettes, CDs o USB se instalarán de inmediato, y ni el mejor de los antivirus podrá detener la infección del equipo.
En la imagen de muestra se nota los derechos de los usuarios creados en un Windows 7 Profesional, también como sugerencia activar la cuenta Invitado para el uso de clientes ocasionales.
Un consejo que puede aliviarle el estrés de perder información o tener que formatear su equipo porqué los daños ya son irreversibles.
Un abrazo.

sábado, 22 de octubre de 2011

El primero: Transact SQL


Mi primera vez, perdón primera entrega tecnológica está enfocado en la programación y un pequeño código aparentemente muy simple para un programador experimentado en código Transact SQL pero que resulta todo un quebradero de cabeza para un novato, los que no están familiarizados con la programación en Base de datos o tienes esos días nublados que dan ganas de salir corriendo de la office.
Muchos foros quizás intentan ayudar pero quizá involuntariamente lo dejan a medias ó con la intención de que el usuario investigue para completar lo que busca pero cuando la emergencia apremia tanto en el trabajo bajo presión ó tienes que completar un trabajo de estudio entonces es necesario que tengas la solución completa y que mejor es que obviamente después de esto tengas las gracias virtuales al menos.
Vamos al grano, resulta que en un Sistema de inventarios de acuerdo a una estructura tradicional ó estándar tenemos definido las Tablas de la siguiente manera:
- Productos
- Compras (Compras, ComprasDetalles)
- Pedidos (Pedidos, PedidosDetalles)
- Etc.
Resulta que necesitamos actualizar nuestros saldos del Maestro de Productos en función de los detalles de Pedidos por Código de Producto así que tenemos el siguiente código:

UPDATE Productos
SET Productos.StkActual =
(SELECT SUM(det.Cantidad)
FROM PedidosDetalles AS det
WHERE Productos.ProductoID=det.ProductoID
GROUP BY det.ProductoID)

A simple vista dirías YES, tengo la solución, lo ejecutas en tú DB, pero después de finalizado el proceso la desilusión sería demasiado que buscarías saltar por la ventana.

Explicación:
Resulta que si un Producto X tiene movimientos en PedidosDetalles entonces genial el proceso se cumple porqué acumula todas las Cantidades del Producto X y los reemplaza, suma ó resta según tú criterio en Productos, pero si no tiene movimientos entonces devuelve un valor NULL y reemplazará tú Stock con este valor y a llorar a la playa.

Para eso es necesario validad UPDATE con WHERE, el código completo y seguro es este:

UPDATE Productos
SET Productos.StkActual =
(SELECT SUM(det.Cantidad)
FROM PedidosDetalles AS det
WHERE Productos.ProductoID=det.ProductoID
GROUP BY det.ProductoID)
WHERE
(SELECT SUM(det.Cantidad)
FROM PedidosDetalles AS det
WHERE Productos.ProductoID=det.ProductoID
GROUP BY det.ProductoID) IS NOT NULL

Ojo con la última parte del código con Where lo que hacemos es validar el resultado de la consulta SELECT para que solo actualice los valor diferentes a nulo.

Espero sea de utilidad.

Tecnología pura ...

Bienvenidos... en este sitio encontrarán información de utilidad desde todos los ámbitos de la tecnología, estamos preparándonos para empezar con mucha fuerza.
Hasta prontito.
JSH