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.

Como ordenar un Dataset VB.Net mediante una columna indicada

Hola buenas, otra vez por acá compartiendo un poco de información que ojala les sea útil. Bien hoy les compartiré como ordenar un Dataset mediante la indicación de una columna, para realizar esto basta escribir las siguientes líneas de código:

Dim dt = DSTemp.Tables(0)
dt.DefaultView.Sort = "VIDA_UTIL Asc"
DSTemp.Tables.RemoveAt(0)
DSTemp.Tables.Add(dt.DefaultView.ToTable)
DSTemp.AcceptChanges()

Como se muestra en la línea de código estamos ordenando por vida útil los datos obtenidos en la tabla 0 del DataSet.
Bien en el primer ejemplo ordenamos solo una tabla del dataset, si quisiéramos ordenar todas las tablas del dataset suponiendo que la columna se llama igual en todas las tablas el código seria el siguiente:

For x As Integer = DSTemp.Tables.Count - 1 To 0 Step -1
  Dim dt = DSTemp.Tables(x)
  dt.DefaultView.Sort = "ImageData Asc"
  DSTemp.Tables.RemoveAt(x)
  DSTemp.Tables.Add(dt.DefaultView.ToTable)
Next
DSTemp.AcceptChanges()

Espero que este pequeño post sea de gran ayuda…

Obtener los primeros registros en una Consulta ORACLE

Hola buenas, nuevamente por acá compartiendo información que les puede ser útil. Hoy aprenderemos a utilizar el ROWNUM en motores Oracle. Pues bien muchas veces puede que tengamos la necesidad de obtener los primeros 5 registros o 10 registros en una consulta y es donde nos preguntamos cómo hacerlo.
ROWNUM es una columna mágica que existe en Oracle y si aprendemos como funciona nos puede ser de gran utilidad, esta columna la podemos usar

  1. Para obtener los primeros N registros: Similar a la cláusula LIMIT utilizado en otras bases de datos.
  2.  Para paginar resultados, típico en ambientes web.
Es importante tener en cuenta que ROWNUM es una pseudocolumna (no es una columna real) que está disponible en los resultados de las querys. Un ROWNUM no es asignado permanentemente a una fila(un error de concepto muy común) UNA FILA EN UNA TABLA NO TIENE NINGUN NUMERO ASIGNADO, no se puede pedir que te devuelva la fila 5 de una tabla, eso no existe así no funciona el ROWNUM.

Bien probemos la siguiente consulta

Select Micolumna1, Micolumna2,rownum from Mitabla

Si vemos esto retornara los datos con una columna de más con un número asignado.

Apliquemos el ROWNUM

Supongamos que necesitamos obtener los 5 empleados mejor pagados de nuestra empresa:

select * from  
(select * 
 from emp 
 order by sal desc) 
 where ROWNUM <= 5;

Errores comunes ROWNUM 

Consideremos la siguiente consulta:

select * 
from emp 
where ROWNUM <= 5 
order by sal desc;

Muchos talvez dirán que también obtendrá los 5 empleados mejores pagados, bueno la intención era esa pero realmente lo que la query va a retornar solo los primeros 5 registros aleatorios(los primero 5 que encuentre) ordenados por salario.

Espero que este pequeño post sea de gran utilidad hasta la próxima….

UNION Y UNION ALL, DIFERENCIAS ORACLE - SQL

Hola gente, hoy día les explicare la diferencia en Oracle - SQL de UNION y UNION ALL, talvez se dirán que es algo sencillo pero la idea es compartir información y aprender juntos.

Pues bien resulta que en algún momento de mi vida hice dos consultas y necesitaba unirlas mediante la instrucción UNION para obtener un único conjunto de datos, al hacer esto al realizar la instrucción UNION el resultado era distinto o diferente al que yo necesitaba, es decir con el UNION el cálculo o la consulta no me mostraba los registros que requería y me hacían falta datos.

