Obtener valor del Web.config con Javascript.

El siguiente fragmento de código encapsula en una variable JavaScript el valor de una AppSetting de un Web.config, permitiendo así que dicha variable pueda ser utilizada por cualquier componente o función (JavaScript o JQuery) de la página web.

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">		
	<script>
		var _valor = '@System.Configuration.ConfigurationManager.AppSettings["appSettingKey"]';
	</script>	
</head>
<body>	
</body>
</html>

Limpiar filtros de tabla de JQuery.

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
	<title>JQuery Data Table</title>	
	<link href="../css/bootstrap.min.css" rel="stylesheet" type="text/css">
	<link href="../css/foundation.min.css" rel="stylesheet" type="text/css">		
	<link href="../css/dataTables.foundation.min.css" rel="stylesheet" type="text/css">		
</head>
<body>
<div class="row">
	<div class="col-md-12">
	<br>
	<table id="tblEjemplo" class="display" cellspacing="0" width="100%">
        <thead>
            <tr>
                <th>Name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
            </tr>
        </thead>        
        <tbody>
            <tr>
                <td>Tiger Nixon</td>
                <td>System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011/04/25</td>
                <td>$320,800</td>
            </tr>
            <tr>
                <td>Garrett Winters</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>63</td>
                <td>2011/07/25</td>
                <td>$170,750</td>
            </tr>
            <tr>
                <td>Ashton Cox</td>
                <td>Junior Technical Author</td>
                <td>San Francisco</td>
                <td>66</td>
                <td>2009/01/12</td>
                <td>$86,000</td>
            </tr>
            <tr>
                <td>Cedric Kelly</td>
                <td>Senior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>22</td>
                <td>2012/03/29</td>
                <td>$433,060</td>
            </tr>
            <tr>
                <td>Airi Satou</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>33</td>
                <td>2008/11/28</td>
                <td>$162,700</td>
            </tr>
            <tr>
                <td>Brielle Williamson</td>
                <td>Integration Specialist</td>
                <td>New York</td>
                <td>61</td>
                <td>2012/12/02</td>
                <td>$372,000</td>
            </tr>
            <tr>
                <td>Herrod Chandler</td>
                <td>Sales Assistant</td>
                <td>San Francisco</td>
                <td>59</td>
                <td>2012/08/06</td>
                <td>$137,500</td>
            </tr>
            <tr>
                <td>Rhona Davidson</td>
                <td>Integration Specialist</td>
                <td>Tokyo</td>
                <td>55</td>
                <td>2010/10/14</td>
                <td>$327,900</td>
            </tr>
            <tr>
                <td>Colleen Hurst</td>
                <td>Javascript Developer</td>
                <td>San Francisco</td>
                <td>39</td>
                <td>2009/09/15</td>
                <td>$205,500</td>
            </tr>
            <tr>
                <td>Sonya Frost</td>
                <td>Software Engineer</td>
                <td>Edinburgh</td>
                <td>23</td>
                <td>2008/12/13</td>
                <td>$103,600</td>
            </tr>
            <tr>
                <td>Jena Gaines</td>
                <td>Office Manager</td>
                <td>London</td>
                <td>30</td>
                <td>2008/12/19</td>
                <td>$90,560</td>
            </tr>
            <tr>
                <td>Quinn Flynn</td>
                <td>Support Lead</td>
                <td>Edinburgh</td>
                <td>22</td>
                <td>2013/03/03</td>
                <td>$342,000</td>
            </tr>
            <tr>
                <td>Charde Marshall</td>
                <td>Regional Director</td>
                <td>San Francisco</td>
                <td>36</td>
                <td>2008/10/16</td>
                <td>$470,600</td>
            </tr>
            <tr>
                <td>Haley Kennedy</td>
                <td>Senior Marketing Designer</td>
                <td>London</td>
                <td>43</td>
                <td>2012/12/18</td>
                <td>$313,500</td>
            </tr>
            <tr>
                <td>Tatyana Fitzpatrick</td>
                <td>Regional Director</td>
                <td>London</td>
                <td>19</td>
                <td>2010/03/17</td>
                <td>$385,750</td>
            </tr>
            <tr>
                <td>Michael Silva</td>
                <td>Marketing Designer</td>
                <td>London</td>
                <td>66</td>
                <td>2012/11/27</td>
                <td>$198,500</td>
            </tr>
            <tr>
                <td>Paul Byrd</td>
                <td>Chief Financial Officer (CFO)</td>
                <td>New York</td>
                <td>64</td>
                <td>2010/06/09</td>
                <td>$725,000</td>
            </tr>
            <tr>
                <td>Gloria Little</td>
                <td>Systems Administrator</td>
                <td>New York</td>
                <td>59</td>
                <td>2009/04/10</td>
                <td>$237,500</td>
            </tr>
            <tr>
                <td>Bradley Greer</td>
                <td>Software Engineer</td>
                <td>London</td>
                <td>41</td>
                <td>2012/10/13</td>
                <td>$132,000</td>
            </tr>
            <tr>
                <td>Dai Rios</td>
                <td>Personnel Lead</td>
                <td>Edinburgh</td>
                <td>35</td>
                <td>2012/09/26</td>
                <td>$217,500</td>
            </tr>
            <tr>
                <td>Jenette Caldwell</td>
                <td>Development Lead</td>
                <td>New York</td>
                <td>30</td>
                <td>2011/09/03</td>
                <td>$345,000</td>
            </tr>
            <tr>
                <td>Yuri Berry</td>
                <td>Chief Marketing Officer (CMO)</td>
                <td>New York</td>
                <td>40</td>
                <td>2009/06/25</td>
                <td>$675,000</td>
            </tr>
            <tr>
                <td>Caesar Vance</td>
                <td>Pre-Sales Support</td>
                <td>New York</td>
                <td>21</td>
                <td>2011/12/12</td>
                <td>$106,450</td>
            </tr>
            <tr>
                <td>Doris Wilder</td>
                <td>Sales Assistant</td>
                <td>Sidney</td>
                <td>23</td>
                <td>2010/09/20</td>
                <td>$85,600</td>
            </tr>
            <tr>
                <td>Angelica Ramos</td>
                <td>Chief Executive Officer (CEO)</td>
                <td>London</td>
                <td>47</td>
                <td>2009/10/09</td>
                <td>$1,200,000</td>
            </tr>
            <tr>
                <td>Gavin Joyce</td>
                <td>Developer</td>
                <td>Edinburgh</td>
                <td>42</td>
                <td>2010/12/22</td>
                <td>$92,575</td>
            </tr>
            <tr>
                <td>Jennifer Chang</td>
                <td>Regional Director</td>
                <td>Singapore</td>
                <td>28</td>
                <td>2010/11/14</td>
                <td>$357,650</td>
            </tr>
            <tr>
                <td>Brenden Wagner</td>
                <td>Software Engineer</td>
                <td>San Francisco</td>
                <td>28</td>
                <td>2011/06/07</td>
                <td>$206,850</td>
            </tr>
            <tr>
                <td>Fiona Green</td>
                <td>Chief Operating Officer (COO)</td>
                <td>San Francisco</td>
                <td>48</td>
                <td>2010/03/11</td>
                <td>$850,000</td>
            </tr>
            <tr>
                <td>Shou Itou</td>
                <td>Regional Marketing</td>
                <td>Tokyo</td>
                <td>20</td>
                <td>2011/08/14</td>
                <td>$163,000</td>
            </tr>
            <tr>
                <td>Michelle House</td>
                <td>Integration Specialist</td>
                <td>Sidney</td>
                <td>37</td>
                <td>2011/06/02</td>
                <td>$95,400</td>
            </tr>
            <tr>
                <td>Suki Burks</td>
                <td>Developer</td>
                <td>London</td>
                <td>53</td>
                <td>2009/10/22</td>
                <td>$114,500</td>
            </tr>
            <tr>
                <td>Prescott Bartlett</td>
                <td>Technical Author</td>
                <td>London</td>
                <td>27</td>
                <td>2011/05/07</td>
                <td>$145,000</td>
            </tr>
            <tr>
                <td>Gavin Cortez</td>
                <td>Team Leader</td>
                <td>San Francisco</td>
                <td>22</td>
                <td>2008/10/26</td>
                <td>$235,500</td>
            </tr>
            <tr>
                <td>Martena Mccray</td>
                <td>Post-Sales support</td>
                <td>Edinburgh</td>
                <td>46</td>
                <td>2011/03/09</td>
                <td>$324,050</td>
            </tr>
            <tr>
                <td>Unity Butler</td>
                <td>Marketing Designer</td>
                <td>San Francisco</td>
                <td>47</td>
                <td>2009/12/09</td>
                <td>$85,675</td>
            </tr>
            <tr>
                <td>Howard Hatfield</td>
                <td>Office Manager</td>
                <td>San Francisco</td>
                <td>51</td>
                <td>2008/12/16</td>
                <td>$164,500</td>
            </tr>
            <tr>
                <td>Hope Fuentes</td>
                <td>Secretary</td>
                <td>San Francisco</td>
                <td>41</td>
                <td>2010/02/12</td>
                <td>$109,850</td>
            </tr>
            <tr>
                <td>Vivian Harrell</td>
                <td>Financial Controller</td>
                <td>San Francisco</td>
                <td>62</td>
                <td>2009/02/14</td>
                <td>$452,500</td>
            </tr>
            <tr>
                <td>Timothy Mooney</td>
                <td>Office Manager</td>
                <td>London</td>
                <td>37</td>
                <td>2008/12/11</td>
                <td>$136,200</td>
            </tr>
            <tr>
                <td>Jackson Bradshaw</td>
                <td>Director</td>
                <td>New York</td>
                <td>65</td>
                <td>2008/09/26</td>
                <td>$645,750</td>
            </tr>
            <tr>
                <td>Olivia Liang</td>
                <td>Support Engineer</td>
                <td>Singapore</td>
                <td>64</td>
                <td>2011/02/03</td>
                <td>$234,500</td>
            </tr>
            <tr>
                <td>Bruno Nash</td>
                <td>Software Engineer</td>
                <td>London</td>
                <td>38</td>
                <td>2011/05/03</td>
                <td>$163,500</td>
            </tr>
            <tr>
                <td>Sakura Yamamoto</td>
                <td>Support Engineer</td>
                <td>Tokyo</td>
                <td>37</td>
                <td>2009/08/19</td>
                <td>$139,575</td>
            </tr>
            <tr>
                <td>Thor Walton</td>
                <td>Developer</td>
                <td>New York</td>
                <td>61</td>
                <td>2013/08/11</td>
                <td>$98,540</td>
            </tr>
            <tr>
                <td>Finn Camacho</td>
                <td>Support Engineer</td>
                <td>San Francisco</td>
                <td>47</td>
                <td>2009/07/07</td>
                <td>$87,500</td>
            </tr>
            <tr>
                <td>Serge Baldwin</td>
                <td>Data Coordinator</td>
                <td>Singapore</td>
                <td>64</td>
                <td>2012/04/09</td>
                <td>$138,575</td>
            </tr>
            <tr>
                <td>Zenaida Frank</td>
                <td>Software Engineer</td>
                <td>New York</td>
                <td>63</td>
                <td>2010/01/04</td>
                <td>$125,250</td>
            </tr>
            <tr>
                <td>Zorita Serrano</td>
                <td>Software Engineer</td>
                <td>San Francisco</td>
                <td>56</td>
                <td>2012/06/01</td>
                <td>$115,000</td>
            </tr>
            <tr>
                <td>Jennifer Acosta</td>
                <td>Junior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>43</td>
                <td>2013/02/01</td>
                <td>$75,650</td>
            </tr>
            <tr>
                <td>Cara Stevens</td>
                <td>Sales Assistant</td>
                <td>New York</td>
                <td>46</td>
                <td>2011/12/06</td>
                <td>$145,600</td>
            </tr>
            <tr>
                <td>Hermione Butler</td>
                <td>Regional Director</td>
                <td>London</td>
                <td>47</td>
                <td>2011/03/21</td>
                <td>$356,250</td>
            </tr>
            <tr>
                <td>Lael Greer</td>
                <td>Systems Administrator</td>
                <td>London</td>
                <td>21</td>
                <td>2009/02/27</td>
                <td>$103,500</td>
            </tr>
            <tr>
                <td>Jonas Alexander</td>
                <td>Developer</td>
                <td>San Francisco</td>
                <td>30</td>
                <td>2010/07/14</td>
                <td>$86,500</td>
            </tr>
            <tr>
                <td>Shad Decker</td>
                <td>Regional Director</td>
                <td>Edinburgh</td>
                <td>51</td>
                <td>2008/11/13</td>
                <td>$183,000</td>
            </tr>
            <tr>
                <td>Michael Bruce</td>
                <td>Javascript Developer</td>
                <td>Singapore</td>
                <td>29</td>
                <td>2011/06/27</td>
                <td>$183,000</td>
            </tr>
            <tr>
                <td>Donna Snider</td>
                <td>Customer Support</td>
                <td>New York</td>
                <td>27</td>
                <td>2011/01/25</td>
                <td>$112,000</td>
            </tr>
        </tbody>
    </table>
	</div>
