septiembre 12, 2008

Hotkeys en un DataGridView

En un formulario Windows agregar un DataGridView cargarlo con datos para implementar la funcionalidad de teclas calientes, por ejemplo al Ctrl+F aplica un calculo al Ctrl+R refresca la rejilla, etc.

1. Agregar métodos que responden a la combinación de teclas

Private Sub ctrl_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Dim ctrl As Control = DirectCast(sender, Control)
End Sub

Private Sub InitializeEvents()
'AddHandler Me.DataGridView1.KeyPress, AddressOf txt_KeyPress
'AddHandler Me.DataGridView1.KeyDown, AddressOf txt_KeyDown
AddHandler Me.DataGridView1.KeyUp, AddressOf ctrl_KeyUp
End Sub

2. Funcionalidad a ejecutar al detectar la combinación de teclas sobre un renglon de la rejilla al evento KeyUp

Private Sub DataGridView1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyUp
Select Case e.KeyData
Case e.KeyCode.Control + e.KeyCode.F 'Aplica Calcluo
MessageBox.Show("Ejecutar AplicaCaluloX())
Case e.KeyCode.Control + e.KeyCode.R 'Refrescar contenido-Databinding-
MessageBox.Show("Ejecutar RefrescarRejilla()")

End Select
End Sub

Leer entrada de app.config VS.NET 2005

1. Agregar archivo app.config




2--Leer de app.config
Configuration.ConfigurationManager.AppSettings.Item("AplicarFactorDiseñoPaq").ToString.Length

septiembre 11, 2008

Referencia de Uso de la herramienta: JetBrains DotTrace con ADO.NET

Esta herramienta ayuda a medir es el tiempo que se toma cada una estas operaciones para mostrar los datos. Esta herramienta te permite mediante la técnica de "code profiling" conocer el tiempo y cantidad de veces de cada una de las llamadas a los métodos de tu aplicación, incluido el código de .NET.

En este pagina se describe el uso de esta interesante herramienta, yo la utilice porque al poblar un GridView de asp.net con un sqldatareader se tardaba muchisimo al solicitar unos 20,000 registros y con esta herramienta encntré en donde se hacia el cuello de botella.

http://msmvps.com/blogs/cwalzer/archive/2007/09/24/anti-pr-225-cticas-i-acceso-a-datos-con-ado-net.aspx

La referencia es parte de un conjunto de articulos muy interesantes relacionados con la utilización de la herramienta con uso de objetos ADO.NET

Performance: Lectura de Datos con ADO.NET
Performance: Lectura de Datos con ADO.NET II
Performance: Lectura de Datos con ADO.NET III
Performance: Datos en Memoria con ADO.NET IV

Store Procedure devuelve Información de Tablas de BD en SQL Server

create procedure dbo.p_sizetablesas
Begin transaction
/***Procedimiento creado por KM para ver el tamaño de las tablas de una base de datos*/
SET NOCOUNT ON
declare @nombre_tabla varchar(100)
declare @propietario varchar(40)
declare @uid int
declare @nombre_completo varchar(150)
declare @nombre_db varchar(256)

create table #resultados
(nombre varchar(50), filas decimal(12,0), reservado varchar(40),
data varchar(40), tamaño_indice varchar(20),
no_usado varchar(20))

declare tablas cursor
for select a.uid , propietario = left( b.name,40), tabla = a.name
from sysobjects a, sysusers b
where type = 'U' and a.uid = b.uid order by tabla

select @nombre_db = db_name()

OPEN tablas
FETCH NEXT FROM tablas
into @uid, @propietario, @nombre_tabla
WHILE @@FETCH_STATUS = 0
BEGIN
if @uid = 1
begin
insert #resultados
exec sp_spaceused @nombre_tabla
end
else
begin
SET @nombre_completo = rtrim(ltrim(@nombre_db))+'.' + ltrim(rtrim(@propietario)) +'.'+ @nombre_tabla
insert #resultados
exec sp_spaceused @nombre_completo
end
FETCH NEXT FROM tablas INTO @uid, @propietario, @nombre_tabla
END

CLOSE tablas
DEALLOCATE tablas

select * from #resultadosorder by filas desc
Commit Transaction
go

--ejecutarlo en query analizer
exec p_sizetables

Referencia
http://www.lawebdelprogramador.com/codigo/codigo.php?idp=794&id=89&texto=SQL

Query a cadena XML


Crear:
1. El esqueleto de la tabla para poder hacer el select
2. El store procedure que hace el query de la cadeana XML basado en el esqueleto de la tabla
3. Ejecutar el Store Procedure con la cadena XML (probar en el query analizer)

1--La Tabla -Esqueleto

CREATE TABLE [dbo].[SKUsCARGA] ( [CveProducto] [varchar] (20) NOT NULL , [DescProductoTerrSub] [varchar] (150) NOT NULL , [Territorio] [varchar] (20) NOT NULL , [SubTerritorio] [varchar] (20) NOT NULL , [Tecnica] [varchar] (50) NOT NULL , [Precio] [varchar] (10) NOT NULL , [Tamanio] [varchar] (50) NOT NULL , [Pocision] [varchar] (50) NOT NULL , [Apoyo] [varchar] (50) NOT NULL , [FechaAlta] [datetime] NOT NULL , [UsrAlta] [varchar] (20) NOT NULL )

--2. El Store Procedure

CREATE PROCEDURE dbo.PruebaXML
@xmlCargaSKUs text
as
Declare @idoc int
--Ejecutar el sp que carga en memoria el docuemnto XML.
EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlCargaSKUs
--El Query al docto XML
SELECT CveProducto, Territorio, SubTerritorio, Tecnica, Precio, Tamanio, Pocision, Apoyo
FROM OPENXML (@idoc, '/SKUsCARGA/SKU')
WITH SKUsCARGA
--Descargar documento XML de la memoria.
EXEC sp_xml_removedocument @idoc
GO

--3. La ejecucion del store procedure con el paso de la cadena XML






agosto 10, 2008

Requerimiento implementacion Gestión de Facturas

Implantación de la Base de Datos (Back-End)

-Deberá ser con el manejador de base de datos Access o SQL Server 2000
-Deberá diseñar una base de datos bajo los conceptos de normalización y su respectiva integración referencial de la información.
-Deberá modelar la entidad Cliente, Empleado, Producto y Factura. Para cada entidad definirás los atributos básicos para poder operar la factura.
-Si decide utilizar SQL Server 2K puedes usar Store Procedures o Vistas en la implantación o cadenas SQL en el Front-End

Implementación de la GUI (Front-End)

-Deberá ser utilizando Visual Basic NET 2005 o 2008 con el lenguaje Visual Basic .NET
-El tipo de aplicación puede ser ASP.NET -Web- o aplicación de escritorio
-Puedes hacerlo en capas, con objetos, etc. como tú desees.
-Sólo deberá implementar la interfaz GUI para la factura.

¿Qué debe permitir la aplicación para trabajar con las facturas?
- El sistema deberá permitir al usuario gestionar facturas: dar de alta, eliminar y hacer modificaciones a facturas existentes.
- El sistema deberá permitir seleccionar de una fuente de datos los productos -su descripción- que la empresa tiene a disposición para su venta y que se exponen en la factura (la factura deberá permitir contener de 1 a N productos sin repetir).
- El sistema deberá permitir seleccionar de una fuente de datos los clientes -su nombre o denominación social- registrados a los que se expide una factura.
- El sistema deberá permitir modificar los productos incluidos en la factura; es decir cambiar la cantidad o el producto.
- El sistema deberá calcular automáticamente el importe de cada producto de acuerdo a la cantidad solicitada, el subtotal, importe de IVA -manejarlo al 15%- y gran total.


Entrega de Fuentes :

- El archivo de la base de datos de Access o el archivo de respaldo de la Base de datos si decidiste implementar con SQL Server 2K.

- El proyecto de Visual Basic NET 2005 con el código fuente de la operación de la factura.

Aspectos principales a evaluar:

- Con respecto a la base datos el modelo Entidad-Relación implementado
- Con respecto a la GUI de la gestión de la factura, facilidad de uso al usuario, forma de interactuar con la base de datos.

Formato separador miles a número en SQL Server

DECLARE @val float
SET @val = '12456.00'
SELECT CONVERT(varchar(50), CONVERT(money, @val), 1)

--Salida
12,456.00

febrero 14, 2008

Uso de pwdencrypt y pwdcompare en SQL Server 2K

Estás dos funciones en SQL Server permiten cifrar y descifrar valores y que son muy últiles para guardar información no legible en la base de datos.

Ejemplo de uso:

--Devuelve la cadena cifrada.
select pwdencrypt('abcde')
--el resultado es: 0x0100841F6D61428B6A7C1E497428DA4F77201E9C15CE03B39414324ADFC9BEDF7C73FCEC7120D2AEEEACA1732737
--Este valor es el que almacenamos en nuestra tabla, por ejemplo un numero de cuenta o una contraseña, de esta manera si alguien ingresa a esta tabla no sabrá a que valor pertenece.

--Ahora comparamos el texto en claro con lo que se almacena en la BD, regresa 1 si son iguales, sino cero.

select pwdcompare('abcde',0x0100841F6D61428B6A7C1E497428DA4F77201E9C15CE03B39414324ADFC9BEDF7C73FCEC7120D2AEEEACA1732737)

Ahora veremos un store procedure en donde recibe el texto en claro -un password- y lo compara
con el que esta en la BD cifrado.

CREATE PROCEDURE dbo.spu_SelectUsr
@Usuario varchar(15),
@Passwd varchar(15)
AS

Set nocount on;

Declare @ExisteCta bit
set @ExisteCta = 0

SELECT @ExisteCta = 1
FROM USUARIO
WHERE (Usuario = @Usuario) AND (pwdcompare(@Passwd, PasswdCifrado)=1)
if @ExisteCta = 0
begin
Raiserror 13000 'No existe la cuenta de acceso proporcionada.'
Return
end
Go

Link otros ejemplos
http://msmvps.com/blogs/gladchenko/archive/2005/04/06/41083.aspx

Control para graficar en asp.net

Recientemente tuve la necesidad de graficar unos datos en el web, y mi sorpresa fue que visual studio net 2005 no incluye un control para ello, mi otra opción era sacarlo con Crystal Reports o un control y encontré este gratuito que me parecio muy bueno y además free.

http://www.carlosag.net/Tools/WebChart/Default.aspx

La guía de uso rápido o tutorial:
http://www.carlosag.net/Articles/WebChartTutorial.aspx

Herramientas gratis para SQL Server

Excelente link en donde podrán encontrar útiles herramientas para SQL Server 2k-2005

http://weblogs.sqlteam.com/mladenp/archive/2007/11/20/Free-SQL-Server-tools-that-might-make-your-life-a.aspx