¿Como realizar conexión de una programa de escritorio a una BD SQL alojada en otra PC dentro de la RED?

Tengo una gran incertidumbre sobre como lograr que un programa de escritorio que desarrolle pueda conectarse a una base de datos sql.

En mi PC tengo creada una base de datos en SQL 2017 que es alimentada a través del sistema de escritorio que desarrolle con C#.

Lo que quiero hacer es instalar ese sistema en dos computadoras mas y que mi equipo funcione como servidor, es decir que el sistema una vez instalado en otros equipos puedan acceder de alguna forma a la BD pero no he encontrado manera para hacerlo.

No se si deba realizar por ejemplo algún cambio a mi cadena de conexión

SqlConnection con = new SqlConnection("server=LG-K40;database=catalogos;Trusted_Connection=True;") 

O si debo hacer algunas configuraciones a mi equipo o a los que funcionaran como Clientes

Mostrar datos de otra tabla relacionada con MySQL, Java web JSP

Quiero mostrar un dato en mi pagina web que se encuentra en otra tabla, por ejemplo, tengo mi base de datos relacionada de esta forma: introducir la descripción de la imagen aquí

donde mi llave foranea en mi tabla usuario es el idPerfil de la tabla perfil, por lo cual mis tablas en MySQL, ya con datos registrados se ven de esta forma: TABLA USUARIO

introducir la descripción de la imagen aquí

y mi TABLA PERFIL

introducir la descripción de la imagen aquí

lo que quiero saber es como podre hacerle para que en mi sitio web aparezca el nombrePerfil de acuerdo con la relacion, en lugar de que muestre el idPerfil 1 muestre el nombrePerfil ADMINISTRADOR lo mismo con el idPerfil 2 muestre EMPLEADO y no el idPerfil

introducir la descripción de la imagen aquí

Este es mi codigo donde mando a llamar los datos en la tabla

<c:forEach var="dato" items="$  {lista}">                                 <tr>                                     <td>$  {dato.idUsuario}</td>                                     <td>$  {dato.claveUsuario}</td>                                     <td>$  {dato.nombre}</td>                                     <td>$  {dato.apellido}</td>                                     <td>$  {dato.email}</td>                                     <td>$  {dato.contrasena}</td>                                     <td>$  {dato.idPerfil}</td>                                     <td>                                         <a href="editar.htm?id=$  {dato.idUsuario}" class="btn btn-warning">Editar</a>                                         <a href="delete.htm?id=$  {dato.idUsuario}" class="btn btn-danger">Eliminar</a>                                     </td>                                 </tr>                             </c:forEach>

faltaría agregar el campo nombrePerfil a mi tabla usuario para que lo muestre Cualquier ayuda se los agradecería

¿Cómo poner una condición en HTML para coger una línea de script u otra?

me encuentro desarrollando una aplicación híbrida, en JavaScript, HTML y CSS. He utilizado además cordova para lanzar un apk. Básicamente el index de cordova carga el index.html del cliente web, pero este index del cliente web debe cargar unos u otros en función de si se lanza en Android o un escritorio. Adjunto la cabecera del index.html del cliente web y sigo explicando.

<html>  <head>   <meta charset="utf-8" />   <title>Tecnología</title>   <meta name="viewport" content="width=device-width, initial-scale=1">    <script src="cliente/lib/pixi.js"></script>   <script src="cliente/lib/traviso.dev.js"></script>   <script src="cliente/src/main-traviso.js"></script>     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>   <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">    <link href="cliente/lib/jquery.toast.min.css" rel="stylesheet" type="text/css">      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>   <script src="cliente/lib/jquery.cookie.js"></script>   <script src="cliente/lib/underscore-min.js"></script>   <script src="cliente/lib/pagination.js"></script>    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css">    <link rel="stylesheet" href="cliente/src/main.css">   <link rel="stylesheet" href="cliente/src/sidebar-themes.css">     <link rel="stylesheet" href="cliente/src/estilos.css">   <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>   <script src="cliente/src/cliente.js"></script>   <script src="cliente/src/ini.js"></script>    <script src="cliente/src/control.js"></script>    <script src="cliente/src/pantalla-ejer.js"></script>    <script src="cliente/src/com.js"></script>        <!--<script src="cliente/lib/cordova.js"></script>   <script src="cliente/lib/cordova_plugins.js"></script>-->   <!-- Sentencia para conocer si es Android o no -->   <script>    window.mobileAndTabletcheck = function() {    var check = false;    (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);    return check;    };   </script>   <script>    if (!window.mobileAndTabletcheck()){     document.write('<!--')    }   </script>      <script src="cliente/lib/cordova.js"></script>   <script src="cliente/lib/cordova_plugins.js"></script>   <script src="cliente/src/index.js"></script>   <script>    if (!window.mobileAndTabletcheck()){     document.write('-->')    }    </script>  </head> 

Los archivos que debo de cargar en el momento en que se lanza desde un cliente Android son cordova.js, cordova_plugins.js e index.js. La forma en la que está actualmente es controlada con el if (!window.mobileAndTabletcheck()). El problema llega a la hora de recargar varias veces la página (en el escritorio del navegador), carga los archivos del cliente android, cuando sólo debería de hacerlo en ese preciso cliente. Mi pregunta, es si existe otra forma de realizar la carga de <script>de forma condicional en base a si se lanza desde un android o no. Gracias de antemano.

