domingo, 20 de mayo de 2012

PHPMailer


PHPMailer
¿Qué es PHPMailer?
PHPMailer es una clase php para enviar emails basada en el componente active server ASPMail. Permite de una forma sencilla tareas complejas como por ejemplo:
  •  Enviar mensajes de correo con ficheros adjuntos (attachments)
  •      enviar mensajes de correo en formato HTML
Con PHPMailer se pueden enviar emails vía sendmail, PHP mail(), o con SMTP.


Ejemplo
Primero crearemos una página principal llamada “Index”, en mi caso.
Ahí haremos un formulario en el que pondremos los datos y el comentario de la persona que lo va usar. Yo, por ejemplo, los únicos datos que incluiré son: Nombre, Email y Comentarios.
Y este es el código para crear la primera página:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Comentarios</title>
</head>

<style type = "text/css" media="sceen">     
*          {font-family: Calibri,sans-serif; color: #000;}
body    {backround-color: #eee; margin-top: 10%;}

</style>
</head>
<body>
<form action="enviar.php" method="post">
<fieldset>

<p><label>Nombre <input type="text" name="nombre" size="25"/></label></p>
<p><label>Email <input type="text" name="email" size="25"/></label></p>
Comentarios
<p><label><textarea name="texto" cols="32" rows="6"></textarea></label></p>
<input type="submit" value="Enviar"/>

</fieldset>
</form>
</body>
</html>

Una vez ya lista nuestro formulario, crearemos otra página. Y esta será para que los comentarios junto con los datos caigan a nuestro correo.
El código es el siguiente:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Enviar</title>
</head>
<body>
<p>Su informacion ha sido enviada correctamente</p>
<?php
$fecha=date("d-m-Y");
$hora=date("H:i:s");
$destino="esperanza1994big@hotmail.com";
$asunto="Comentario";
$desde='From: ' .$_POST[email];
$comentario="
\n
Nombre:= $_POST[nombre]\n
Email:= $_POST[email]\n
Consulta: $_POST[texto]\n
Enviado: $fecha a las $hora\n
\n
";
mail($destino, $asunto, $comentario, $desde)
?>

</body>
</html>


En este código solo declaramos las variables que ocuparemos. Como:
  • Fecha: nos dará la fecha actual de Día, Mes y Año
  • Hora: muestra la hora en la que el correo fue enviado
  • Destino: esta es la dirección de correo a donde va a ser enviado el comentario del formulario, en el mío, por ejemplo, esperanza1994big@hotmail.com
  • Asunto: Lo definimos con la palabra Comentario
  • Desde: en este se captura la variable del formulario Email

Ahora solo falta subirlo a internet.
A estas alturas su formulario ya debe estar listo.
mi ejemplo esta en esta pagina 
www.esperanzaidp.site50.net en la seccion contactenos
Muchas gracias por todo.

viernes, 18 de mayo de 2012

Try...Catch...Finally


Manipulación de errores
Try…Catch…Finally


Visual Basic admite un control de excepciones (errores) tanto estructurado como no estructurado.
El control de errores estructurado y no estructurado permite establecer un plan para detectar posibles errores, y así impedir que éstos interfieran en los supuestos objetivos de la aplicación.
Si se produce una excepción en un método que no esté preparado para controlarla, la excepción se propagará de vuelta al método de llamada o al método anterior. Si el método anterior tampoco tiene controlador de excepciones, la excepción se propagará de vuelta al llamador del método, y así sucesivamente. La búsqueda de un controlador continuará hasta la pila de llamadas, que es la serie de procedimientos a los que se llama dentro de la aplicación. Si ésta tampoco encuentra un controlador para la excepción, se mostrará un mensaje de error y la aplicación finalizará.


Podemos clasificar los tipos de errores en una serie de categoría genérica.

1.      Errores de escritura: son los de localización más inmediata, ya que se produce con un error sintáctico al escribir nuestro código, y gracias al IDE de visual Studio .NET, podemos detectarlos rápidamente. Cuando escribimos una sentencia incorrectamente, dejamos algún paréntesis sin cerrar, etc., el IDE subraya la parte del código  errónea, y nos muestra un mensaje informativo del error al situar el cursor del ratón sobre el mismo.



2.      Errores de ejecución: este tipo de errores son los que provocan un fallo en la ejecución del programa y su interrupción. No obstante, si utilizamos los gestores de error que proporcionan la herramienta de desarrollo correspondiente, podremos en algunos casos, evitar la cancelación de la ejecución, recuperando su control. El ejemplo siguiente provoca un error, ya que intenta asignar un valor que no corresponde al tipo de una variable.



“txtCantidad” es un valor numérico, por lo tanto la línea de código debe ir escrita como la de “txtPrecio”.

3.      Errores lógicos: estos errores son de los de más difícil captura, ya que el código se encuentra correctamente escrito, produciéndose el problema por un fallo de planteamiento de código.

Ejemplo: el control de un programa no entra en un bucle porque una variable no ha tomado determinado valor; el flujo del  programa sale antes de lo previsto de un procedimiento, al evaluar una expresión que esperábamos que tuviera un resultado diferente, etc.

Dentro del esquema de gestión de errores del entorno .NET Framework, encontramos las figuras del error y la excepción.

  •  Error: un error es un evento que se produce durante el funcionamiento de un programa, provocando una interrupción en su flujo de ejecución. Al producirse esta situación, el error genera un objeto excepción.
  •    Excepción: una excepción es un objeto generado por un error, que contiene información sobre las características del error que se ha producido.VB.NET proporciona dos tipos de tratamiento de error: estructurado y no estructurado. El primero se basa en los esquemas de captura de errores de lenguajes como C# y C++; gestionando los errores a través de excepciones, y una estructura de control que se encarga de atrapar aquellas excepciones que se produzcan. El segundo es un sistema heredado de versiones anteriores de VB, y está basado en la detección y captura de errores a través de etiquetas de código, mediante saltos no estructurados en el flujo de la ejecución, nos enfocaremos únicamente en los errores estructurados

.
Manipulación de estructuras de errores
En este tipo de tratamiento, cada vez que se produce un error, se genera un objeto de la clase Exception, conteniendo la información del error ocurrido. La manera de capturar este tipo de objetos pasa por utilizar una estructura de control de lenguaje, proporcionada para esta finalidad.


La Clase Exception
Cada vez que se produce un error, el entorno de ejecución genera una excepción con la información del error acontecido. Para facilitarnos la tarea de manipulación de la excepción producida, en un controlador de excepciones obtenemos un objeto de la clase excepción, de forma que, a través de sus miembros, podemos saber que ha pasado.
Entre las siguientes propiedades y métodos que podemos utilizar, se encuentran los siguientes:

Message: descripción del error
Source: nombre del objeto o aplicación que ocasiono el error
StackTrace: ruta o traza del código en la que se produjo el error
ToString (): devuelve una cadena con información detallada del error. En esta cadena podemos encontrar también, los valores obtenidos de las propiedades anteriores; por lo que el uso de este método, en muchas ocasiones será el modo más recomendable para obtener los datos de la excepción.   

Control estructurado de excepciones
En el control estructurado de excepciones, los bloques de código se encapsulan y cada uno de ellos tiene uno o varios controladores asociados. Cada controlador especifica una forma de condición de filtro para el tipo de excepción que controla. Cuando el código de un bloque protegido genera una excepción, se busca por orden en el conjunto de controladores correspondientes y se ejecuta el primero que contenga una condición de filtro coincidente. Un método puede tener varios bloques de control estructurado de excepciones y dichos bloques pueden además estar anidados.
La instrucción Try...Catch...Finally se utiliza específicamente para el control estructurado de excepciones.

El uso de la instrucción Try…Catch…Finally permite proteger bloques de código con posibilidades de generar errores. Los controladores de excepciones pueden anidarse, y las variables que se declaren en cada bloque tendrán un ámbito local.
Ejemplo:

Try
‘El código que puede producir el error
Catch [filtros opcionales o tipos de errores a capturar]
‘Código para cuando se produzca un error
 [bloques catch adicionales]
Finally
‘Código para cuando aparezca o no un error
End Try

El bloque Try de un controlador de excepción Try...Catch...Finally contiene la sección del código que el controlador de errores va a supervisar. Si se produce un error durante la ejecución de cualquier parte del código de esta sección, Visual Basic examinará cada instrucción Catch de Try...Catch...Finally hasta que encuentre una cuya condición coincida con el error. Si la encuentra, el control se transferirá a la primera línea de código del bloque Catch. Si no se encuentra una instrucción Catch coincidente, la búsqueda continuará en las instrucciones Catch del bloque Try...Catch...Finally exterior que contiene el bloque en el que ocurrió la excepción. Este proceso se prolongará a lo largo de toda la pila hasta que se encuentre un bloque Catch coincidente en el procedimiento actual. De no encontrarse, se produciría un error.
El código de la sección Finally siempre se ejecuta en último lugar, inmediatamente antes que el bloque de control de errores pierda su ámbito, con independencia de que se ejecute el código de los bloques Catch. Sitúe el código de limpieza (el código que cierra los archivos y libera los objetos, por ejemplo) en la sección Finally.
Filtrar errores en el bloque Catch
Los bloques Catch ofrecen tres opciones para filtrar errores específicos. En una de ellas, los errores se filtran basándose en la clase de la excepción (en este casoClassLoadException), como se muestra en el siguiente código:

Try  
   ' "Try" block.
Catch e as ClassLoadException  
   ' "Catch" block.
Finally  
   ' "Finally" block.
End Try

Si se produce un error ClassLoadException, se ejecuta el código del bloque Catch especificado.
En la segunda opción para filtrar errores, la sección Catch puede filtrar cualquier expresión condicional. Un uso común de este formato del filtro Catch consiste en comprobar números de error específicos, como se muestra en el código siguiente:

Try
   ' "Try" block.
Catch When ErrNum = 5 'Type mismatch.
   ' "Catch" block.
Finally
   ' "Finally" block.
End Try

Cuando Visual Basic encuentra el controlador de errores coincidente, ejecuta el código de este controlador y pasa el control al bloque Finally.
El bloque Finally siempre se ejecuta, con independencia de cualquier otra acción que tenga lugar en los bloques Catch anteriores. No puede utilizar Resume o Resume Next en el control estructurado de excepciones.

Ahora se realizarán una serie de ejemplos que aclararán lo expuesto


Module Module1

    Sub Main()
        Dim sValor As String
        Dim iNumero As Integer
        Try
            'Aqui comienza el control de errores
            Console.WriteLine("Introducir un número")
            sValor = Console.ReadLine
            'Si no hemos introducido ningún número
            iNumero = sValor 'aquí se producira un error

        Catch
            'Si se produce un error, se generará una excepción
            'que capturamos en este bloque de código
            'manipulador de excepción, definido por Catch
            Console.WriteLine("Error al introducir el número" & ControlChars.CrLf & "el valor {0} es incorrecto", sValor)
        End Try
        Console.Read()
    End Sub

End Module

Esta y las siguientes 2 líneas no pertenecen al código anterior
Observen que antes de module1 no están declaradas Option Explicit On o
Option Strict On.







1.      Private Sub Form1_Load(ByVal sender As System.Object, _  
2.                     ByVal e As System.EventArgs) _  
3.                             Handles MyBase.Load  
4.        
5.          Try  
6.        
7.              Dim ContadorDeArchivos As System.Collections.ObjectModel.ReadOnlyCollection(Of String)  
8.              'le indicamos el path que queremos  
9.              ContadorDeArchivos = My.Computer.FileSystem.GetFiles("C:\WINDOWS")  
10.          'nos devuelve la cantidad de archivos  
11.    
12.          MsgBox("La Cantidad de Archivos es: " & CStr(ContadorDeArchivos.Count))  
13.          ' error  
14.      Catch oExcep As Exception  
15.          MsgBox("Descripción del error : " & _  
16.                 oExcep.Message, MsgBoxStyle.Critical, "Error")  
17.      End Try  
18.    
19.  End Sub   




ejemplo:
este ejemplo es de una barra que carga, pero al sobrepasar su valor de 100, osea al 101, aparece un error

Public Class Form1

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Try
            ProgressBar1.Value = ProgressBar1.Value + 1
        Catch ex As Exception
            Timer1.Enabled = False
            MsgBox("El valor de '101' no es valido para 'value'. value deberia estar entre 'Minimun' y 'Maximun'. Nombre del parametro: 'Value'")
            MsgBox("La barra de progreso ha alcanzado su limite maximo, verifique el codigo y trate de no sobrepasar el valor de 'Maximun'", MsgBoxStyle.Information, "Error")
            MsgBox("Al producirse el error la propiedad Enable del Timer cambia a False", MsgBoxStyle.Information, "Error")
        End Try
    End Sub


Ojala la información de este blog les haya sido útil, muchas gracias.

Como sacar una Grafica en un Reporte


¿Cómo imprimir graficas en un reporte en VB.Net?

En esta ocasión aprenderemos a sacar una grafica en un reporte en Visual Basic .Net.
Para empezar haremos un DataSet con los datos de la grafica. En mi caso lo que quiero imprimir es una grafica del Sexo ósea Femenino o Masculino.

Nos vamos a Visual y suponiendo que ya tenemos un DataSet creado, solamente le agregaremos una nueva tabla a este.
Entonces, clic derecho, agregar y escogemos “Tabla de Datos”.



Cuando tengamos nuestra tabla solamente le cambiamos el nombre, solo basta con que le den clic en el titulo para cambiar el nombre. La mía se llamara “Grafica”, luego que ya tenemos nuestra tabla presionamos la combinación de teclas “Ctrl + L” (para una nueva columna), y ahí pondremos los nombres de los campos. A la primera yo le pondré Sexo, la segunda Femenino y la tercera Masculino. (Nuestra tabla no llevara llave primaria)
Nuestra tabla ya debe estar así:



Ahora haremos un crearemos un formulario y este le agregaremos la tabla que acabamos de hacer.
En “Orígenes de datos” la tabla deberá salir, luego solo la seleccionamos y arrastramos al formulario. Cuando la tabla este ahí se nos aparecerá un BindingSource y un BindingNavigator, el segundo que mencione no lo necesitamos, así que lo borramos.
Luego damos clic derecho en la tabla en la esquina superior derecha y deshabilitamos las opciones marcadas, solo dejamos “Habilitar Edición”  activada. Nuestro formulario ira más o menos así:



Ahora pegaremos en el formulario dos “Button”, a uno le llamaremos Agregar y al otro Cancelar, después pegamos un  “ReportViewer”.
Doble clic en el botón Agregar y copiamos el siguiente código:

Dim fila As DataRow = DsFacturacion.Grafica.NewGraficoRow
        fila("Sexo") = "Estudiantes"
        fila("Femenino") = 100
        fila("Masculino") = 100
        DsFacturacion.Grafica.Rows.Add(fila)

Mientras que en el botón Cancelar solo escribimos:
  Close()

“Antes de escribir cualquier código en nuestro formulario deberá ir esta línea: Imports Maestro_Detalle.Entorno (se supone que ya tenemos creado nuestro entorno)”


Ahora crearemos un Reporte. Nos iremos al cuadro de herramientas y seleccionaremos el objeto Grafico y lo pegamos en el reporte.
Se nos aparecerán varias opciones de graficas, nosotros escogeremos la primera.
Ahora solo modificamos. Seleccionamos la grafica del reporte, se aparecerán unos márgenes afuera de él. En “Colocar campos de datos aquí” seleccionaremos Femenino y Masculino haciendo clic en el pequeño cuadro azul de la derecha.
Luego en “Colocar campos de serie aquí” lo dejaremos solo así.
Y por ultimo en “Colocar campos de categoría aquí” escogeremos sexo de la misma manera que escogimos los anteriores. Algo así:




Teniendo seleccionado la grafica nos vamos a “Detalles” y seleccionamos “Propiedades de grupo”, nos saldrá un cuadro en el cual (estando en la opción General) presionaremos el símbolo de la opción “Agrupar por:” para seleccionar Sexo y luego “Aceptar”



Nos vamos a la sección de Femenino y Masculino en la grafica, damos clic derecho y se nos abrirá un cuadro en el cual seleccionaremos la opción “Propiedades de la serie”




Se nos aparecerá un nuevo cuadro y estando en la opción “Datos Generales”
Nos iremos “Campo de Valor”, ya tendrá que estar ahí el campo Femenino. Luego en ese mismo cuadro de texto daremos clic al símbolo que aparece al final del cuadro:



Cuando estemos ahí se abrirá otra ventana con una respectiva línea de código, la cual cambiaremos por esta:  =Fields!Femenino.Value
Lugo aceptar y hacemos lo mismo en la opción Masculino



Volvemos al formulario de nuevo y en el “ReportViewer” daremos clic derecho en la flecha de la esquina superior derecha y en la opción “Elegir Informe” escogeremos el informe que acabamos de hacer.

 

Ahora solamente ponemos a prueba nuestro reporte.
Damos clic en agregar y se aparecerán los valores que ya habíamos preestablecidos, pero los pueden cambiar.
Luego damos clic en la opción “Actualizar” (esta en el reporte) y la grafica ya deberá salir en nuestro reporte.




Si queremos que nuestra grafica aparezca con números (sus valores), entonces;  seleccionamos la grafica  nos vamos a  ventana de propiedades,  seleccionamos “label” y  se mostraran más opciones, entre ellas “usavalueaslabel”  las cambiamos a “true”. También cambiamos “Visible” a “True”
Si queremos decorar un poco entonces, cuadro de herramientas y “palette”.
Si lo que deseamos es cambiar el tipo de grafico seleccionamos el grafico y damos clic derecho “cambiar tipo de grafico”, seleccionamos la que queramos y listo:



Esto es todo, gracias.