En la siguiente imagen muestro los datos que requiero o necesito

 




En esta otra imagen muestro los datos que obtenía al utilizan la instrucción UNION



Lo que está en rojo identifica la diferencia en cantidades, es aquí donde sale la interrogante, que puede estar pasando que al ejecutar el UNION no me muestra los datos que necesito, pues bien es acá en donde es importante saber la diferencias entre UNION y UNION ALL


UNION
La instrucción UNION permite vincular los registros de dos consultas pero NO se repetirán aquellos registros iguales, es decir en el conjunto de datos obtenido no se mostraran los registros iguales.

UNION ALL
La instrucción UNION ALL permite igualmente vincular los registros de dos consultas pero con la diferencia que SI SE repetirán los registros es decir mostrara todos los registros en el conjunto de datos.

Entonces que era el problema, que estaba pasando, bien en mi consulta no tenía agregada la columna factura_linea por decirlo de algún modo, de manera tal que cuando habían dos líneas con un mismo producto y precio entonces el UNION no me funcionaba ya que no me mostraba la fila duplicada.

Espero el articulo sea de utilidad, hasta la próxima…

Error de fechas en SQL Server (The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.)

Bueno primero que todo no es un error como tal, básicamente el título es así porque normalmente cuando a nosotros no nos funciona algo lo llamamos error.
Pues bien talvez este post no sea la gran cosa pero para aquellos que están empezando les ayudara bastante. Primero comentarles que no es un error es más bien configuración Regional y de idioma en nuestro SQL. Teniendo claro esto muestro el error que comúnmente se da al intentar grabar una fecha:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

La solución es fácil, para evitar estos inconvenientes hacemos o verificamos lo siguiente:

1-    En el servidor, utilizando el SQL Server Management Studio, vamos a Seguridad –> Inicios de Sesión y verificamos que el usuario con que estamos conectando a la base de datos, tenga como idioma predeterminado English.


Claro está que en mi caso estoy utilizando en mis aplicaciones el idioma Ingles, pero si ustedes están utilizando español por ejemplo entonces cambiarían al de ustedes.

2-    En el servidor, donde se aloja la base de datos, configuramos en Panel de Control –> Configuración Regional y de Idioma: English(Cambiarlo en el caso que ustedes utilicen otro idioma)

3-    En la maquina cliente, configuramos en Panel de Control –> Configuración Regional y de Idioma: English(Cambiarlo en el caso que ustedes utilicen otro idioma)

4-    Verifiquemos que la cadena de conexión de nuestra aplicación utilice ese usuario.
Bien estos son los pasos a seguir para configurar nuestro servidor y para que no nos muestre el error The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Por otra parte también podemos configurar el formato fecha dentro del server, esto lo puedes encontrar en el siguiente vínculo: http://support.microsoft.com/kb/173907/es
Claro está que todo lo anterior se puede automatizar en nuestras aplicaciones, sencillamente lo que deberíamos de hacer es que al iniciar nuestras APP estas detecten la configuración regional de nuestro servidor o el idioma y a partir de eso hacer nuestras consultas o inserciones, pero para los que están iniciando espero este pequeño post les sean de gran ayuda.

 Espero les sea de utilidad, comenten o compartan así todos aprendemos… saludos.

Centrar un Objeto en Visual Net

Una vez más por acá posteándoles un pequeño tip que puede ser muy útil para ustedes. Resulta que en algún momento tuve la necesidad de centrar un GroupBox en mi formulario en una de las aplicaciones que estaba desarrollando, es por esto que les comparto el siguiente método que funciona con cualquier objeto que deseen centrar...
 

    Private Sub Centrar(ByVal Objeto As Object)

        ' Centrar un Formulario ...   
        If TypeOf Objeto Is Form Then
            Dim frm As Form = CType(Objeto, Form)
            With Screen.PrimaryScreen.WorkingArea ' Dimensiones de la pantalla sin el TaskBar   
                frm.Top = (.Height - frm.Height) \ 2
                frm.Left = (.Width - frm.Width) \ 2
            End With

            ' Centrar un control dentro del contenedor   
        Else
            ' referencia al control   
            Dim c As Control = CType(Objeto, Control)

            'le  establece el top y el Left dentro del Parent   
            With c
                .Top = (.Parent.ClientSize.Height - c.Height) \ 2
                .Left = (.Parent.ClientSize.Width - c.Width) \ 2
            End With
        End If
    End Sub