MySQL: Obtener tabla con intervalos 30minutales a partir de otra con fechas

Tengo una tabla que consta de tres campos fecha con formato YYYY-MM-DD HH-MM-SS: in, out y near. Si existe in también ha de existir out, y ambas dos pueden ir acompañadas o no de near; near puede existir por sí sola. No cabe la posibilidad de que las tres sean NULL; por ejemplo:

id in_time             out_time            near_time 1  2019-10-02 10:46:31 2019-10-02 12:34:43 2019-10-02 09:51:57 2  NULL                NULL                2019-10-02 11:51:08 3  2019-10-02 12:02:40 2019-10-02 12:08:56 NULL 

Y necesito convertirla en una tabla que para intervalos diarios de media hora cuente el número de in, out y near; tal que así:

id interval            qt_in qt_out qt_near 1  2019-10-02 08:30:00 1     0      2  2  2019-10-02 09:00:00 1     1      5 3  2019-10-02 09:30:00 2     0      3 

Es decir, necesito saber la cantidad de entradas, salidas y aproximaciones para cada día en tramos de media hora; es posible que haya registros en cualquier tramo, sea el [00:00 – 00:30], el [12:00 – 12:30] o el [23:30 – 24:00].

Gracias por adelantado.

Agrupar Registros de una Tabla y unirla con otra Tabla

Tengo la siguiente tabla: introducir la descripción de la imagen aquí

Y deseo agrupar los registros por la columna “EVAC_EVENT_ID” y unirla con 2 tablas mas; la tabla de eventos y bandas.

Realice una agrupación y una unión, pero cuando quiero mostrar los nombres agrupados de las bandas solo me muestra 1 banda.

Logré hacer lo siguiente:

$  KX_evt_actividad = "SELECT *, GROUP_CONCAT(evac_band_id) AS bandas FROM iw_eventos_actividad INNER JOIN iw_eventos ON iw_eventos_actividad.evac_event_id = iw_eventos.evt_id INNER JOIN iw_bandas_tributo ON iw_eventos_actividad.evac_band_id = iw_bandas_tributo.band_id GROUP BY evac_event_id ORDER BY evac_id DESC"; $  KX_show_evt_actividad = mysqli_query($  con,$  KX_evt_actividad); 

Tengo otra duda con javascript

Tengo que hacer un script que me diga cual es el carácter que mas se repite en una palabra y llevo ya 3 horas liado y no doy con la solución, ya es el único ejercicio que me falta y no se como hacerlo

 function ejercicio5(){     var palabra=document.getElementById("box1").value;     palabra=palara.toLowerCase();     var vecesRepetido=0;     var letraRepetida='';     for(var i = 0; i < palabra.length; i++)     {         var re = new RegExp("[^"+ palabra[i] +"]","g");         var repetido=palabra.replace(re, "");          if(repetido.length >= vecesRepetido)         {             vecesRepetido=repetido.length;             letraRepetida=repetido[0];         }     }     document.getElementById("variable").innerHTML=letraRepetida; } 

Cambiar el object key cuando borro otra key del object

Me ha surgido un problema bastante molesto a estas alturas de mi proyecto (casi terminado).

Resulta que sin darme cuenta he guardado un objecto pensando que era un array. Hasta aquí la solución seria “Bueno pues convierte el objeto en array y ya está”. Bien, esa solución no me sirve porque ese objecto interactúa con otras funciones de la app.

La pregunta

¿Puedo hacer que un objeto tenga el comportamiento de un array al borrarle un index? Es decir, pongamos que tengo un array:

let array = [0,1,2,3]; /** Las keys del array serian  0:0  1:1  2:2  3:3                                */ array.splice(2,1); // el array quedaria de esta manera [0,1,3] /** Las keys del array serian  0:0  1:1  2:3   */ 

Ahora tengo un objeto:

let obj = {0:1,1:2,2:3,3:4}; /**  Si le elimno el index 2, el objeto quedaría de esta manera  {0:1,1:2,3:4}   */ 

Lo que quiero es que al eliminar el index 2, el index 3 pase a tener el nombre del index 2 (como el comportamiento del array)

No me importa cambiar el nombre de la key porque son numéricas (0,1,2…) en mi base de datos mongo. Lo único que necesito es que lleven un orden seguido 0,1,2,3… y no 0,2,3,4.

Por si sirve de ayuda el objeto lo guardo en mongo (por si mongo tiene alguna función que cambie los index y yo desconozca)

Si se necesita mas código o explicaciones, pedirlo, intenté que fuera lo mas claro posible.

Python: como puedo sacar mensajes de progreso de un proceso en otra venta distinta a la de Tkinter que llama al proceso

soy novato en Python.

Necesito sacar mensajes de lo que está haciendo el proceso que es llamado desde una función desde la ventana principal en otra ventana Tkinter y no lo consigo. Cuando creo la ventana secundaria el proceso que se corre desde la ventana principal se para.

Por favor me podeis ayudar? muchas gracias.