Por Geymer Morales Cruz

Compartiendo Información...

Tips para informáticos

Tips para informáticos nace gracias a esas pequeñas necesidades que muchas veces nos complican el desarrollo de una aplicación, espero les sea de utilidad los códigos facilitados.

Códigos fuentes para aplicaciones de escritorio

Aca podras encontrar esa ayuda necesaria para sacar adelante tu aplicación, esos pequeños códigos fuentes que son fundamentales para que nuestro metodo funcione, además la funcionalidad de bases de datos fundamentales para el manejo de nuestros datos.

Códidos fuentes para aplicaciones web

Actualmente las aplicaciones web son fundamentales en las organizaciones, es por eso que estos tips te ayudaran a sacar adelante tu aplicación web.

Códigos fuentes Android

Con el incremento en los Smartphone, las app para estos dispositivos son fundamentales, es por esto que acá tendrás esas pequeñas bases para que puedas realizar tus app.

Códigos Fuentes Windows Mobile

Para los que han trabajado con las Pockets PC o Handheld, los métodos y códigos que encontraras te ayudaran en esos métodos importantísimos en tu aplicación.

Combobox en Datagridview vb.net

Hola buenas, otra vez por acá compartiendo un poco de conocimiento, hoy les mostrare algo sencillo, en algún momento tuve la necesidad de poner un combobox dentro de un datagridview en visual basic net es por esto que comparto el pequeño tip por si tienes que realizar algo parecido. Entrando en materia primero debemos de agregar el datagridview, acá les muestro el que yo agregue.


Como pueden notar le cambie el encabezado y estoy iniciando con 4 columnas y aún no he agregado la 5 columna con el combobox, además el nombre que le puse al objeto es el que por defecto tiene al momento de agregarlo DataGridView1, pues bien para agregar el combobox se hace a través de código, que a continuación se los muestro y tratare de explicárselos.

Dim tipocentro() As String = {" Reproduccion ", " Produccion "}
Dim cmb As New DataGridViewComboBoxColumn()

cmb.DataSource = tipocentro
cmb.Width = 150
cmb.HeaderText = "Centro"
DataGridView1.Columns.Add(cmb) 

Este fragmento de código ustedes pueden ponerlo en el momento que cargan la información al DataGridView1 y de esta manera se cargara el combobox a como se muestra a continuación.


Ya con esto ustedes pueden adaptarlos a sus proyectos dependiendo del trabajo que necesiten realizar.

Saludos.

Seleccionar registros de una tabla que no están en otra SQL Server

[SQL]Select tabla registros no están en otra tabla

Hola, otra vez por acá compartiendo un par de consultas que pueden ser de mucha ayuda, son sencillas pero para personas que están comenzando en este mundo serian de mucha ayuda, resulta que en algún momento en uno de mis programas necesitaba obtener registros de una tabla pero con la condición que esos registros no estuvieran en otra tabla, existen muchas formas de hacerlo en este post les mostrare tres opciones.

Seleccionar registros de una tabla que no están en otra, Opción 1:
Select * from tabla1 where not exists
(select 1 from tabla2 where tabla2.id = tabla1.id)

Muy importante, si el campo o los campos id de tu tabla esta indexados esta consulta va a ser súper rápida y estará muy optimizada en ese sentido por lo que no te dará problemas.

Seleccionar registros de una tabla que no están en otra, Opción 2:
Select * from tabla1 where tabla1.id 
not in (select tabla2.id from tabla2)

En esta segunda opción veremos el NOT IN, esta segunda opción a mi parecer es ineficiente porque a cada registro se ejecuta el  segundo SELECT, Si tu tabla2 es grande notaras de inmediato el tiempo de respuesta de tu server en devolver esta instrucción

Seleccionar registros de una tabla que no están en otra, Opción 3:
Select * from t1 left join t2 on t1.id=t2.id where t2.id is null 

También podemos hacer un LEFT JOIN de manera que seleccionaríamos los registros que no ha podido hacer el JOIN.

Son tres opciones interesantes, sé que puede haber más y mejores sentencias con esta finalidad, en lo personal me gustan las opciones 3 y 1, al final prefiero más la 1.
Hasta pronto!

Actualizar o Insertar un Registro en una sentencia ORACLE Y SQL Server