</div>	
<div class="row">
		<div class="col-md-12">
			<div style="text-align:right;">
				<button type="button" id="btnLimpiar" name="btnLimpiar" class="btn btn-danger">
					Limpiar filtros
				</button> 				
			</div>
			<br>
		</div>
</div>

	<script src="../js/jquery-2.2.1.js"></script>
	<script src="../js/jquery.dataTables.min.js"></script>
	<script src="../js/dataTables.foundation.min.js"></script>	
	<script>	
		$(document).ready(function() {	
					
			var _configuration = 
			{				
				"dom" : '<"top"lf<"toolbar">><"bottom"rtip>',
				"stateSave" : false,
				"language": 
				{
					"lengthMenu": " | _MENU_ Registros por página.",
					"zeroRecords": "No se encontraron resultados.",					
					"info": "Mostrando de _START_ a _END_ de un total de _TOTAL_ registros.",
					"infoEmpty": "No existen registros.",										
					"search": "Buscar:",
					"infoFiltered":"",
					"paginate": 
					{
						"first":      "Primero",
						"last":       "Último",
						"next":       "Siguiente",
						"previous":   "Anterior"
					}
				},	
				"lengthMenu" : [[10, 25, 50, -1], [10, 25, 50, "Todos"]],
				"pageLength" : 10
			};			
			
			$('#tblEjemplo').DataTable(_configuration);		
						
			$('div.dataTables_filter input').attr('placeholder', 'Escribe aquí...');			
			
			$('#tblEjemplo_length').addClass('pull-right');
			$('#tblEjemplo_filter').addClass('pull-right');			
			$('#tblEjemplo_paginate').addClass('pull-right');			
			
			$('#btnLimpiar').on('click', function()
			{				
				$('#tblEjemplo_filter').find('input[type=search]').val('');
				$("#tblEjemplo").DataTable().search('').draw();
			});	
		});		
	</script>	
