jueves, marzo 29, 2012

Establecer un fondo en tiempo de diseño a un formulario Windows en C#

para este ejemplo debemos tener dos formularios, uno se usará como plantilla en donde manipularemos el evento Paint y el otro heredará el diseño del formulario plantilla:

Pero en este ejemplo el efecto visual solo podrá ser apreciado en tiempo de diseño, es decir que cuando ejecutemos la aplicación solo mostrara un formulario normal.

En el evento Paint del del formulario plantilla colocamos el siguiente código:

   private void Form2_Paint(object sender, PaintEventArgs e)
        {
            if (this.DesignMode)
            {
                SolidBrush drawBrush = new SolidBrush(Color.LightSteelBlue);
                Point p = new Point(this.ClientRectangle.Width - 170, this.ClientRectangle.Height - 25);
                
                Pen pen = new Pen(drawBrush,1);
                Size rec = this.Size;
                rec.Width = rec.Width - 28;
                rec.Height = rec.Height - 50;
                Rectangle r = new Rectangle(new Point(5, 5), rec);
                e.Graphics.DrawRectangle(pen, r);

                e.Graphics.DrawString("Milton Baltazar Valenzuela", new Font("Arial", 10), drawBrush, p);
            }
        }


Y en el primer formulario modificamos la parte donde hereda de un control Form por el formulario plantilla


public partial class Form1 : Form2


vemos que cuando heredamos la parte visual del formulario cambia como se muestra en la imagen.



cuando ejecutamos vemos que el diseño se ha perdido porque en el formulario plantilla hemos establecido que solo se aplique en tiempo de diseño con DesignMode.

Crear un sinonimo publico en Oracle

En ocasiones resulta necesario acceder a información de una tabla que se encuentra en otro esquema, para ello  Oracle permite crear nombres públicos a las tablas para que cualquier usuario pueda acceder al contenido de la tabla.

Para poder crear un sinónimo primer debes loguearte con una cuenta sysdba, crear el sinónimo y acceder con otro usuario para verificar que se puede acceder a la tabla.

conn / as sysdba;
create public synonym dept  for scott.dept;
disconnect;

Luego de crear el sinónimo debes loguearte con una cuenta diferente para verificar el acceso a la tabla con la siguiente consulta:


select * from dept;


Ver transacciones pendientes de commit y rollback en Oracle

La vista dba_2pc_pending  guarda las transacciones pendientes de commit y rollback. Para poder ejecutarla debes loguearte con una cuenta de sysdba a la BD Oracle:

select * from dba_2pc_pending;

FM : Quitar espacios de las fechas en ORACLE

La siguiente instrucción obtiene la fecha

SELECT ename, to_char(hiredate,'day DD Month YYYY') AS
hiredate
FROM emp



y la siguiente añade 'fm' dentro del formato:


SELECT ename, to_char(hiredate,   'fmday DD Month YYYY') AS
hiredate
FROM emp





se nota la diferencia?

BULK COLLECT en ORACLE

Bulk Collect es la forma como Oracle maneja arreglos. puedes usarlo si quieres evitar el uso excesivo de cursores. la ventaja de Bulk Collect es que se maneja en memoria y evita la escritura a disco, por lo cual resulta optimo guardar datos con Bulk Collect.

Hay que tener en cuenta que no debemos utilizar grandes cantidades de información con Bulk Collect porque la memoria del servidor Oracle se puede ver afectado y a la vez tambien afectar otros procesos.

Este es un pequeño ejemplo donde se pasa toda la informacion de la tabla PRODUCTOS al arreglo PRODUCTOS_COLECCION


CREATE TABLE PRODUCTOS
(
  COD_PRODUCTO VARCHAR(10),
  DES_PRODUCTO VARCHAR2(50),
  FLG_ACTIVO CHAR(1)
);

INSERT INTO PRODUCTOS VALUES ('1','ARROZ','S');
INSERT INTO PRODUCTOS VALUES ('2','ACEITE','S');
INSERT INTO PRODUCTOS VALUES ('3','AZUCAR','S');

DECLARE 
  
  TYPE PRODUCTO_FILA IS RECORD (COD_PRODUCTO VARCHAR(10),
                                DES_PRODUCTO VARCHAR2(50),
                                FLG_ACTIVO CHAR(1));
  
  TYPE TYPE_TABLA_PRODUCTOS IS TABLE OF PRODUCTO_FILA; 
  PRODUCTOS_COLECCION TYPE_TABLA_PRODUCTOS; 
  
 BEGIN
 
    SELECT COD_PRODUCTO,DES_PRODUCTO,FLG_ACTIVO
    BULK COLLECT INTO PRODUCTOS_COLECCION 
    FROM PRODUCTOS;
    
    --OBTENER LA DESCRICPION DE LOS PRODUCTOS
    FOR  I IN 1 .. PRODUCTOS_COLECCION.COUNT 
    LOOP
       DBMS_OUTPUT.PUT_LINE(PRODUCTOS_COLECCION(I).DES_PRODUCTO);    
    END LOOP;
    
 END;