sábado, 21 de febrero de 2015

Validar entrada de numeros enteros y decimales en javascript

Para números decimales por ejemplo 22.33   y  .44  , sólo acepta números y un punto
function onKeyDecimal(e,thix) {
        var keynum = window.event ? window.event.keyCode : e.which;
        if (document.getElementById(thix.id).value.indexOf('.') != -1 && keynum == 46)
            return false;
        if ((keynum == 8 || keynum == 48 || keynum == 46))
            return true;
        if (keynum <= 47 || keynum >= 58) return false;
        return /\d/.test(String.fromCharCode(keynum));
    }

Para validar número enteros, es decir sin puntos el siguiente método que sólo acepta números

function justNumbers(e) {
            var keynum = window.event ? window.event.keyCode : e.which;
            if ((keynum == 8 || keynum == 48))
                return true;
            if (keynum <= 47 || keynum >= 58) return false;
            return /\d/.test(String.fromCharCode(keynum));
        }

Para utilizarlos agrega el  evento keyprees a tu  caja de texto

<asp:TextBox ID="txtTalla"    MaxLength="3"  onkeypress="return justNumbers(event);" runat="server"></asp:TextBox>

Noten como  en el evento que validar los números decimales se requiere de el  parámetros this que nos ayuda a conocer el contenido  de la caja de texto

<asp:TextBox ID="txtPrecioCompra" onkeypress="return onKeyDecimal(event,this);" Width="80px"   MaxLength="8" runat="server"></asp:TextBox>

jueves, 10 de julio de 2014

Consultas SQL para numerar filas y contar repeticiones

Sumar  un total de registros que no tienen una columna  cantidad

SELECT SUM(rn) as Total FROM (  SELECT a.proyecto, ROW_NUMBER() OVER(PARTITION BY a.idalumno,a.idproyecto,a.proyecto ORDER BY a.proyecto  DESC)rn from proyectos as a INNER JOIN Alumnos as b on a.idAlumno=b.idalumno  INNER JOIN Carreras as c on b.carrera=c.idCarrera  where  a.Ano='2014' )a WHERE rn = 1 ;

Numeras registros
SELECT   rank() OVER (ORDER BY  b.nombre,a.idproyecto,a.idproyecto) as idproyecto, a.idalumno, b.nombre,c.nombre  as carrera, a.proyecto, a.organismo, a.periodo, a.ano as Año, a.Horas,d.estado as Estado_Proyecto FROM  Proyectos as a  INNER JOIN Alumnos as b on a.idalumno=b.idalumno INNER JOIN Carreras as c on b.carrera=c.idCarrera  INNER JOIN EstadosProyectos  as d on a.EstadoProyecto=d.id where  a.Ano='2014'  ORDER BY  b.nombre;

//Alumnos que presentaron proyectos
SELECT SUM(rn) as Total FROM (SELECT  ROW_NUMBER() OVER(PARTITION BY a.idAlumno ORDER BY a.idAlumno DESC) rn from proyectos  as a INNER JOIN Alumnos as b on a.idAlumno=b.idalumno  INNER JOIN Carreras as c on b.carrera=c.idCarrera where  a.Ano='2014' )a WHERE rn = 1;

//Total de proyectos del año 2014
SELECT SUM(rn) as Total FROM (  SELECT a.proyecto, ROW_NUMBER() OVER(PARTITION BY a.idalumno,a.idproyecto,a.proyecto ORDER BY a.proyecto  DESC)rn from proyectos as a INNER JOIN Alumnos as b on a.idAlumno=b.idalumno
 INNER JOIN Carreras as c on b.carrera=c.idCarrera  where  a.Ano='2014' )a WHERE rn = 1 ;

sábado, 21 de junio de 2014

Stored Procedure que imprime un Rango de numeros obtenidos de una tabla


Se trata de un procedimiento  almacenado que obtiene dos números de una tabla y que consta de 
las columna  numero1, numero2  e IdFila que es la clave primaria, misma que se envía como parámetro al procedimiento almacenado e imprime el rango  que existe entre estos dos números.



--Creando procedimiento
CREATE PROCEDURE  ObtenNumerosRango
@Fila int
   AS
BEGIN  
DECLARE @N1 int,@N2 int;
  SET @N1 = (Select cast(Numero1 as int)Numero1 from  tblNumeros where idFila=@Fila);
  SET @N2 =(Select cast(Numero2 as int)Numero2 from  tblNumeros where idFila=@Fila);
   
   WHILE @N1<=@N2
   BEGIN
      PRINT'Numero :):'+convert(varchar(3),@N1);
       Select @N1=@N1+1;
   END; 
END
--Llamando al procedimiento
DECLARE @Fila int=6;
Execute ObtenNumerosRango 6;