</body>
</html>

 

Consultas paginadas en MySql.

El consumo de información accediendo a bases de datos es clave para cualquier tipo de aplicación, por lo que es necesario que el consumo de la información se lleve a cabo en el menor tiempo posible y utilizando el menor número de recursos del servidor; esto con el fin de mejorar el tiempo de respuesta de las aplicaciones.

Es un hecho que muchas veces los desarrolles se enfrentan al reto de mostrar una consulta de información en un grid, el cual en todos los casos debe de tener elementos gráficos de paginación para que el usuario pueda navegar entre el conjunto de datos. En el escenario que se plantea, generalmente los desarrolladores hacen uso de malas prácticas, y a que voy con esto, a que por facilidad obtienen todo el conjunto de información de la base de datos y en capas superiores de la arquitectura de su aplicación empiezan a paginarla para cargarla en el grid para cada una de las paginas, lo que realmente es un consumo incorrecto de la información, ya que la manera más correcta de llevar a cabo el proceso es solicitar solamente aquellos datos que necesitas mostrar al usuario para la página que desea visualizar del grid, logrando así un óptimo tiempo de respuesta en la aplicación tanto en la visualización y paginación de la información en el grid.

A continuación te presento un ejemplo de cómo crear consultas paginadas desde base de datos, el cual puedes tomar como referencia para crear las consultas de datos de tus proyectos.

