Mostrando entradas con la etiqueta Visual Studio. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visual Studio. Mostrar todas las entradas

lunes, 2 de junio de 2014

Posted by Unknown On 10:28
Este posteo es breve, no contiene claves, parches o cosas similares para “craquear” herramientas de Visual Studio, sólo pretende mostrar el nuevo entorno de Visual Studio 2013, del cual me siento muy contento y rápidamente me acomodé a él.

No sé si exista una justificación especializada explicando el cambio de los colores (mismos que ya trae la edición anterior de Visual Studio 11 o Visual Studio 2012 (Visual Studio es la versión 12).  Pero créanme que los colores obscuros ayudan a la vista, he estado trabajando por varias horas y no me encuentro cansado. Bien por esta mejora.

Trae muy buenos asistentes para el uso de código, palabras reservadas y asistentes. Su idea de enumerar las funciones y procedimientos, de cuantas veces ha sido convocado (references), me parece una idea excelente, así podemos analizar si la función se utiliza o no.


Dejo las siguientes imágenes del entono de trabajo.

(Yo utilizo dos monitores, y se ve excelente!!)





martes, 1 de abril de 2014

Posted by Unknown On 16:34
En una entrada posterior, había explicado los pasos para realizar una conexión a una base de datos MySQL utilizando .Net.

En esta ocasión, simplemente compartiré el código fuente para realizar una conexión a la base de datos, utilizando tres procedimientos: 

ProbarConexion() As Boolean Esta función devuelve verdadero si se puede establecer la conexión a la base de datos o devuelve falso en caso contrario.

DataTableSelect(ByVal dataSet As DataSet, ByVal sSQL As String) As DataSet. Es una función que devuelve una consulta a través de un dataset.

DataSQLSentence(ByVal sSQL As String) Es un procedimiento que envía una sentencia SQL a la base de datos. Este procediemiento lo utilizo para las sentencias INSERT, UPDATE y DELETE.

Esperando que la información sea de su utilidad:

Imports System.Data.OleDb Public Class ClassConection Dim MdbSQLConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\NOMINA97.MDB" Public MdbSQLConn As OleDbConnection = New OleDbConnection(MdbSQLConnString) Function ProbarConexion() As Boolean Dim value As Boolean = False Try MdbSQLConn.Open() MdbSQLConn.Close() value = True Catch ex As Exception value = False MessageBox.Show("Error de conexión a la base de datos." & vbCrLf & "Este error impide continuar con las operaciones del sistema." & vbCrLf & "La aplicación se cerrará!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End End Try ProbarConexion = value End Function Public Function DataTableSelect(ByVal dataSet As DataSet, ByVal sSQL As String) As DataSet Dim adapter As New OleDbDataAdapter() Try If (ProbarConexion()) Then adapter.SelectCommand = New OleDbCommand(sSQL, MdbSQLConn) adapter.Fill(dataSet) End If Catch ex As Exception MessageBox.Show(ex.Message, "Metodo DataTableSelect", MessageBoxButtons.OK) Finally MdbSQLConn.Close() End Try Return dataSet End Function Public Sub DataSQLSentence(ByVal sSQL As String) Try If (Probarconexion()) Then 'Declaración de variables de conexión propias de SQL Dim myCommand As New OleDbCommand(sSQL, MdbSQLConn) MdbSQLConn.Open() myCommand.ExecuteReader() End If Catch ex As Exception MessageBox.Show(ex.Message, "Método DataSQLSentence", MessageBoxButtons.OK) Finally MdbSQLConn.Close() End Try End Sub End Class



Aquí les dejo la implementación de la clase:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim CCon As New ClassConection Dim dsSQL As New Data.DataSet Dim sSQL As String = "" Try If (TextBox1.Text <> "") Then sSQL = TextBox1.Text CCon.DataTableSelect(dsSQL, sSQL) CCon = Nothing Me.DataGridView1.DataSource = dsSQL.Tables(0) End If Catch ex As Exception MessageBox.Show(ex.Message, "Método DataSQLSentence", MessageBoxButtons.OK) End Try End Sub


lunes, 10 de marzo de 2014

Posted by Unknown On 14:46
Esta entrada tiene por objeto explicar como podemos vincular una base de datos MySQL a un proyecto con .NET.

Paso 1:
Necesitamos el conector MySQL. Y lo encontramos en la página web de MySQL. Actualmente, se encuentra el conector NET 6.8.3 y se puede descargar aquí.

No vamos a meternos en más detalles, simplemente se ejecuta el instalador.

Paso 2:
Necesitamos incorporar las liberarías dll a nuestro proyecto. Y esto se realiza a través de las referencias del proyecto. Esto se realiza seleccionando las opciones Project -> Add Reference



Paso 3:
En mi caso, la aplicación es para escritorio, pero la base de datos se localiza en un servidor remoto, así que vamos a utilizar la misma metodología que un sitio web. Agregamos a nuestro proyecto un app.config, que permitirá al administrador del servidor, adecuar las propiedades de conexión a la base de datos.



Lo importante de esta imagen, son las siguientes líneas:

  <appSettings>
    <add key ="rutadb" value ="Database=sinafi; server=localhost; user id=root; password=k71l6nCHpqY1"/>
  </appSettings>

<appSettings> es la declaración para el entorno y configuración de nuestra aplicación. Aquí utilizamos variables que pasan como parámetros: key y value, 

key es el identificador que vía programación vamos a utilizar.
value es el valor del identificador.

Los valores, son los mismos que debe identificar nuestra base de datos MySQL:
database: Nombre de la base de datos
server: Ubicación del servidor (dirección ip)
userid: Usuario de la base de datos
password: Constraseña de acceso a la base de datos


Paso 4:
Realizamos la conexión a la base de datos

Dim MySQLConnString As String = Configuration.ConfigurationSettings.AppSettings("rutadb").ToString

Public MySQLConn As MySqlConnection = New MySqlConnection(MySQLConnString)

MySQLConnString es la cadena de texto para la conexión a la base de datos, identificamos a través de la clase Configuration, los parámetros de configuración con la variable "rutadb"

Ejemplo:


Imports MySql.Data.MySqlClient Imports System.Data Public Class ClassConection Dim MySQLConnString As String = Configuration.ConfigurationSettings.AppSettings("rutadb").ToString Public MySQLConn As MySqlConnection = New MySqlConnection(MySQLConnString) Private Function Probarconexion() As Boolean Dim value As Boolean = False Try MySQLConn.Open() MySQLConn.Close() value = True Catch ex As Exception value = False MessageBox.Show("Error de conexión a la base de datos." & vbCrLf & "Este error impide continuar con las operaciones del sistema." & vbCrLf & "La aplicación se cerrará!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End End Try Probarconexion = value End Function Public Sub DataSQLSentence(ByVal sSQL As String) Try If (Probarconexion()) Then 'Declaración de variables de conexión propias de SQL Dim myCommand As New MySqlCommand(sSQL, MySQLConn) MySQLConn.Open() myCommand.ExecuteReader() End If Catch ex As Exception MessageBox.Show(ex.Message, "DataSQLSentence", MessageBoxButtons.OK) Finally MySQLConn.Close() End Try End Sub End Class

jueves, 6 de marzo de 2014

Posted by Unknown On 9:50
Para que tu documento en PDF repita encabezados (con imagen) y pies de página te comparto el siguiente código:

Public Class CClassPDFPage Inherits PdfPageEventHelper Public Overrides Sub OnStartPage(ByVal writer As iTextSharp.text.pdf.PdfWriter, ByVal document As iTextSharp.text.Document) Dim oImagen As iTextSharp.text.Image Dim cbPie As PdfContentByte Dim cbEncabezado As PdfContentByte '----------------------------------------------------------------------------------------- ' DEFINICIÓN DEL OBJETO PdfContentByte PARA EL ENCABEZADO '----------------------------------------------------------------------------------------- cbEncabezado = writer.DirectContent With cbEncabezado .BeginText() .SetFontAndSize(FontFactory.GetFont(FontFactory.HELVETICA_BOLD, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont, 8) .SetColorFill(iTextSharp.text.BaseColor.BLACK) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 760, 0) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 750, 0) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 740, 0) .EndText() End With '----------------------------------------------------------------------------------------- ' DEFINICIÓN DEL OBJETO PdfContentByte PARA EL PIE DE PAGINA '----------------------------------------------------------------------------------------- cbPie = writer.DirectContent cbPie.BeginText() cbPie.SetFontAndSize(FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont, 10) cbPie.SetColorFill(iTextSharp.text.BaseColor.BLACK) cbPie.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Página: " & writer.PageNumber, 540, 25, 0) cbPie.EndText() '----------------------------------------------------------------------------------------- ' LOGOS DEL DOCUMENTO '----------------------------------------------------------------------------------------- oImagen = iTextSharp.text.Image.GetInstance(Application.StartupPath & "\images\xxxxx.png") oImagen.SetAbsolutePosition(28, 737) oImagen.ScalePercent(20) 'Ajuste porcentual de la imagen document.Add(oImagen) 'Se agrega la imagen al documento oImagen = iTextSharp.text.Image.GetInstance(Application.StartupPath & "\images\xxxxx.png") oImagen.SetAbsolutePosition(480, 737) oImagen.ScalePercent(16) document.Add(oImagen) End Sub End Class

Explicación del código:
  • Hay que tener en mente que se crea una clase que deriva de un evento, el cual produce la creación o presentación de una nueva página. Este evento es onStartPage
  • Se crean los objetos que se incorporarán al documento: Image, PdfContentByte
  • Se define el encabezado del documento, este encabezado es sólo texto, por lo que se inicia con la función BeginText(), hay otra función que permite iniciar una capa que es BeginLayer().
  • Se define la fuente de ese texto, el color, su alineación y su ubicación.
  • El punto 0,0 se ubica a la izquierda y al inferior del documento. En este ejemplo, el valor 740 es el punto más alto del documento.
  • Se concluye con la introducción del texto a través de EndText().
  • Para el caso del pie de página, se realiza la misma temática.
  • Las propiedades de la imagen son:
    • Image.GetInstance, que es la ruta
    • SetAbsolutePosition, se define la ubicación de la imagen
    • ScalePercent, es la escala de la imagen (este valor es porcentual)


Producto terminado:



Posted by Unknown On 9:17
Estoy utilizando un componente denominado itextsharp de uso libre para la elaboración de archivos PDF desde un entono NET.

Si deseas conocer sobre este componente, su instalación y descarga te recomiendo que utilices la siguiente liga:  introducción a itextsharp

Para quienes aún no tienen el gusto les presento iTextSharp, una biblioteca original de Javaportada a .Net. 
¿Su función? Arrimarle el paraíso a aquellos que buscan generar archivos con formato Adobe PDF desde la plataforma .Net. No menos importante destacar que se trata de un proyecto de código abierto totalmente libre. Existen infinidad de bibliotecas similares pagas pero como practicamente siempre tenemos nuestra alternativa gratuita ;). 

Si ya conoces dicho componente y tienes dudas de como elaborar una tabla, colocar encabezados y pies de página, te comparto el siguiente código.


Sub PrintCatalogWareHouse() Dim oDoc As New iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER) Dim pdfw As iTextSharp.text.pdf.PdfWriter Dim pdfGrid As New iTextSharp.text.pdf.PdfPTable(7) Dim fBodyFont As iTextSharp.text.Font = FontFactory.GetFont(FontFactory.COURIER, 7, iTextSharp.text.Font.NORMAL) Dim fHeaderFont As iTextSharp.text.Font = FontFactory.GetFont("Arial", 8, iTextSharp.text.BaseColor.WHITE) Dim CCon As New ClassConection Dim sFileName As String = "sinafi_ctlg.pdf" Try '----------------------------------------------------------------------------------------- ' PROPIEDADES DEL DOCUMENTO '----------------------------------------------------------------------------------------- pdfw = PdfWriter.GetInstance(oDoc, New FileStream(sFileName, FileMode.Create, FileAccess.Write, FileShare.None)) oDoc.AddTitle("XXXXX") oDoc.AddAuthor("XXXXX") oDoc.AddCreationDate() oDoc.AddSubject("XXXXXX") oDoc.SetMargins(28.5, 28.5, 70, 35) '----------------------------------------------------------------------------------------- ' ENCABEZADO DEL DOCUMENTO '----------------------------------------------------------------------------------------- Dim ev As New CClassPDFPage pdfw.PageEvent = ev '----------------------------------------------------------------------------------------- ' APERTURA DEL DOCUMENTO Y CREACION DE HOJA '----------------------------------------------------------------------------------------- oDoc.Open() '----------------------------------------------------------------------------------------- ' GENERACION DE TABLA '----------------------------------------------------------------------------------------- Dim Titulo1 As New Phrase("Folio", fHeaderFont) Dim Titulo2 As New Phrase("Partida", fHeaderFont) Dim Titulo3 As New Phrase("Descripción", fHeaderFont) Dim Titulo4 As New Phrase("Medida", fHeaderFont) Dim Titulo5 As New Phrase("Cantidad", fHeaderFont) Dim Titulo6 As New Phrase("Precio", fHeaderFont) Dim Titulo7 As New Phrase("Existencia", fHeaderFont) Dim celda As New pdf.PdfPCell Dim dsTabla As New DataSet '----------------------------------------------------------------------------------------- ' DIMENSION DE LA TABLA Y FORMATO DE LOS ENCABEZADOS '----------------------------------------------------------------------------------------- pdfGrid.WidthPercentage = 100 Dim ancho() As Single = {20, 20, 110, 20, 20, 20, 20} pdfGrid.SetWidths(ancho) celda.Colspan = 1 celda.Padding = 5 celda.BackgroundColor = iTextSharp.text.pdf.ExtendedColor.BLACK celda.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER celda.Phrase = Titulo1 : pdfGrid.AddCell(celda) celda.Phrase = Titulo2 : pdfGrid.AddCell(celda) celda.Phrase = Titulo3 : pdfGrid.AddCell(celda) celda.Phrase = Titulo4 : pdfGrid.AddCell(celda) celda.Phrase = Titulo5 : pdfGrid.AddCell(celda) celda.Phrase = Titulo6 : pdfGrid.AddCell(celda) celda.Phrase = Titulo7 : pdfGrid.AddCell(celda) pdfGrid.HeaderRows = 1 ' Esta instrucción define los renglones para el encabezado '----------------------------------------------------------------------------------------- ' CONSULTA SQL, FORMATO DE CELDAS Y AGREGADO DE CELDAS A LA TABLA '----------------------------------------------------------------------------------------- Dim iCol As Integer = 1 Dim sDataCell As String = "" Dim iHorizontalAlignment = 0 CCon.SelectRows(dsTabla, "SELECT * FROM tblwarehousecatalog") For Each oFila As Data.DataRow In dsTabla.Tables(0).Rows iCol = 1 For Each oColumna As Data.DataColumn In dsTabla.Tables(0).Columns sDataCell = oFila(oColumna) Select Case iCol Case 1, 2, 4, 5, 7 iHorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER Case 3 iHorizontalAlignment = iTextSharp.text.Element.ALIGN_LEFT Case 6 sDataCell = FormatNumber(sDataCell, 2) iHorizontalAlignment = iTextSharp.text.Element.ALIGN_RIGHT End Select Dim celda2 As New pdf.PdfPCell(New Phrase(sDataCell, fBodyFont)) celda2.HorizontalAlignment = iHorizontalAlignment celda2.VerticalAlignment = iTextSharp.text.Element.ALIGN_CENTER pdfGrid.AddCell(celda2) iCol += 1 Next oColumna Next oFila '----------------------------------------------------------------------------------------- ' INCORPORACION DE LA TABLA AL DOCUMENTO '----------------------------------------------------------------------------------------- oDoc.Add(pdfGrid) '----------------------------------------------------------------------------------------- ' LIBRACION DEL DOCUMENTO Y PRESENTACION '----------------------------------------------------------------------------------------- pdfw.Flush() oDoc.Close() Process.Start(sFileName) Catch ex As Exception 'Si hubo una excepcion y el archivo existe ... If File.Exists(sFileName) Then 'Cerramos el documento si esta abierto. 'Y asi desbloqueamos el archivo para su eliminacion. If oDoc.IsOpen Then oDoc.Close() '... lo eliminamos de disco. File.Delete(sFileName) End If Throw New Exception("Error al generar archivo PDF (" & ex.Message & ")") Finally pdfw = Nothing oDoc = Nothing End Try End Sub

