Buscar aquí

martes, 13 de diciembre de 2011

Java: Nombrar correctamente un identificador

Son las palabras que se usaran para dar nombre a una clase, método, interface, variable o constante, y aunque existen mucha flexibilidad debes tener en cuenta las siguientes reglas para escoger un nombre:

  • Deben ser caracteres Unicode (Amplia posibilidad)
  • Debe comenzar con letra, signo $, o signo _ (underscore), nunca por un numero
  • Luego del primer carácter, puede estar compuesto de letras, números y cualquier carácter luego de 0X00C0 (Esto ultimo es por los carácteres que no son letras (de 0X0041 a 0X007A) y numeros (de 0X0030 a 0X0039) y que estan antes de 0X00C0 como por ejemplo # = 0X0023, < = 0X003C, > = 0X003E, los cuales no se pueden usar como identificadores)
  • La longitud del identificador no importa
  • No puede contener espacios.
  • Java es case-sensitive.
  • Las palabras reservadas de Java no pueden usarse como identificadores.

Son correctos:

$nombre;
_nombre;
____largo;
_$;

Incorrecto:

4numeros;
:d;
mayor>;
public;


Fuentes Java 2,  Benjamin Aumaille

    martes, 14 de junio de 2011

    Usar un controlador sin tener una tabla asociada CakePHP


    En ocasiones he necesitado tener un controlador que no tiene un modelo (tabla en la base de datos asociado). La forma de lograrlo sin que arroje el error:
    Error: Database table home for model Home was not found.

    Poner el siguiente codigo en la definición del controlador:

    class HomeController extends AppController { 

    var $name = 'Home';
    var $uses = array(); //Asi estamos definiendo que modelos usara y al dejarlo vació pues no busca ninguno.


    function index(){
    }


    }


    Gracias,
    Luisa Quiroga

    lunes, 13 de junio de 2011

    Tablas con nombres compuestos por dos palabras en CakePhp

    Programando en el framework cakephp me tomo un tiempo averiguar cual era realmente la convención para usar nombres compuestos por dos palabras para tablas en el framework, dado que la documentación no es muy precisa al respecto, pero la cosa es asi:

    Nombre de tabla:
    celulas_cuerpos     //Las tablas se nombran en plural y separadas por underscore

    Nombre del controlador:
    celulas_cuerpos_controller.php //Se nombra en plural y separado por underscore

    Sintaxis en el controlador:
    class CelulasCuerposController extends AppController {
       var $name = 'CelulasCuerpos';
       function add(){
          if(!empty($this->data)){
             if($this->CelulasCuerpo->save($this->data)) {
                $this->Session->setFlash("Registro guardado!");
                  $this->redirect('/celulas'); }
              }
          }
      }
    Lo mas importante en la sintaxis dentro del controlador es que para acceder al modelo debe ser en Camel Case pero contrario a toda lógica humana o del cook book es la primera en plural y la segunda en singular.

    Nombre de la vista
    La vista debe ir en una carpeta llamada /views/celulas_cuerpos y dentro los nombres de las vistas normalito

    Acceso URL 
    Para acceder a la funcion es www.ejemplo.com/celulas_cuerpos/add
    Y eso es, me funciono!!!!

    Gracias,

    Luisa

    martes, 1 de febrero de 2011

    Insertar desde un archivo de excel en SQL Sever

    Para insertar los datos que hay en un archivo de Excel en una tabla de SQL server puede resultar mas fácil de lo que parece.

    Primero vamos a usar el archivo de Excel como un Servidor Vinculado.
    Un Servidor Vinculado es una definición de una Cadena de Conexión OLEDB y un Proveedor OLEDB que asociamos a un nombre lógico, es decir, nos permite definir un nombre para el servidor vinculado, y a dicho nombre especificarle qué Proveedor OLEDB y qué Cadena de Conexión se debe utilizar para acceder al correspondiente Origen de Datos OLEDB cuando se solicite acceso a dicho Servidor Vinculado. Como hablamos, un Servidor Vinculado sirve para acceder a Orígenes de Datos OLEDB desde SQL Server (es decir, para ejecutar Consultas Distribuidas, ejecutar Procedimientos Almacenados en servidores remotos, etc.). Ver

    Para definir el Servidor Vinculado podemos usar el asistente de SQL Server o usar un procedimiento almacenado (lo que a mi me funciono mejor), la sintanxis es:

    DECLARE @RC int
    DECLARE @server nvarchar(128)
    DECLARE @srvproduct nvarchar(128)
    DECLARE @provider nvarchar(128)
    DECLARE @datasrc nvarchar(4000)
    DECLARE @location nvarchar(4000)
    DECLARE @provstr nvarchar(4000)
    DECLARE @catalog nvarchar(128)
    -- Set parameter values
    SET @server = 'XLTEST_SP'  -- Nombre para el servidor
    SET @srvproduct = 'Excel'  --Nombre del producto
    SET @provider = 'Microsoft.Jet.OLEDB.4.0'  --Proveedor
    SET @datasrc = 'c:\book1.xls'  --Ruta completa del
    --Origen de datos
    SET @provstr = 'Excel 8.0'   -- Origen de los datos
    EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server,@srvproduct, 
    @provider, @datasrc, @location, @provstr, @catalog

    Puedes dejar solo igual, y con cambiar el nombre del servidor, @server, por cualquier nombre y @datasrc por la ruta completa donde esta el archivo de Excel.

    Al ejecutar esta sentencia en el el Explorador de Objetos se puede encontrar en Objetos del Servidor en Servidores vinculados en Tablas encontraras
    las hojas que tenga el archivo y se pueden consultar como tablas con la siguiente sintaxis:

    SELECT [F1]
    FROM [XLTEST_SP]...[Hoja2$]
    GO
    
    Donde XLTEST_SP es el nombre del Servidor Vinculado.

    Ya que podemos consultar el archivo como una tabla solo es insertarla normalmente en el destino:

    insert into Nintranet.dbo.Empleado_Atributos_Intranet
    SELECT *
    FROM [XLTEST_SP]...[Hoja2$]
    GO


    Ver

    martes, 11 de enero de 2011

    Entradas duplicadas sql server F

    Estoy corrigiendo defectos de una aplicación y uno de los que me reportaron me ha dado muchos dolores de cabeza.
    Es una aplicación web y cuando un usuario realiza cierta operación que debe generar un registro en una tabla, se generan 2 o 3 entradas duplicadas, con 100 milisegundos de diferencia, lo se por que tengo una columna con un getdate al insertar, además de que queda con diferente id

    Tratando de corregir el problema puse una llave compuesta por 4 campos, pero no funciona por la diferencia en milisengundos de la fecha de inserción, y el problema continuaba generando inconsistencias serias en la aplicacion.

    Mi solución un trigger, tomo los campos con los que cotrolo la inserción duplicada y dado el caso si se halla duplicado hago un rollback. Asi:


    ALTER TRIGGER SOL_REPETIDAS

    on Solicitud_vac

    AFTER INSERT

    AS

    BEGIN

    -- SET NOCOUNT ON

    SET NOCOUNT ON;

    DECLARE @fecha_in datetime
    DECLaRE @usu_crea varchar(20)
    DECLARE @fecha_inicio datetime
    declare @sol_id int
    select @sol_id=sol_id, @fecha_in = Sol_Fecha, @usu_crea=Sol_Usu_Crea, @fecha_inicio=Sol_Fecha_Ini from inserted
    print @fecha_in

    --Condicion para determinar un registro similar en la tabla
    if((select count( sol_id) from solicitud_vac where DATEDIFF(mi,sol_fecha,@fecha_in) < 4 and sol_usu_crea=@usu_crea and Sol_Fecha_Ini=@fecha_inicio and sol_id <>@sol_id) >0 )
    ROLLBACK /*Si se encontraron registros similares se hace un rollback, que echa atras la transaccion, incluyendo el insert, update o delete que lanzo el trigger*/

    END

    Otra arma en nuestra linea de batalla para evitar inconsistencias.

    Bye