Creación de Base de Datos de Prueba:

create database BD_Pruebas;

use BD_Pruebas;

create table Persona
(
personaId int not null auto_increment primary key,
nombre varchar(20) not null,
apellidoPaterno varchar(20) not null,
apellidoMaterno varchar(20) not null,
genero varchar(9) not null,
fechaNacimiento datetime not null,
fechaCreacion datetime not null,
activo tinyint(1) not null
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Creación de Insumos:

INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Armando','Rosales','Maza','Masculino','1988-10-12',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Luis','Perez','Hernandez','Masculino','1980-10-01',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Andrea','Sanchez','Gonzalez','Femenino','1988-01-20',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Monica','Lopez','Jimenez','Femenino','1970-09-15',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Hugo','Morales','Quiroz','Masculino','1985-04-18',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('David','Gonzalez','Rodriguez','Masculino','2000-01-29',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Karime','Lozano','Herrera','Femenino','1995-11-15',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Mario','Fernandez','Gutierrez','Masculino','2001-04-17',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Liliana','Duran','Roano','Femenino','1984-09-25',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Francisco','Zuñiga','Zapata','Masculino','1990-01-06',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Diego','Martinez','Roman','Masculino','1986-02-14',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Jimena','Ortiz','Morales','Femenino','1993-12-24',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Tania','Ordaz','Montiel','Femenino','1987-07-05',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Ana','Arriaga','Linares','Femenino','1996-10-16',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Alejandra','Tamez','Vazquez','Femenino','2002-05-28',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Francisco','Mota','Marin','Masculino','1978-06-29',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Martin','Lutero','Lara','Masculino','1980-09-25',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Kendra','Muñiz','Mora','Femenino','1976-01-20',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Cristian','Beltran','Solis','Masculino','1987-11-15',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Natalia','Montes','Herrera','Femenino','1987-03-16',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Kenia','Martinez','Rodriguez','Femenino','1994-04-27',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Ricardo','Maldonado','Soto','Masculino','1998-11-02',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Susana','Perez','Lopez','Femenino','1992-05-20',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Ingrid','Solano','Jimenez','Femenino','1998-09-28',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Gerardo','Montiel','Oronzor','Masculino','1970-01-09',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Gabriel','Robles','Martinez','Masculino','1978-05-24',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Fany','Roman','Nuñez','Femenino','1990-08-09',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Jamil','Morales','Santos','Masculino','1996-12-23',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Tamara','Sanchez','Ramirez','Femenino','1970-01-02',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Bernardo','Lopez','Gonzalez','Masculino','1995-10-10',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Jaime','Jimenez','Sandria','Masculino','1980-12-10',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Mabel','Fernandez','Martinez','Femenino','1997-05-12',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Jacobo','Montes','Ortiz','Masculino','1978-06-22',now(),1);
INSERT INTO `bd_pruebas`.`persona`(`nombre`,`apellidoPaterno`,`apellidoMaterno`,`genero`,`fechaNacimiento`,`fechaCreacion`,`activo`) 
VALUES ('Maria','Duran','Zamora','Femenino','1999-09-07',now(),1);