Explicación del código:


Si sabes desarrollar aplicaciones en .Net, creo que está de más explicar cada línea, así que me enfocaré en el componente itextsharp.

  • oDOC, es nuestro objeto PDF. De tamaño carta y posición vertical.
  • pdfw, es nuestra instancia al objeto oDOC
  • pdfGrid, es nuestra tabla de datos
  • fBodyFont, es la definición de nuestra fuente para el cuerpo de la tabla
  • fHeaderFont, es la definición de nuestra fuente para el encabezado de la tabla
  • CCon, es una clase que me permite conectarme a mi base de datos (MySQL)
  • oDoc.SetMargins(28.5, 28.5, 70, 35), me permite crear el área de trabajo de nuestro documento (definición de margenes). Izquierdo, Derecho, Arriba y Abajo
Para que nuestro documento repita encabezados y pies de pagina se utiliza la siuiente definición (se explicará en otra entrada):

Dim ev As New CClassPDFPage pdfw.PageEvent = ev
Continuamos con el resto del código:

  • Imagina que utilizas un textbox, new Phrase es su equivalente. En él vas a definir las propiedades del texto.
  • pdf.PdfPCell es la propiedad de la celda, pero no puedes editar el texto que va dentro de la celda, para eso utilizas Phrase (si me equivoco, no dudes en hacer comentarios).
  • pdfGrid.HeaderRows, sirve para definir cuantos renglones se repetirán como encabezado.
  • pdfGrid.AddCell, agregamos cada celda a la tabla
  • oDoc.Add(pdfGrid), agregamos la tabla al documento