Hola buenas como están, hoy le compartiré un artículo interesante y útil para todos aquellos que desarrollan día a día, A continuación veremos cómo hacer una inserción o actualización en una misma sentencia(Actualizar o Insertar un Registro en ORACLE  Y SQL Server en la misma sentencia), resulta que a partir de la versión 9i de Oracle Database y a partir de SQL Server 2008 se incorpora una novedosa sentencia llamada MERGE(ahora es parte del estándar ANSI SQL). comúnmente cuando queríamos insertar/actualizar una tabla no vacía teníamos que hacer un INSERT o UPDATE, Con MERGE podemos tener esta lógica en una única sentencia SQL y así simplificamos el código.

A continuación les muestro la sintaxis de MERGE:
MERGE TABLA
USING (SELECT @ID AS ID) AS SRC ON SRC.ID = TABLA.ID
WHEN MATCHED THEN
UPDATE SET Campo1 = @Valor
WHEN NOT MATCHED THEN
INSERT (Campo1,ID) VALUES (@Valor,@ID)

En la línea 1 indicamos nuestra tabla en la cual se van a insertar los datos al igual que el select en la línea 2.
En línea 3 y 4 es donde le indicamos que si coinciden los campos anteriores realice entonces una actualización de ese registro, caso contrario en la línea 5 y 6 en donde indicamos que inserte el dato.
Existen varias soluciones para realizar este proceso de inserción o actualización en una sola sentencia ya sea en SQL Server o en Oracle, la siguiente personalmente la utilizaba antes para mis sistemas, pero por eficiencia utilizo mejor MERGE que anteriormente se los explique, de igual manera les comparto la solución.

La estructura de la consulta es la siguiente:

BEGIN
INSERT INTO MITABLA
(CAMPO1,CAMPO2;CAMPO3,CAMPO4) VALUES (1,'2','MIDESCRIPCION','MIDESCRIPCION2');
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
UPDATE MITABLA 
SET CAMPO2=22,CAMPO3='OTRADESCRIPCION',CAMPO4='OTRADESCRIPCION'
WHERE CAMPO1='PARAMETRO_ID' ;
END;

En una explicación breve, en la line 2 y 3 le indicamos que realice la inserción común y corriente, lo interesante acá sucede en la línea 4 y 5 que es donde le indicamos que si los campos llaves que definimos en la tabla se duplica entonces esto produce una excepción de duplicidad de llaves por lo que se ejecutara la siguiente instrucción que se refiere  6,7,8 en donde hacemos el UPDATE normal obviamente con el WHERE indicándole también nuestros campos llaves.

Espero les funcione y que les sea de mucha utilidad la información, será hasta la próxima saludos.

Error en SQL 2005 - If possible, restore from backup. If a backup is not available, it might be necessary to rebuild the log

Hola Buenas, en esta ocasión les compartiré una solución que la verdad les será muy útil cuando se les presente un problema de estos.
Bueno lo primero, solo para comentarles un poco, nuestro servidor de Base de Datos presento problemas con el Sistema operativo por lo que se reinstalo y por ende se debían de hacer los Attach necesarios a las bases de datos en producción o bien cargar los respaldos, en mi caso me incline al realizar el Attach...




Para mi sorpresa todas las bases de datos funcionaron a la perfección con el Attach solo una presento el siguiente error y por ende problemas…

An error occurred while processing the log for database 'DataElekCost'. If possible, restore from backup. If a backup is not available, it might be necessary to rebuild the log.
Could not open new database 'DataElekCost'. CREATE DATABASE is aborted. (Microsoft SQL Server, Error: 9004)

Como se solventa este error ?

Paso 1: Primero debes de crear una base de datos nueva con el mismo nombre a la que esta presentando problemas, luego detienes el servicio del SQL y reemplazas tus archivos .ldf y .mdf, seguido de esto volvemos a iniciar el servicio del SQL y si ingresamos nuevamente al Management Studio la base de datos se mostrara en estado sospechoso


Paso 2: Luego de esto lo que debemos de hacer es poner la base de datos en modo de emergencia (Emergency Mode) y se realiza con siguiente Comando:

ALTER DATABASE NombredetuBasededatos SET EMERGENCY

Al ejecutar este comando, desde el Management Studio el aspecto de nuestra base de datos cambiara a esta…



Paso 3: luego de esto ejecutamos el siguiente comando





Lo que estamos haciendo es pasando nuestra base de datos a SINGLE_USER.

Paso4: Luego de esto ejecutamos el comando DBCC CHECKDB con la opción REPAIR_ALLOW_DATA_LOSS a como se muestra en al imagen