Lo invocamos de la siguiente manera...
 

   Centrar(GroupBox4)

Y el resultado es el siguiente, en este caso lo aplique para un sencillo mensaje de carga de información a como se muestra en la siguiente imagen...



Espero les funcione, fue un tip pequeño pero puede que sea de gran utilidad para ustedes.
Hasta pronto…

Insertar datos en una tabla mientras no exista en la otra – Oracle

Hola buenas, hoy día les compartiré algo que en algún momento les será útil a ustedes cuando necesiten insertar registros en una tabla pero que no existan en otra tabla. Pues bien supongamos que tenemos dos tablas una llamada VENTAS perteneciente al esquema CIA1 y la otra tabla llamada CLIENTE perteneciente al mismo esquema. Perfecto, recordarle que para efectos de explicárselos lo hice de esta manera por lo que ustedes lo adaptaran a su conveniencia.
Genial, teniendo claro lo anterior, supongamos que vamos a insertar todos los clientes en la tabla VENTAS siempre y cuando este cliente no esté  en esta tabla venta y pertenezca al departamento CONTABLE por lo que la query sería la siguiente:

INSERT INTO CIA1.VENTAS 
(CIA1.VENTAS.COD_CLIENTE,
CIA1.VENTAS.VENTA, 
CIA1.VENTAS.DIA,
CIA1.DEPARTAMENTO,
CIA1.VENTAS.INGRESADO_POR, 
CIA1.VENTAS.INGRESADO_EL)
SELECT 
A.COD_CLIENTE,
'N',
SYSDATE,
A.DEPARTAMENTO
'GMORALES',
SYSDATE
FROM CIA1.CLIENTE A
where
A.DEPARTAMENTO='CONTABLE'
AND not exists 
(SELECT * from CIA1.VENTAS where 
CIA1.VENTAS.DEPARTAMENTO='CONTABLE')

Explicación detallada: Como pueden ver en la consulta se hace la inserción mediante un select de los clientes del departamento CONTABLE y que no estén ya insertados en la tabla ventas, es decir los clientes que no hicieron ventas y  pertenecen al departamento CONTABLE son los que se insertaría en la tabla, otra punto importante es que para efectos de esta explicación utilice el not exist enfocado en la misma tabla VENTAS.
Espero que la explicación este un poco clara y entendible, recuerden que la idea es compartir de lo poco que sabemos ya ustedes adaptaran a sus necesidades.
Saludos…

Crear vista con tablas u objetos de otro esquema Oracle - Vistas con tablas de otros Esquemas

Hola, otra vez por acá compartiendo un poco de información que espero sea útil para ustedes, en esta ocasión veremos cómo crear  vistas con tablas que están en otro esquema de la base de datos en Oracle, es decir vamos a crear vista de dos esquemas diferentes en Oracle.
Primero supongamos que tenemos dos esquemas los cuales se llaman:



Perfecto, ahora tenemos una tabla llamada empleado en el esquema ESQ1 y quisieras crear una vista utilizando esta tabla en el esquema ESQ2, entonces tendrías que ejecutar la siguiente sentencia para que te funcione:

GRANT SELECT ON ESQ1.empleado TO ESQ2 WITH GRANT OPTION

Sencillo verdad, bueno quise compartirlo con ustedes por aquello que lo necesiten en algún momento.
Sera hasta la próxima saludos…