Procedimiento almacenado para encapsular la función de paginación y su respectiva invocación.

delimiter //
create procedure ObtenDatosPaginados(in numeroPagina int, in tamanioPagina int)
begin
	if (numeroPagina < 1 or tamanioPagina < 1) then
		select *, 0 as 'TotalRegistros', 0 as 'TotalPaginas' 
        from Persona
		limit 0,0;
	else
		begin
			declare _totalRegistros int default (select count(*) from Persona);                        
            declare _totalPaginas int default 0;
            declare _offset int default 0;            
                        		
            if ((_totalRegistros % tamanioPagina) = 0) then
				set _totalPaginas = _totalRegistros / tamanioPagina;                
			else
				set _totalPaginas= floor((_totalRegistros / tamanioPagina) + 1);                
            end if;
			
            set _offset = tamanioPagina * (numeroPagina - 1);                      
						
			select *, _totalRegistros as 'TotalRegistros', _totalPaginas as 'TotalPaginas'
			from Persona			
            order by nombre
            limit _offset, tamanioPagina;
        end;
	end if;
end
//
delimiter ;

call ObtenDatosPaginados(1,10);

PaginacionMySql

Código para abrir aplicación de WhatsApp desde Android Studio.

El siguiente fragmento de código te ayudara a invocar la App de WhatsApp desde una Activity con el fin de poder enviar un whats a un número de teléfono en específico.