Paso5: Finalizado este proceso debemos de pasar la base de datos de modo Single User a Multi User y lo hacemos con el siguiente comando

ALTER DATABASE SharePoint_Config SET MULTI_USER




Ya con esto tenemos nuestra base de datos lista y accesible
Espero sea de gran ayuda este aporte…

Saludos ;) y hasta la próxima…

Método para eliminar ceros a la izquierda en Visual Net

Saludos amig@s, en el siguiente post les mostrare un método con la cual ustedes podrán eliminar todos los ceros a la izquierda de una cadena determina, pues bien por ejemplo tenemos lo siguiente:
Dim sinceros as string
sinceros = CadenaSinCeros(cadena)

Donde sinceros es una varible tipo string y CadenaSinCeros() es el método que realizara el procedimiento, dicho método recibirá por parámetro una cadena y retornara el valor pero sin ceros a la izquierda. Por ejemplo supongamos que cadena=000123, al invocar el método y enviar dicha información este retornara 123, pues sin más el método:

    Public Function CadenaSinCeros(ByVal sEntrada As String) As String
        Dim i As Integer, j As Integer, sIntermedio As String
        For j = 1 To Len(sEntrada)
            If Mid(sEntrada, j, 1) <> "0" Then
                sIntermedio = Mid(sEntrada, j)
                Exit For
            End If
        Next
        CadenaSinCeros = sIntermedio
    End Function

Espero les sea de utilidad, a mi me ayudo bastante. Hasta la próxima…

My Computer – Información sobre mi computadora Visual Net 2008

Este pequeño aporte se refiere a información que podemos obtener al utilizar My Computer y que muchas veces son necesarias en nuestras aplicaciones, a continuación mencionamos algunas…

1 – Para saber la resolución de mi pantalla el utilizamos el siguiente código

MsgBox("La Resolucion de mi Pantalla es " + My.Computer.Screen.Bounds.Width + " x " + My.Computer.Screen.Bounds.Height)





2 – Muy importante, para obtener el directorio en donde se encuentra la aplicación seria

MsgBox(My.Computer.FileSystem.CurrentDirectory)



3 – Importante también es obtener la ruta completa de Mis Documentos

MsgBox(My.Computer.FileSystem.SpecialDirectories.MyDocuments)




4 – Saber si esta activada la tecla mayúscula

MsgBox(My.Computer.Keyboard.CapsLock) ' true si esta activado la mayuscula,false si no esta activado


5 – Hacer ping a una dirección IP

MsgBox(My.Computer.Network.Ping("192.168.1.3")) ' false si no da ping, true si el dispositivo responde


6 – Obtener el total de memoria física del equipo

MsgBox(My.Computer.Info.TotalPhysicalMemory) ''obtiene el total de memoria fisica del equipo


7 – Obtener el Nombre del Sistema Operativo

MsgBox(My.Computer.Info.OSFullName) 'obtiene el nombre del sistema operativo




8 – Obtener el Nombre de mi computador


MsgBox(My.Computer.Name) ' obtiene el nombre de tu computador


Asi de Facil se obtiene informacion referente al equipo, cabe resaltar que para efecto de ejemplo se utilizo el MsgBox pero los valores se pueden obtener y almacenar en variable..

Hasta la Proxima

Ajustar Volumen Pocket PC Visual Basic Net 2008

En esta ocasión nos enfocaremos a la programación en dispositivos móviles más específicamente en las Pocket PC, para esto daré por hecho que ya han desarrollado algún pequeño “hola mundo” en dicho dispositivo.


Ok perfecto para seguir con el “Tip” primero que nada les comento que esta idea de bajar o subir el volumen a la Pocket PC surgió de un amigo para un proyecto que ya está establecido y que se piensa mejorar.









Primero que todo diseñamos un formulario sencillo como el que se muestra en la imagen:



Bien, recordarles nada más que en mi caso yo al botón le puse el nombre de “bton_volumen” y a los RadioButton “rbt_01”, “rbt_02”, “rbt_03”, “rbt_04”, “rbt_05”, “rbt_06”, respectivamente ya que asi se hace referencia a 6 niveles de volumen, y al formulario le llame "Frm_principal”.

Una vez que diseñamos, primeramente importamos las siguientes librerías a como se muestra en el código siguiente.
Imports System
Imports System.Linq
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms


Perfecto, luego de esto declaramos los siguientes métodos que nos permitirán interactuar mediante la librería “coredll.dll” con el dispositivo, estas métodos van después de “Partial Public Class Form1” no al inicio del código, además si quieren saber más de esta librería no duden en preguntarle a Google que de una vez les adelanto tiene muchas funciones…
<System.Runtime.InteropServices.DllImport("coredll.dll", SetLastError:=True)> _
Public Shared Function waveOutSetVolume(ByVal device As IntPtr, ByVal volume As Integer) As Integer
End Function


<System.Runtime.InteropServices.DllImport("coredll.dll", SetLastError:=True)> _
Public Shared Function waveOutGetVolume(ByVal device As IntPtr, ByRef volume As Integer) As Integer
End Function



Ok en mi caso realice un método que retorna el nivel de volumen dependiendo del “RadioButton” seleccionado, acá el código..

Private Function nivel_volumen(ByVal nivel As Integer) As String


Dim volumen As Integer

Select Case nivel '' dependiendo del numero que se reciba por parametro


Case 0
volumen = 0 ''no hay sonido
Case 1
volumen = 858993459 'volumen bajo
Case 2
volumen = 1717986918 'volumen normal
Case 3
volumen = -1717986919 'volumen medio
Case 4
volumen = -858993460 'volumen alto
Case 5
volumen = -1 'volumen muy Alto

End Select


Return volumen

End Function

Ok excelente solo queda el código que ira en el botón el cual se los muestro a continuación…
  Private Sub bton_volumen_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles bton_volumen.Click


If rbt_01.Checked = True Then
waveOutSetVolume(IntPtr.Zero, nivel_volumen(0)) ' el 0 es para indicarle al case el nivel de volumen
End If

If rbt_02.Checked = True Then
waveOutSetVolume(IntPtr.Zero, nivel_volumen(1))
End If

If rbt_03.Checked = True Then
waveOutSetVolume(IntPtr.Zero, nivel_volumen(2))
End If

If rbt_04.Checked = True Then
waveOutSetVolume(IntPtr.Zero, nivel_volumen(3))
End If

If rbt_05.Checked = True Then
waveOutSetVolume(IntPtr.Zero, nivel_volumen(4))
End If

If rbt_06.Checked = True Then
waveOutSetVolume(IntPtr.Zero, nivel_volumen(5))
End If

End Sub

Una vez esto ejecutamos nuestro código veremos cómo interactuamos con el volumen de la PDA...



Acá todo el código del formulario completo:


Imports System
Imports System.Linq
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms


Partial Public Class Frm_principal


 <System.Runtime.InteropServices.DllImport("coredll.dll", SetLastError:=True)> _
 Public Shared Function waveOutSetVolume(ByVal device As IntPtr, ByVal volume As Integer) As Integer
 End Function


 <System.Runtime.InteropServices.DllImport("coredll.dll", SetLastError:=True)> _
 Public Shared Function waveOutGetVolume(ByVal device As IntPtr, ByRef volume As Integer) As Integer
 End Function

 Private Sub bton_volumen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bton_volumen.Click


     If rbt_01.Checked = True Then
         waveOutSetVolume(IntPtr.Zero, nivel_volumen(0)) ' el 0 es para indicarle al case el nivel de volumen
     End If

     If rbt_02.Checked = True Then
         waveOutSetVolume(IntPtr.Zero, nivel_volumen(1))
     End If

     If rbt_03.Checked = True Then
         waveOutSetVolume(IntPtr.Zero, nivel_volumen(2))
     End If

     If rbt_04.Checked = True Then
         waveOutSetVolume(IntPtr.Zero, nivel_volumen(3))
     End If

     If rbt_05.Checked = True Then
         waveOutSetVolume(IntPtr.Zero, nivel_volumen(4))
     End If

     If rbt_06.Checked = True Then
         waveOutSetVolume(IntPtr.Zero, nivel_volumen(5))
     End If

 End Sub

 Private Function nivel_volumen(ByVal nivel As Integer) As String

     Dim volumen As Integer

     Select Case nivel '' dependiendo del numero que se reciba por parametro

         Case 0
             volumen = 0 ''no hay sonido
         Case 1
             volumen = 858993459 'volumen bajo
         Case 2
             volumen = 1717986918 'volumen normal
         Case 3
             volumen = -1717986919 'volumen medio
         Case 4
             volumen = -858993460 'volumen alto
         Case 5
             volumen = -1 'volumen muy Alto

     End Select


     Return volumen

 End Function
End Class


Ok espero que este tip le ayude montones...

Hasta la Proxima :)