Producto terminado:





Posted by Unknown On 8:34
En la entrada anterior, comenté sobre mi experiencia y primer contacto con los equipos de cómputo y como fue que me involucre en la rama de la informática.

Esta entrada tiene por objeto hablar sobre mis antecedentes y la especialidad que tengo hacia el Desarrollo de Software.

Antes de concluir la escuela busqué trabajo, mi primer trabajo fue con un contador que requería un desarrollo para una arrendadora. No recuerdo el tiempo que estuve trabajando, pero lo que si recuerdo es que este proyecto no se pudo concluir. ¿Por qué?. Por una mala planeación del mismo. Aunque no tenía experiencia, sabía que debía conocer los alcances del mismo, hasta donde se quería llegar y que debía hacer la herramienta. La verdad es que nunca me explicaron eso.

Bueno, pero eso no es lo importante, lo importante es que comencé a desarrollar con Visual Basic 4. Ya que se requería una aplicación para trabajar en Windows.

Posteriormente, en mi primer trabajo como empleado formal (2002) me solicitaron desarrollar un sistema de nómina, el cual se implementó en 8 meses y se utilizó Visual Basic 6.

Posteriormente. en el año 2005, ingresé al Diplomado MCTS: Windows Applications Development with Microsoft .NET. y fue entonces cuando me involucré en todo el entorno de Visual Studio, desarrollando aplicaciones en Visual Basic y C#.


Actualmente desarrollo utilizando Visual Studio 2010. 
Tengo experiencia en los entorno de Visual Studio 2005, 2008, 2010, 2012 y poco en 2013.