private void AbrirWhatsApp(String telefono)
{
	Intent _intencion = new Intent("android.intent.action.MAIN");
	_intencion.setComponent(new ComponentName("com.whatsapp","com.whatsapp.Conversation"));
    _intencion.putExtra("jid", PhoneNumberUtils.stripSeparators("521" + telefono)+"@s.whatsapp.net");
    startActivity(_intencion);
}

 

Contar vocales con JQuery.

En el presente post te presento la forma de contar las vocales de un párrafo utilizando JQuery.

ConteoVocales.html

<!DOCTYPE html>
<html>
<head>
	<meta charset='UTF-8'/>
	<title>Conteo de vocales</title>
</head>
<body>
	<label for='instrucciones'>Ingresa un párrafo:</label>
	</p>
	<textarea id='txtEntrada' rows='5' cols='50' style='resize:none;'></textarea>
	</p>
	<button type="button" id="btnContarVocales" name="btnContarVocales">
		Contar vocales
	</button>  
	<script src="../scripts/jquery-3.1.1.min.js"></script>
	<script type='text/javascript'>   
        $(document).ready(function()
        {         
            //Se asocia el evento click al Button [btnContarVocales].
            $('#btnContarVocales').on('click', function()
            {   
				/*
				Se obtiene el texto ingresado, se le quitan los espacios en blanco,
				se convierte a minusculas y se encapsula en la variable '_parrafo'.				
				*/
				var _parrafo= ($('#txtEntrada').val()).replace(/ /gi, '').toLowerCase();
            
				/*
				Se crea el arreglo '_vocales' con los caracteres que vamos a contabilizar.
				*/
                var _vocales = [ 'a', 'e', 'i', 'o', 'u'];
				
				/*
				Se crean e inicializan variables para encapsular el conteo de cada una 
				de las vocales.
				*/
				var _contadorA= 0;
				var _contadorE= 0;
				var _contadorI= 0;
				var _contadorO= 0;
				var _contadorU= 0;				

				/*
				Se recorre el texto encapsulado en la variable '_parrafo' y de acuerdo al
				caracter recorrido se va aumentando el contador relacionado con cada una 
				de las vocales segun corresponda.
				*/
				for(var i=0; i < _parrafo.length; i++)
				{
					switch(_parrafo[i])
					{
						case 'a':
						{
							_contadorA++;
							break;							
						}
						case 'e':
						{
							_contadorE++;
							break;							
						}
						case 'i':
						{
							_contadorI++;
							break;							
						}
						case 'o':
						{
							_contadorO++;
							break;							
						}
						case 'u':
						{
							_contadorU++;
							break;							
						}						
					}					
				}
				
				/*
				Se encapsula en la variable '_resultado' un mensaje con las vocales 
				y sus respectivos contadores.
				*/
				var _resultado= 'El resultado del conteo es el siguiente:\n\n' + '[a]: ' +  _contadorA + '\n[e]: ' + _contadorE + '\n[i]: ' + _contadorI + '\n[o]: ' + _contadorO + '\n[u]: ' + _contadorU;
				
				/*
				Se despliega en pantalla el resultado encapsulado en la variable '_resultado'
				*/
				alert(_resultado);
            });     
        });
    </script>
</body>
</html>

En el siguiente enlace podrás descargar el código fuente completo:

ConteoVocales.rar (29,97 kb)