Mostrando entradas con la etiqueta windows. Mostrar todas las entradas
Mostrando entradas con la etiqueta windows. Mostrar todas las entradas

viernes, 20 de septiembre de 2013

Programa de Facturacion V.6

Bueno ya lo termine espero que les guste, lo subo aquí al principio.
Es un archivo .Rar, lo descomprimes y hay un ejecutable denominado Facturacion_6v.exe.
Instalara todo lo nesesario para su funcionamiento.

Como mejora, está el guardar la factura en formato .xlsm y poderse modificar.
He mejorado el inventario, se puede llevar un control de Stock.
Control de Entradas, Salidas.
Se puede llevar la contabilidad, buscar por periodos la contabilidad.

Cualquier duda o futura mejora, aquí estoy.

En breve hare un pequeño tutorial.
Las primeras versiones eran muy simples, creo que no hacia falta muchas explicaciones.Me comento una Amiga que lo usa en el trabajo, que cuando habian muchos clientes al agregar mas clientes iba muy lento, SOLUCIONADO.

Descarga el Archivo Aqui:

domingo, 9 de junio de 2013

[SQL-2008] Buscar texto en definiciones de Objetos MS SQL Server.

Saludos amigos en esta ocasión les dejo un ejemplo de como poder buscar “Cadenas de Texto” en la definición de nuestros Procedimientos almacenados.
En este ejemplo vamos a buscar la palabra ‘HumanResources’ en los procedimientos almacenados de la base de datos ‘AdventureWorks2008’.
Necesitamos ejecutar el siguiente script con la cadena de texto que se va a buscar.
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%HumanResources%'
GO
Si se encontraron resultados, a continuación se mostrara un listado con los nombres de los procedimientos almacenados que contienen nuestra palabra.
Bien amigos, para comprobar el resultado elegiremos uno de los procedimientos para ver su definición e identificar que contiene la palabra que buscamos ‘HumanResources’.
USE AdventureWorks2008;
EXEC sp_HelpText 'uspGetManagerEmployees'
Como pueden ver el resultado es sobre un Procedimiento almacenado de los de la lista que contienen la palabra a buscar, las palabras encerradas en color morado son las que coinciden con nuestra búsqueda, de esta manera podemos buscar lo que deseemos dentro de nuestros Stored Procedures y ver su definición rápidamente.
Bueno amigos, espero les sea de ayuda, espero sus comentarios y por favor voten por este blog.

Contar el número de filas de todas las tablas en SQL Server

Aqui hay otro script SQL que encontre por los foros que quisiera compartirles aqui: Como contar registros en todas las tablas. Al utilizarlo se vera de la siguiente forma (tome la bd AdventureWorks para esta captura)
A quien no le ha sucedido en mas de una vez que queremos saber cuales son las tablas con mas registros en relacion al numero de filas?
Se podria pensar en hacer la siguiente consulta: SELECT COUNT(*) from each user table, pero es muy ineficiente. Un mondo mejor para consultar las tablas es con el script de abajo:
SELECT
    sysobjects.Name
    , sysindexes.Rows
FROM
    sysobjects
    INNER JOIN sysindexes
    ON sysobjects.id = sysindexes.id
WHERE
    type = 'U'
    AND sysindexes.IndId < 2
ORDER BY
    sysobjects.Name

viernes, 7 de junio de 2013

Agregar un Trigger para auditar tu base de datos SQL Server

Aqui les dejo un ejemplo de como hacer un trigger que sirve para auditar tus bases de datos de SQL Server.
Navegando me encontre con una excelente solucion hecha por Jon Galloway, en la cual consiste en crear un solo script y que este se encarge de crear los triggers necesarios para cada tabla de la base de datos seleccionada, la diferencia con SQLTableHistory es que con nuestra herramienta podemos seleccionar las tablas que queremos que se le haga su respectiva auditoria y con la solucion presentada en este blog.
Aqui un ejemplo de como se verian los datos con la solucion de Jon Galloway

Con esta informacion podemos hacer reportes de una manera sencilla tales como:
  • Cuales tablas han sufridos cambios recientemente.
  • Cuales tablas no sufrieron cambios el pasado año.
  • Cuales tablas jamaz han sufrido cambios.
  • Mostrar todos los cambios a las tablas por un usuario y periodo especifico.
  • Mostrar las tablas mas activas en un determinado periodo.Con estas herramientas es posible volver al estado anterior de la tabla y volver en un punto especifico, claro esta ya depende de las nuevas extensiones que ustedes le hagan.Aqui os dejo el script completo que crea la tabla de auditoria y corre el script para crear los triggers a todas las tablas de la base de datos.
USE Northwind
GO
 
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME= 'Audit')
CREATE TABLE Audit
(
AuditID [int]IDENTITY(1,1) NOT NULL,
Type char(1),
TableName varchar(128),
PrimaryKeyField varchar(1000),
PrimaryKeyValue varchar(1000),
FieldName varchar(128),
OldValue varchar(1000),
NewValue varchar(1000),
UpdateDate datetime DEFAULT (GetDate()),
UserName varchar(128)
)
GO
 
DECLARE @sql varchar(8000), @TABLE_NAME sysname
SET NOCOUNT ON
 
SELECT @TABLE_NAME= MIN(TABLE_NAME)
FROM INFORMATION_SCHEMA.Tables
WHERE
TABLE_TYPE= 'BASE TABLE'
AND TABLE_NAME!= 'sysdiagrams'
AND TABLE_NAME!= 'Audit'
 
WHILE @TABLE_NAME IS NOT NULL
 BEGIN
EXEC('IF OBJECT_ID (''' + @TABLE_NAME+ '_ChangeTracking'', ''TR'') IS NOT NULL DROP TRIGGER ' + @TABLE_NAME+ '_ChangeTracking')
SELECT @sql =
'
create trigger ' + @TABLE_NAME+ '_ChangeTracking on ' + @TABLE_NAME+ ' for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(128) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql varchar(2000),
@UpdateDate varchar(21) ,
@UserName varchar(128) ,
@Type char(1) ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000)
 
select @TableName = ''' + @TABLE_NAME+ '''
 
-- date and user
select @UserName = system_user ,
@UpdateDate = convert(varchar(8), getdate(), 112) + '' '' + convert(varchar(12), getdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @Type = ''U''
else
select @Type = ''I''
else
select @Type = ''D''
 
-- get list of columns
select * into #ins from inserted
select * into #del from deleted
 
-- Get primary key columns for full outer join
select @PKCols = coalesce(@PKCols + '' and'', '' on'') + '' i.'' + c.COLUMN_NAME + '' = d.'' + c.COLUMN_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where pk.TABLE_NAME = @TableName
and CONSTRAINT_TYPE = ''PRIMARY KEY''
and c.TABLE_NAME = pk.TABLE_NAME
and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select @PKFieldSelect = coalesce(@PKFieldSelect+''+'','''') + '''''''' + COLUMN_NAME + ''''''''
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where pk.TABLE_NAME = @TableName
and CONSTRAINT_TYPE = ''PRIMARY KEY''
and c.TABLE_NAME = pk.TABLE_NAME
and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select @PKValueSelect = coalesce(@PKValueSelect+''+'','''') + ''convert(varchar(100), coalesce(i.'' + COLUMN_NAME + '',d.'' + COLUMN_NAME + ''))''
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where  pk.TABLE_NAME = @TableName  
and CONSTRAINT_TYPE = ''PRIMARY KEY''  
and c.TABLE_NAME = pk.TABLE_NAME  
and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
if @PKCols is null
begin
raiserror(''no PK on table %s'', 16, -1, @TableName)
return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
select @bit = (@field - 1 )% 8 + 1
select @bit = power(2,@bit - 1)
select @char = ((@field - 1) / 8) + 1
if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @Type in (''I'',''D'')
begin
select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
select @sql = ''insert Audit (Type, TableName, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, UpdateDate, UserName)''
select @sql = @sql + '' select '''''' + @Type + ''''''''
select @sql = @sql + '','''''' + @TableName + ''''''''
select @sql = @sql + '','' + @PKFieldSelect
select @sql = @sql + '','' + @PKValueSelect
select @sql = @sql + '','''''' + @fieldname + ''''''''
select @sql = @sql + '',convert(varchar(1000),d.'' + @fieldname + '')''
select @sql = @sql + '',convert(varchar(1000),i.'' + @fieldname + '')''
select @sql = @sql + '','''''' + @UpdateDate + ''''''''
select @sql = @sql + '','''''' + @UserName + ''''''''
select @sql = @sql + '' from #ins i full outer join #del d''
select @sql = @sql + @PKCols
select @sql = @sql + '' where i.'' + @fieldname + '' <> d.'' + @fieldname
select @sql = @sql + '' or (i.'' + @fieldname + '' is null and  d.'' + @fieldname + '' is not null)''
select @sql = @sql + '' or (i.'' + @fieldname + '' is not null and  d.'' + @fieldname + '' is null)''
exec (@sql)
end
end
'
SELECT @sql
EXEC(@sql)
SELECT @TABLE_NAME= MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_NAME> @TABLE_NAME
AND TABLE_TYPE= 'BASE TABLE'
AND TABLE_NAME!= 'sysdiagrams'
AND TABLE_NAME!= 'Audit'
END

domingo, 5 de mayo de 2013

Microsoft Office Professional Plus 2010 SP1 ESPAÑOL (Retail Edition) [Mediafire]

Descripción de Office 2010 SP1

Microsoft Office 2010 Service Pack 1 (SP1) proporciona las últimas actualizaciones para Office 2010. Este Service Pack incluye dos categorías principales de correcciones:
Correcciones no lanzadas previamente que se realizaron específicamente para este Service Pack. Además de las correcciones de productos generales, estas correcciones incluyen mejoras en estabilidad, rendimiento y seguridad.
Todas las actualizaciones públicas publicadas hasta junio de 2011 y todas las actualizaciones acumulativas publicadas hasta abril de 2011.

Word 2010
Transforme sus ideas en documentos de apariencia profesional.


Excel 2010
Obtenga ideas valiosas con eficaces herramientas de análisis.


PowerPoint 2010
Convierta sus ideas en presentaciones impactantes.


OneNote 2010
Reúna la información en un solo lugar fácil de encontrar.


Outlook 2010
Manténgase conectado con su mundo gracias a nuestras herramientas de correo electrónico y calendario más actualizadas.


Access 2010
Realice el seguimiento de información importante y cree informes con herramientas de bases de datos fáciles de usar.


Publisher 2010
Cree publicaciones y material de marketing de calidad profesional.
Microsoft Office Professional Plus 2010 SP1 (Retail Edition) Español 32-bit

Microsoft Office Professional Plus 2010 SP1 (Retail Edition) Español 64-bit

Tamaño : 1GB | 1.1 GB
Idioma : Completamente en Español
Activador
http://www.peejeshare.com/files/3620...acion.rar.html
Contraseña: www.portalnet.cl

Activación permanente + seriales para la instalación Incluidos.

jueves, 14 de marzo de 2013

Cambiarle el nombre a un archivo en Visual Basic.NET 2008


para este ejemplo agregamos 2 botones y en el boton examinar ponemos este codigo:
' presentar al usuario un cuadro de diálogo
        Dim openFile As New OpenFileDialog
        ' si elegimos algún archivo
        Dim result As DialogResult = openFile.ShowDialog()
        If result = DialogResult.OK Then
            TextBox1.Text = openFile.FileName
        End If
al pulsar el boton nos saldra este objeto:

Escribimos eln ombre del archivo en el textbox2 y al pulsar el boton Cambiar Nombre lo habra cambiado, para esto escribimos este codigo en el evento click del boton Cambiar Nombre
My.Computer.FileSystem.RenameFile(TextBox1.Text, TextBox2.Text)

Eliminar un directorio completo en Visual Basic .NET 2008

Este articulo nos permitira buscar un archivo y luego eliminarlo. para este articulo crearemos un proyecto y con los objetos que aparecen en la imagen. y usaremos la libreria System.IO.

Imports System.IO

Dentro del boton examinar definiremos un FolderBrowserDialog que nos permitira identificar la carpeta donde se encuentran los archivos en los cuales haremos la busqueda. agregaremos al Textbox (Textbox1) la ruta del directorio.


Dim Dir As New FolderBrowserDialog
        If Dir.ShowDialog = Windows.Forms.DialogResult.OK Then
            TextBox1.Text = Dir.SelectedPath
        End If
Ahora que tenemos la ruta del archivo en nuestro textbox este sera el codigo en el boton eliminar:
Try
            Dim midirectorio As String = TextBox1.Text

            My.Computer.FileSystem.DeleteDirectory(midirectorio, FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin, FileIO.UICancelOption.DoNothing)

        Catch ex As Exception
            MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
        End Try
al pulsar el boton eliminar nos saldra este mensaje

pulsamos el boton Si y listo se eliminara la carpeta con todo su contenido dentro. Espero este ejemplo les haya servido.

martes, 12 de marzo de 2013

C# Visual Basic .NET 2008:Eliminar fila desde un DatGridView al presionar Suprimir


En formularios donde se necesita agregar registros a un control DataGridView por ejemplo: al detalle de una factura, es típico que el usuario se equivoque e inserte un registro que no corresponde. Una solución puede ser que seleccione el registro y presione la tecla Suprimir para eliminar el registro. La manera de hacerlo es la siguiente:
Agregar este código en el evento KeyDown del DataGridView:
int XSaint = 0;
            if (e.KeyCode == Keys.Delete)
            {
                e.Handled = true;
                XSaint = ((DataGridView)sender).CurrentRow.Index;
                dataGridView1.Rows.RemoveAt(XSaint);
            }

sábado, 15 de diciembre de 2012

Validación con expresiones regulares en C#.NET

Las expresiones regulares son modelos que describen las combinaciones de caracteres en el texto. Se podrían definir como una serie de carácteres que forman un patrón, que representan a otro grupo de carácteres mayor, de tal forma que podemos comparar el patrón con otros conjuntos de carácteres para ver las coincidencias. Las expresiones regulares pueden utilizarse en múltiples lenguajes de programación pero en esta entrada vamos a ver un ejemplo de validación de formularios mediante Javascript y haciendo uso de expresiones regulares.
Un buen tutorial para iniciarse en el manejo de expresiones regulares lo podemos encontrar en Desarrolloweb. Para realizar el ejemplo siguiente no hay porque conocer en profundidad su manejo. A continuación muestro una serie de tablas a modo de chuleta para que podamos utilizarlas con un simple corta y pega.
La tabla siguiente contiene los caracteres especiales de las expresiones regulares.
Carácter Texto buscado
^ Principio de entrada o línea.
$ Fin de entrada o línea.
* El carácter anterior 0 o más veces.
+ El carácter anterior 1 o más veces.
? El carácter anterior una vez como máximo (es decir, indica que el carácter anterior es opcional).
. Cualquier carácter individual, salvo el de salto de línea.
x|y x o y.
{n} Exactamente n apariciones del carácter anterior.
{n,m} Como mínimo n y como máximo m apariciones del carácter anterior.
[abc] Cualquiera de los caracteres entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [a-f] es equivalente a [abcdef]).
[^abc] Cualquier carácter que no esté entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [^a-f] es equivalente a [^abcdef]).
\b Límite de palabra (como un espacio o un retorno de carro).
\B Cualquiera que no sea un límite de palabra.
\d Cualquier carácter de dígito. Equivalente a [0-9].
\D Cualquier carácter que no sea de dígito. Equivalente a [^0-9].
\f Salto de página.
\n Salto de línea.
\r Retorno de carro.
\s Cualquier carácter individual de espacio en blanco (espacios, tabulaciones, saltos de página o saltos de línea).
\S Cualquier carácter individual que no sea un espacio en blanco.
\t Tabulación.
\w Cualquier carácter alfanumérico, incluido el de subrayado. Equivalente a [A-Za-z0-9_].
\W Cualquier carácter que no sea alfanumérico. Equivalente a [^A-Za-z0-9_].
La tabla siguiente contiene algunos de los patrones más utilizados a la hora de validar formularios. Si alguien conoce alguna expresión regular más -que pueda ser útil en la validación de formularios- la puede poner en los comentarios y yo la incorporaré a esta tabla.
Cualquier letra en minuscula [a-z]
Entero ^(?:\+|-)?\d+$
Correo electrónico /[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/
URL ^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$
Contraseña segura (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$(Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales)
Fecha ^\d{1,2}\/\d{1,2}\/\d{2,4}$(Por ejemplo 01/01/2007)
Hora ^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$(Por ejemplo 10:45:23)
Número tarjeta de crédito ^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$
Número teléfono ^[0-9]{2,3}-? ?[0-9]{6,7}$
Código postal ^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$
Certificado Identificación Fiscal ^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$
Valida sólo números del 1 al 12 (ideal para meses) ^([0-1]?[0-2]|[0-9])$
Valida de 0.1 a 9.9 ^([0-9].[1-9])$
Valida desde 10.01 hasta 99.99 con 2 decimales máximo ^[0-9][0-9](.[0-9][0-9])$
Valida desde 0.01 hasta 99.99 con sólo 2 decimales máximo ^[0-9]?[0-9](.[0-9][0-9])$
Aquí les dejo el código:
private void txtcodigo_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_numero(txtcodigo))
            {
                errorProvider1.SetError(txtcodigo, String.Empty);
                txtcodigo.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtcodigo, "Solo numeros");
                txtcodigo.BackColor = Color.MistyRose;
            }
        }

        private void txtemail_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_email(txtemail))
            {
                errorProvider1.SetError(txtemail, String.Empty);
                txtemail.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtemail, "ejemplo@ejemplo.com");
                txtemail.BackColor = Color.MistyRose;
            }
        }


        private void txtnombre_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_cadena(txtnombre))
            {
                errorProvider1.SetError(txtnombre, String.Empty);
                txtnombre.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtnombre, "Solo letras");
                txtnombre.BackColor = Color.MistyRose;
            }
        }

        private void txttelf_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_telefono(txttelf))
            {
                errorProvider1.SetError(txttelf, String.Empty);
                txttelf.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txttelf, "Formato: 999-9999");
                txttelf.BackColor = Color.MistyRose;
            }
        }

        private void txtweb_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_url(txtweb))
            {
                errorProvider1.SetError(txtweb, String.Empty);
                txtweb.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtweb, "www.example.com");
                txtweb.BackColor = Color.MistyRose;
            }
        }

        private void txtsueldo_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_decimal(txtsueldo))
            {
                errorProvider1.SetError(txtsueldo, String.Empty);
                txtsueldo.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtsueldo, "Formato: 00,00");
                txtsueldo.BackColor = Color.MistyRose;
            }
        }

        private static bool es_numero(Control mitextbox)
        {

            Regex regex = new Regex(@"^[0-9]+$");
            return regex.IsMatch(mitextbox.Text);

        }

        private static bool es_cadena(Control mitextbox)
        {

            Regex regex = new Regex(@"^[^ ][a-zA-Z ]+[^ ]$");
            return regex.IsMatch(mitextbox.Text);

        }

        private static bool es_telefono(Control mitextbox)
        {

            Regex regex = new Regex(@"^([0-9]{3})[-. ]?([0-9]{4})$");
            return regex.IsMatch(mitextbox.Text);
            
        }

        private static bool es_decimal(Control mitextbox)
        {

            Regex regex = new Regex(@"^[0-9]{1,9}([\.\,][0-9]{1,3})?$");
            return regex.IsMatch(mitextbox.Text);
            
        }

        private static bool es_url(Control mitextbox)
        {

            Regex regex = new Regex(@"^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");
            return regex.IsMatch(mitextbox.Text);
        }

        private static bool es_email(Control mitextbox)
        {
            
            Regex regex = new Regex(@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$");

            // Resultado: 
            //       Valid: david.jones@proseware.com 
            //       Valid: d.j@server1.proseware.com 
            //       Valid: jones@ms1.proseware.com 
            //       Invalid: j.@server1.proseware.com 
            //       Invalid: j@proseware.com9 
            //       Valid: js#internal@proseware.com 
            //       Valid: j_9@[129.126.118.1] 
            //       Invalid: j..s@proseware.com 
            //       Invalid: js*@proseware.com 
            //       Invalid: js@proseware..com 
            //       Invalid: js@proseware.com9 
            //       Valid: j.s@server1.proseware.com

            return regex.IsMatch(mitextbox.Text);

        }
Este codigo va para el boton Nuevo
txtcodigo.Text = String.Empty;
            txtcodigo.BackColor = Color.White;
            errorProvider1.SetError(txtcodigo,String.Empty);

            txtnombre.Text = String.Empty;
            txtnombre.BackColor = Color.White;
            errorProvider1.SetError(txtnombre, String.Empty);

            txttelf.Text = String.Empty;
            txttelf.BackColor = Color.White;
            errorProvider1.SetError(txttelf, String.Empty);

            txtweb.Text = String.Empty;
            txtweb.BackColor = Color.White;
            errorProvider1.SetError(txtweb, String.Empty);

            txtemail.Text = String.Empty;
            txtemail.BackColor = Color.White;
            errorProvider1.SetError(txtemail, String.Empty);

            txtsueldo.Text = String.Empty;
            txtsueldo.BackColor = Color.White;
            errorProvider1.SetError(txtsueldo, String.Empty);
y este codigo va en el boton Grabar
if (es_numero(txtcodigo) == true && es_cadena(txtnombre) == true && es_telefono(txttelf) == true &&
                es_url(txtweb) == true && es_email(txtemail) == true && es_decimal(txtsueldo) == true)
            {
                MessageBox.Show("OK");
            }
            else
            {
                MessageBox.Show("Complete todos los campos.");
            }

Truco:Pasar Texto a Binario en Visual Basic.Net

Simple aplicación que convierte un texto a binario. Espero pronto cargar esta misma aplicación con la funcion de convertir binario a texto… Pero mientras, el fomulario quedaría así:
Su código es el siguiente y puedes descargar la aplicación desde AQUI
Private Sub btnaBinario_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaBinario.Click
        Dim Val As String = Nothing
        Dim Resultado As New System.Text.StringBuilder

        For Each Character As Byte In System.Text.ASCIIEncoding.ASCII.GetBytes(TextBox1.Text)
            Resultado.Append(Convert.ToString(Character, 2).PadLeft(8, "0"))
            Resultado.Append("")
        Next

        Val = Resultado.ToString.Substring(0, Resultado.ToString.Length - 1)
        TextBox2.Text = Val

    End Sub

Deshabilitar boton Cerrar en winforms en Visual Basic.NET


Aqui les dejo este codigo que encontre navegando por Internet, este codigo lo ponen debajo de Public Class:
Dim _enabledcerrar As Boolean = False
     _
    Public Property enabledcerrar() As Boolean
        Get
            Return _enabledcerrar
        End Get
        Set(ByVal value As Boolean)
            If _enabledcerrar <> value Then
                _enabledcerrar = value
            End If
        End Set
    End Property
    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            If _enabledcerrar = False Then
                Const CS_NOCLOSE As Integer = &H200
                cp.ClassStyle = cp.ClassStyle Or CS_NOCLOSE
            End If
            Return cp
        End Get
    End Property

sábado, 6 de octubre de 2012

Llenar combobox con campos concatenados de una base de datos en C#

En este ejemplo utilizare la Base de Datos Northwind y concatenare los campos Nombre de Contacto y Compañia en un combobox.
El codigo es el siguiente:

public void llenarProfesor()
        {
            string enlace="Data Source=XSaint;Database=Northwind;Integrated Security=SSPI";
            string conect;            
            //enlace con la base de datos
            SqlConnection conexion = new SqlConnection();
            conexion.ConnectionString = enlace;
            conect = conexion.ConnectionString;
            //se declara el DataSet
            DataSet ds3 = new DataSet();
            //se indica la consulta e sql donde se elige el ID_Profesor
            //y se concatenan los campos Nombre y Apellido_P
            //en una variable llamada Name_Full
            SqlDataAdapter da3 = new SqlDataAdapter("Select CustomerID,(ContactName + \' \' + CompanyName) as Name_Full FROM Customers", conect);
            //se especifica la tabla
            da3.Fill(ds3, "Customers");
            comboBox1.DataSource = ds3.Tables[0].DefaultView;
            //el valor real será el ID_Profesor
            comboBox1.ValueMember = "CustomerID";
            //lo que mostrará sera la variable Name_Full la cual tiene concatenados los campos Nombre y Apellido_P
            comboBox1.DisplayMember = "Name_Full";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            llenarProfesor();
        }

Como poner letra capital de todas las palabras de un string en C#

A menudo necesitamos capitalizar la primera letra de algunas palabras o algun texto(por ejemplo cuando queremos mostrar nombres completos de personas o ciudades, nombres, etcetera).
Como la clase string no tiene un metodo para hacer esto nosotros podemos pensar que no hay una solucion built-in en C# para este problema.
Bueno en realidad hay 2 formas de hacer esto:
Para este proyecto agregaremos 2 textbox y un boton:
Solucion 1
public static string Capitalize(string value)
        {
            return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = Capitalize(textBox1.Text);            
        }

public static string CapitalizeWords(string value)
        {
            if (value == null)
                throw new ArgumentNullException("value");
            if (value.Length == 0)
                return value;

            StringBuilder result = new StringBuilder(value);
            result[0] = char.ToUpper(result[0]);
            for (int i = 1; i < result.Length; ++i)
            {
                if (char.IsWhiteSpace(result[i - 1]))
                    result[i] = char.ToUpper(result[i]);
            }
            return result.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = CapitalizeWords(textBox1.Text);            
        }

Usando Regex matches para comprobar si un String es alphanumerico en C#

El metodo regex.match de C# es tipicamente usado para validar un string o para asegurar que un string esta conformado de un patron particular sin necesidad de manipularlo. Abajo utilizo un metodo de extension de strings que usa regex matches en C# para comprobar si el string es alphanumerico. Retornara verdadero si el string dado contiene solo numeros y letras del alfabeto.
using System.Text.RegularExpressions;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public static class CheckString
        {
            public static bool IsAlphanumeric(string source)
            {
                Regex pattern = new Regex("[^0-9a-zA-Z]");
                return !pattern.IsMatch(source);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string testString = textBox1.Text;

            if (CheckString.IsAlphanumeric(testString))
                textBox2.Text="Yes string is Alphanumeric!";
            else
                textBox2.Text="No string is not Alphanumeric!";

            
        }

viernes, 5 de octubre de 2012

Cambiar color de filas en un dataGridView con CheckBox en VB.NET

Ejemplo para alternar mediante la propiedad backcolor del objeto alternatingrowsdefaultcellstyle , el color de filas en un control datagridview
CONTROLES
  1. Un DataGridview ( DataGridView1 )
  2. un CheckBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With ListBox1.Items
            .Add("1")
            .Add("2")
            .Add("3")
            .Add("1")
            .Add("2")
            .Add("3")
            ListBox1.SelectedIndex = 0
        End With
        Button1.Text = "Eliminar duplicados "
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(Eliminar(ListBox1), MsgBoxStyle.Information, "Elementos duplicados en el List ")
    End Sub
    Function Eliminar(ByVal LB As ListBox) As Int32
        Dim i As Int32
        Dim j As Int32
        Dim n As Int32           ' Recorre los items ( compara empezando desde el primero , de abajo hacia arriba)         
        For i = 0 To LB.Items.Count - 2
            For j = LB.Items.Count - 1 To i + 1 Step -1                 ' ... si es el mismo                 
                If LB.Items(i).ToString = LB.Items(j).ToString Then
                    LB.Items.RemoveAt(j) ' elimina el elemento indicando el índice                     
                    n += 1 'lleva la cuenta de los duplicados                 
                End If
            Next
        Next
        Return n ' retorna los eliminados     End Function End Class 
    End Function

Eliminar duplicados de un listbox en VB.NET

Simple función en vb.net que recorre todos los elementos de la lista de un
combo o listbox para poder eliminar los elementos o items duplicados
El ejemplo comienza comparando desde el primer item con todos los demás
empezando desde abajo hacia arriba. Si el elemento es el mismo lo elimina con el
método RemoveAt del ListBox indicando el índice
Colocar en el formulario
  1. Un control ListBox llamado Listbox1
  2. Un control Button llamado Button1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With ListBox1.Items
            .Add("1")
            .Add("2")
            .Add("3")
            .Add("1")
            .Add("2")
            .Add("3")
            ListBox1.SelectedIndex = 0
        End With
        Button1.Text = "Eliminar duplicados "
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(Eliminar(ListBox1), MsgBoxStyle.Information, "Elementos duplicados en el List ")
    End Sub
    Function Eliminar(ByVal LB As ListBox) As Int32
        Dim i As Int32
        Dim j As Int32
        Dim n As Int32           ' Recorre los items ( compara empezando desde el primero , de abajo hacia arriba)         
        For i = 0 To LB.Items.Count - 2
            For j = LB.Items.Count - 1 To i + 1 Step -1                 ' ... si es el mismo                 
                If LB.Items(i).ToString = LB.Items(j).ToString Then
                    LB.Items.RemoveAt(j) ' elimina el elemento indicando el índice                     
                    n += 1 'lleva la cuenta de los duplicados                 
                End If
            Next
        Next
        Return n ' retorna los eliminados     End Function End Class 
    End Function

domingo, 30 de septiembre de 2012

Truco:Abrir una dirección URL o un Programa con C++

Para abrir enlaces a través de un programa en c++ , se debe utiliza la función ShellExecute de la API de Windows.
Una sencilla aplicación que pregunte al usuario si desea visitar mi nuevo blog sería:
#include <windows.h>
#include <iostream>

using namespace std;
int main()
{
int val = MessageBox(NULL,"Quieres Visitar mi nuevo Blog?","Ventantita",MB_YESNO);
cout<<"Valor Retornado: "<<val;

if(val==6)
 {
        ShellExecute(NULL, "open", "http://www.elnaufragodelared.com/",NULL, NULL, SW_SHOWNORMAL);

 }
return 0;
}
De igual manera si deseo Ejecutar un programa externo como el Emule sería así:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
        ShellExecute(NULL, "open", "C:/Archivos de programa/eMule/emule.exe",NULL, NULL, SW_SHOWNORMAL);
        return 0;
}

NOTA:
El ejemplo fue compilado utilizando el IDE , Codeblocks.

Uso de SET NOCOUNT en SQLServer

En SQLServer se usa SET NOCOUNT para devolver o no la cantidad de filas afectadas por alguna sentencia o transacción ejecutada. SET NOCOUNT tiene dos estados:
SET NOCOUNT ON : Inhabilita la cuenta del número de filas afectadas por una instrucción Transact-SQL
SET NOCOUNT OFF: Habilita la cuenta del número de filas afectadas por una instrucción Transact-SQL

Cuando se usa SET NOCOUNT ON se mejora el rendimiento del servidor porque omite la devolución del numero de filas afectadas al cliente o terminal que ha realizado la consulta, pero hay casos en que es necesario obtener el número de registros afectados segun nuestra necesidad, por ello se recomienda analizar muy bien cuando usar SET NOCOUNT ON.
El siguiente ejemplo hace una consulta a la tabla customers de la base de datos Northwind usando los dos estados de SET NOCOUNT, se puede apreciar la diferencia.
Usando SET NOCOUNT ON
SET NOCOUNT ON
 
select * from dbo.customers
where country = 'France'
GO

Usando SET NOCOUNT OFF


Usando delegados para intercambiar informacion entre ChildForms de un Parent Form en C#.NET

A menudo en aplicaciones MDI, necesitamos intercambiar informacion entre Child Forms que son instanciados por el mismo Parent Form. En tales casos, los delegados son un modo adecuado para intercambiar como.
En este programa tendremos un Form Padre y 2 Child Forms. Los forms hijos seran instanciados por el padre. El segundo form hijo va a interactuar con el primero a traves del Parent Form usando delegados. En este ejemplo mostraremos como usar delegados para realizar esta interaccion. Puedes utilizar las mismas tacticas para desarrollar otros tipos similares de procedimientos.
Lo que sea que el usuario escriba en el textbox del segundo formulario y luego de click en el boton Submit, ese texto sera mostrado en el label del primer formulario. Esta interaccion entre forms hijos es monitoreada y manejada por el form padre.
Para esto en el Form Padre colocamos 2 botones como la figura de arriba y cuando pulsemos el primer boton, instanciamos el primer form y el Parent Form creara un puntero a una funcion del formulario.
private void btnFirst_Click(object sender, EventArgs e)
        {
            frmFirstChild FrmFirst = new frmFirstChild();
            FrmFirst.MdiParent = this;
            FrmFirst.Show();
            FrmFirst.Activate();
            SayHello = FrmFirst.FuncDisplayMsg;
        }
Esto quiere decir, que el delegado SayHello del Parent Form mantiene un puntero al metodo del primer formulario. La declaracion del primer formulario es asi:
private delegate void DelSayHello(string Msg);
        private DelSayHello SayHello;
Y el metodo que sera llamado es(este metodo estara dentro del Primer Form):
public void FuncDisplayMsg(string Msg)
        {
            this.lblMsg.Text = Msg;
        }
Ahora el Form padre llamara a este metodo del primer Form Child cuando un metodo del segundo Child Form pase un valor al padre. Para hacer esto, el Parent Form tiene un metodo que sera llamado del segundo Child Form(via delegados). El metodo es:
private void InvokeFunc(string Msg)
        {
            if (SayHello != null)
                SayHello.Invoke(Msg);
        }
Ahora que pasara cuando el segundo Child Form sea instanciado?. El segundo Child Form tiene un delegado que tiene un puntero del metodo mencionado arriba. El codigo del evento click sera asi:
private void btnSecond_Click(object sender, EventArgs e)
        {
            frmSecondChild FrmSecond = new frmSecondChild();
            FrmSecond.MdiParent = this;
            FrmSecond.InvokeDel = this.InvokeFunc;
            FrmSecond.Show();
            FrmSecond.Activate();
        }
Y finalmente, cuando el usuario clickee en el boton Submit del segundo Child Form, el texto del textbox es pasado al Parent Form, el cual a cambio pasa el valor al primer Child Form y el texto es mostrado. Este sera el codigo del segundo Form:
public delegate void DelInvoke(string Msg);
        public DelInvoke InvokeDel;

        private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (this.InvokeDel != null)
                InvokeDel.Invoke(this.txtMsg.Text);
        }