Jump to content

susodicho

Warianos
  • Posts

    128
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by susodicho

  1. :mmm: Parece que estás ocupando la lógica del formato de fecha al revés, porque se supone que fechaNacimiento usa el formato de fecha chileno, pero tú lo estás interpretando como YYYY-MM-DD (que es el que usa la base de datos). El otro problema es que no sé qué hace el constructor de la clase Funcionario con la fecha, no tengo idea si hace algún tipo de conversión o no . Si el campo de texto jTextFieldNacimiento usa el formato de fecha YYYY-MM-DD, entonces estás haciendo mal las cosas, no hay que pedirles a los usuarios que usen un formato de fecha al que no están acostumbrados sólo porque el motor de base de datos usa ese formato :no: . Así que, si el campo de texto con la fecha de nacimiento está en el formato correcto (DD-MM-YYYY, el formato de fecha que se usa en Chile), entonces puedes ver si te sirve esta función que convierte una fecha en formato chileno a una en formato YYYY-MM-DD (el que usa la base de datos): public static String parseDMYtoYMD(String fecha) throws Exception { SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy"); SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy"); Calendar c = new GregorianCalendar(); String s; sdf1.setLenient(false); sdf2.setLenient(false); c.setTime(fecha.indexOf('-') >= 0 ? sdf1.parse(fecha) : sdf2.parse(fecha)); s = String.format("%1$04d-%2$02d-%3$02d", c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH)); return s; }Ojo, la función devuelve una cadena (no una variable de tipo Date), así que tendrías que modificar el constructor de la clase Funcionario. Además, la función usa la clase Calendar, ya no deberías usar la clase Date. No me manejo mucho en Java, pero supongo que debe haber una mejor manera de expresar una fecha como cadena, sin tener que usar el poco elegante String.format. :huasonto:
  2. Creo que la librería C++ más común para ese tipo de cosas es Asio (incluso puedes encontrar código de ejemplo para un chat simple). La otra opción sería hacer una aplicación Qt, que incluye un módulo QtNetwork con clases para todo lo relacionado con sockets y protocolos de red (TCP, SSL/TLS, etc.). :huasonto:
  3. :mmm: Para empezar, parece que estás usando convenciones de Java en una aplicación C# :huasonto: , o sea, el método getRespuesta y el getALT_CO tienen pinta de propiedades (sí, en C# existen las propiedades), así que deberías cambiar todos esos métodos del tipo getAlgo y setAlgo por propiedades. Segundo, no veo que sea necesario el switch. Intenta usar la propiedad Value2 para cambiar el valor de una celda. Ejemplo: xlWorkSheet.Cells[2,3].Value2 = listita[x].getALT_CO().ToString(); Por último, debiste haber subido 2 capturas, una con la hoja de cálculo que obtienes cuando ejecutas tu programa y otra que muestre los datos como tú esperas que aparezcan. No tengo tanta imaginación como para imaginarme esas cosas basándome sólo en un fragmento de código como el que subiste. :huasonto:
  4. :mmm: ¿Qué versión del Dev-C++ instalaste? En todo caso, Dev-C++ no es un compilador, es un IDE y viene con alguna variante del compilador MinGW. :tecito: Si instalaste una versión antigua (anterior a la aparición de Win8), entonces sería normal que tenga algún tipo de problema, eso también ha pasado con Win7 y Vista. ¿Te fijaste qué versión del MinGW es la que trae? Por si acaso, a mí nunca me ha gustado mucho el Dev-C++, siempre ha sido inestable, incluso las versiones más recientes tienen problemas. Mejor instala el Code::Blocks (también es gratuito), tiene la opción de importar proyectos del Dev-C++. Además, ya sea que uses el Code::Blocks o el Dev-C++, tienes la posibilidad de instalar un compilador más actualizado (ten en cuenta que los 2 vienen con una versión más o menos antigua del MinGW, la que estaba disponible al momento del lanzamiento). :huasonto:
  5. Sí, ahora sólo tienes que revisar qué devuelve la función login y listo. Recuerda cambiar la declaración de los parámetros (los que quieres pasar por referencia). Ojo, no se pueden pasar propiedades por referencia ;) :huasonto:
  6. Cuando quieres validar a un usuario, revisas que el usuario exista y que la contraseña sea la correcta; por lo tanto, al hacer la consulta, ésta te puede devolver una fila o ninguna. Es decir, si el usuario no existe o la contraseña es incorrecta, no te devuelve ninguna fila; en caso contrario (el usuario existe y la contraseña es correcta) te devuelve una sola fila. Así que no hay necesidad de usar un while para recorrer todas las filas devueltas por la consulta, ya que como mucho será una fila.Como tu función login valida el inicio de sesión, sería lógico que sea de tipo booleana (devuelve verdadero si el usuario existe y la contraseña es correcta).La función login no está "devolviendo" el nombre de usuario ni la contraseña porque los 3 parámetros los estás pasando por valor, tienes que pasarlos por referencia.Así que la función login quedaría más o menos así: public bool login(string user, string pass, Label mensaje) { bool pulento = false; // etc. try { // etc. if (reader.HasRows) { // etc. pulento = true; } } catch (Exception e) { // etc. } finally { // etc. } return pulento; } :huasonto:
  7. :mmm: La consulta del procedimiento almacenado sólo devuelve el campo codUser (SELECT codUser FROM usuarios WHERE...), así que sólo puedes acceder a ese campo con el SqlDataReader. Desde comienzos de este milenio (cuando alguien descubrió que existen otros idiomas además del inglés) se prefiere guardar las cadenas como Unicode, así que sería bueno que cambiaras los VARCHAR por NVARCHAR para que tu aplicación se vea más moderna ;) . Un detalle, el prefijo usado normalmente para denotar clave primaria es PK, así que creo que deberías cambiar la declaración CONSTRAINT FK_USUARIOS PRIMARY KEY(codUser) por CONSTRAINT PK_USUARIOS PRIMARY KEY(codUser) :huasonto:
  8. [hide]Te conviene expresar las fechas como enteros y con el formato MMDD, así es fácil comparar rangos de fechas. $FECHA = $_POST['fecha']; $fecha = explode("/", $FECHA); $mes_dia = $fecha[1] * 100 + $fecha[0]; // Esta es la fórmula que necesitas para expresar la fecha como entero echo "MES/DIA = ".$mes_dia; O sea, la fecha de la navidad se expresaría como 1225 y el tercer día del año sería 103.Por ejemplo, si quieres saber si una fecha corresponde al segundo trimestre del año, haces algo como esto: if ($mes_dia >= 401 && $mes_dia <= 630) { echo "La fecha pertenece al segundo trimestre del año."; } Ahora, para saber a qué estación del año corresponde una fecha, usas la misma idea de arriba, o sea: ($mes_dia >= inicio && $mes_dia <= fin)excepto para el invierno, que sería: ($mes_dia >= inicio || $mes_dia <= fin)hay que cambiar el && por un ||, ya que el invierno comienza a fines de año y termina a comienzos del próximo.[/hide] :huasonto:
  9. <_< mysql_fetch_array devuelve un arreglo para cada fila devuelta por la consulta...¿en qué parte estás recorriendo todas esas filas? :huasonto:
  10. :mmm: En el formulario, el campo de texto se llama rut_coordinador, pero en el archivo crearcursodb.php estás tratando de acceder a coordinador_rut. No sé qué será lo que te complica para llenar la lista, por lo que entiendo, sólo tendrías que hacer un SELECT que te devuelva todas las filas de la tabla docente . Sobre la forma en que usas el campo obligatorio: No me parece buena idea usar una lista desplegable para seleccionar si un curso es obligatorio o no. Me parece más lógico usar una casilla de verificación (también conocida como checkbox). <label><input type="checkbox" name="obligatorio" />Esto es obligatorio</label>Deberías usar textos descriptivos en la interfaz de usuario, "s" y "n" no los encuentro muy claros. Me da la impresión que trataste de que los valores mostrados en la interfaz de usuario calzaran con los que usas internamente en tu base de datos (ya que el campo obligatorio es de tipo CHAR y toma valores "s" y "n") y así lograr que el INSERT te saliera más fácil ;) . Creo que mejor declaras este campo como BOOL, lo encuentro más lógico. :huasonto:
  11. :mmm: No estoy seguro qué entiendes tú por tamaño de la base de datos o de dónde sacas esa información, ¿el PhpMyAdmin muestra esa información?, ¿por qué esperas que el archivo SQL resultante tenga un determinado tamaño? Si tú esperas un determinado tamaño para el archivo SQL, entonces podrías intentar agregando la opción -c al mysqldump y ver si con eso obtienes el tamaño que tú esperas. En todo caso, en el PC que te da "problemas" ¿has revisado o probado el archivo SQL resultante? ¿tiene algo malo? ¿faltan líneas? ¿has revisado los otros archivos SQL? Así que podrías hacer lo siguiente para aclarar las cosas: Sube una captura de pantalla en donde aparezca el tamaño de la base de datos (tú dices que esperas como 40 MB, así que en alguna parte debe aparecer eso)Responde lo siguiente: ¿Hay algún problema con el archivo SQL de menor tamaño? ¿el archivo SQL tiene problemas para generar la base de datos correctamente? :huasonto:
  12. Básicamente, ahora película sería información sobre ésta (fecha de estreno, director, género, etc.), y copia es algo tangible (lo que realmente se le entrega al cliente). En otras palabras, las copias pueden extraviarse o deteriorarse, mientras que una película es una descripción de una copia. :huasonto:
  13. :mmm: Aers...por lo que veo, vas a tener que pensar en copias (no en películas), o sea, hasta ahora tu modelo está pensado de esta forma: Un cliente arrienda películaspero en realidad deberías verlo así:Una película tiene una o varias copiasUn cliente arrienda una o varias copiasAsí que parece que no vas a poder hacerle el quite a la entidad copia ;) . Entonces, vas a tener una tabla copias (o puede ser en singular), y ésta va a tener un campo que indica si está o no arrendada y quizás un campo que indique el formato (DVD, Blu-ray u otro). Con este esquema, me imagino que para poder ver si una película está disponible, vas a tener que pensar que ahora tienes contar la cantidad de copias que no están arrendadas:Buscas el título de la película en la tabla pelicula y obtienes el idpeliculaEn la tabla copias, cuentas la cantidad de filas con ese idpelicula que no estén arrendadas, y así sabes si esa película está disponible para arrendarla :huasonto:
  14. :mmm: Creo que la parte que te complica es que una película puede tener varias copias, o sea, si vas a la tienda donde arriendan películas y preguntas si tienen una determinada película, quizás te respondan que sí la tienen, pero que no le quedan copias para arrendar (todas están pedidas). Veo que en la tabla detalle_arr tienes un campo cantidad, pero no tengo claro qué significado le das tú. Supongo que el total de copias y copias disponibles podrían ser campos de la tabla pelicula, pero no estoy seguro De hecho, creo que se podría complicar más el modelo si consideras el formato, es decir, puedes tener varias copias de una película y quizás algunas copias están en DVD y otras en Blu-ray. :huasonto:
  15. No, el código PHP que está al comienzo del archivo login.php es para detectar algo que en realidad normalmente no debería ocurrir: ¿qué pasa si alguien ingresa a la página login.php si ya inició sesión?. Si tu sitio está bien hecho, no debería haber forma de que un usuario que inició sesión pueda acceder a la página login.php (en ninguna parte debería haber un enlace para que el usuario llegue a esa página). Así que yo pensé que si un usuario con sesión abierta se las ingenió para llegar a la página login.php es porque quizás quiere cerrar la sesión, y por eso lleva a la página cerrar.php. Esto puede ocurrir si un usuario tiene varias pestañas abiertas y hace rato inició sesión en una de ellas, después de un tiempo y con un montón de pestañas abiertas, decide entrar a la página y para eso usa el enlace a la página login.php que tiene almacenado en sus favoritos (marcadores o bookmarks) en una nueva pestaña. En este escenario, no parece buena idea cerrarle la sesión al usuario, ya que no se acordaba que ya había iniciado sesión en otra pestaña. Así que ahora creo sería mejor llevarlo a la página menu.php si ya tiene una sesión abierta, ya que esa es la pantalla que normalmente se muestra al iniciar sesión.Así que mejor cambia eso y aprovechas de poner algún comentario explicativo en esa parte del código PHP (el del comienzo del archivo login.php). De forma similar, también deberías revisar qué pasa cuando alguien se las ingenia para ingresar a la página verificar.php (normalmente nadie debería saber siquiera de la existencia de esa página), pero algún curioso podría ver el código fuente de la página login.php y darse cuenta que lleva a la página verificar.php. Fíjate qué pasa si se ingresa a la página verificar.php con y sin sesión abierta. ;) Tal como está hecho, resulta que el mensaje es persistente, o sea, aunque se recargue la página, siempre muestra el último mensaje de error (sin necesidad de haber pasado por verificar.php). Así que sí tiene una pifia. Nótese que verificar.php sí limpia el mensaje al comienzo (le asigna una cadena vacía) y, por lo tanto, si se inició sesión correctamente, no hay ningún problema. Además creo sería mejor usar otra forma de ver si ocurrió un error o no, así que podrías hacer los siguientes cambios (ojo, estos cambios no arreglan la pifia, sólo hacen que sea un poco más elegante):En login.php cambia esta línea:if(isset($_SESSION['mensaje']) && !empty($_SESSION['mensaje']))...por esta:if(isset($_SESSION['mensaje']))En verificar.php cambia esta línea:$_SESSION['mensaje'] = "";...por esta:unset($_SESSION['mensaje']);Insisto, esto no arregla el problema del mensaje de error persistente. Para arreglarlo, simplemente hay que destruir la variable que contiene el mensaje de error justo después de mostrarlo, o sea, en el archivo login.php, agrega la línea unset($_SESSION['mensaje']); después de la línea que muestra el mensaje. :huasonto:
  16. :mmm: Escribiste mal esta línea: $_SESSION['username'] == $_POST['login'];...se supone que debería ser una asignación. Las páginas quedarían más o menos así: [hide] login.php <?php session_start(); if(isset($_SESSION['username'])) { header("Location: cerrar.php"); exit; } ?> <!DOCTYPE html> <head> <title>Iniciar sesión</title> </head> <body> <form action="validar.php" method="post"> <p>Usuario: <input type="text" name="login"></p> <p>Contraseña: <input type="password" name="password"></p> <input type="submit" name="submit" value="Entrar"> </form> <?php if(isset($_SESSION['mensaje']) && !empty($_SESSION['mensaje'])) { echo $_SESSION['mensaje']; } ?> </body> </html>Obviamente, tú puedes remplazar el formulario de ingreso por el que ya tienes hecho. validar.php <?php session_start(); include("conexion.php"); $_SESSION['mensaje'] = ""; if(isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['password']) && !empty($_POST['password'])){ $con=mysql_connect($host,$user,$pw) or die("Problemas al conectar al servidor."); mysql_select_db($db,$con) or die("Problemas al conectar al servidor."); $consulta=mysql_query("SELECT login, password FROM empleado WHERE login='$_POST[login]'",$con) or die("Problemas al conectar a la base de datos."); $sesion=mysql_fetch_array($consulta); if($_POST['password'] == $sesion['password']) { $_SESSION['username'] = $_POST['login']; header("Location: menu.php"); exit; } else { $_SESSION['mensaje'] = "Usuario o contraseña incorrectos."; } } else { $_SESSION['mensaje'] = "Debe especificar usuario y contraseña."; } header("Location: login.php"); ?>Le modifiqué los mensajes de error y la forma en que se muestran. menu.php <?php session_start(); if(!isset($_SESSION['username'])) { header("Location: login.php"); exit; } ?> <!DOCTYPE html> <head> <title>Menú</title> </head> <body> <?php echo "<h3>Bienvenido ".$_SESSION['username']."</h3>"; ?> <center><h1>Aquí debería haber un menú</h1></center> <p> <center><a href="cerrar.php">Cerrar sesión</a></center> </p> </body> </html>El código PHP inicial (las primeras 8 líneas) deberían ir en todas las otras páginas (ingresar.php, opbuscar.php, etc.), excepto en cerrar.php. La idea es que el resto de las páginas empiecen con las primeras 8 líneas en PHP que sirven para verificar si el usuario inició sesión, después viene el código HTML (obviamente dicho código HTML puede contener código PHP incrustado). cerrar.php Sólo debe tener el código que destruye las variables de sesión y después vuelve a la página login.php. [/hide] :huasonto:
  17. :mmm: Tienes un if que no hace nada... if(isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['password']) && !empty($_POST['password']) );Generalmente la forma de ir a una página disponible para usuarios que han iniciado sesión es algo así (es una idea): <? session_start(); if(!isset($_SESSION['username'])){ echo "<h2>No ha iniciado sesión</h2>"; } else{ ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Ponle algún título</title> </head> <body style="color: #C5393B; background-color: #B8AEAE; text-align: center;"> <form> <h3>Menú</h3><br> <button type="submit" name="Ingresar" formaction="ingresar.php">Ingresar</button><br><br> <button type="submit" name="Buscar" formaction="opbuscar.php">Buscar</button><br><br> <button type="submit" name="Eliminar" formaction="Eliminar.php">Eliminar</button> </form><br> <a href="cerrar.php">Cerrar sesión.</a> </body> </html> <?php } ?> aunque lo más común es usar algo como esto: <? session_start(); if(!isset($_SESSION['username'])){ echo "<h2>No ha iniciado sesión</h2>"; } else{ header("Location: pagina.php"); } ?>o sea, usas header("Location: pagina_a_la_que_quieres_ir.php"); para abrir la página correspondiente. :huasonto:
  18. :mmm: Ni siquiera estoy muy convencido que sea necesario tener esa información en 2 tablas... De todas formas, creo que puedes usar subconsultas. En la subconsulta seleccionas el nombre basado en el id del usuario, y el resultado de esa subconsulta lo usas para la condición del UPDATE. Por ejemplo, para aumentar en 100 puntos el puntaje del usuario cuya id es 345, sería algo como esto (no tengo idea si funciona): UPDATE puntajes SET puntaje = puntaje + 100 WHERE nombre=(SELECT nombre FROM usuarios WHERE id=345); :huasonto:
  19. Para saber por qué no te funciona esa consulta (no muestra nada), deberías probarla en el Workbench o en la línea de comandos de MySQL. Ese tipo de consulta da resultados de este tipo: Si te fijas, devuelve una tabla con una fila y una columna, y el nombre de esa columna es MAX(nombre_campo). O sea, el resultado devuelto por la llamada a mysql_fetch_array no va a contener ningún campo de la tabla. Para que el resultado de la consulta contenga los campos de la tabla, tienes que ordenar la tabla por cantidad de mayor a menor y hacer que sólo muestre la primera fila. La consulta quedaría así: SELECT * FROM repuesto ORDER BY cantidad DESC LIMIT 1Ojo, esta consulta no es exactamente la que necesitas, ya que tú quieres mostrar la cantidad (que está en la tabla repuesto) y también el nombre y precio (que están en la tabla producto); así que tienes que modificar la consulta de arriba. Básicamente tienes que especificar los nombres de los campos que a ti te interesan (y las tablas correspondientes) y agregar un WHERE. Además, ten en cuenta que esta consulta te devuelve como máximo una fila, así que no es necesario usar un while en el código PHP. :huasonto:
  20. :mmm: Ahora que subiste el modelo de tu base de datos, veo que sigartel es el nombre la la base de datos, así que el INSERT está malo, tienes que poner el nombre de la tabla en donde vas a insertar los datos. Además estás insertando todos los datos como si fuesen cadenas, pero precio, cantidad y peso son números, no cadenas. P.D.: Sobre las imágenes, en esa página tienes que cambiar la opción Redimension a Don't resize para evitar que te cambie el tamaño de las imágenes. :huasonto:
  21. No sacas nada con intentar insertar datos a la base de datos si el modelo que hiciste está mal. Así que primero tienes que volver a crear la base de datos, pero ahora tienes que hacerlo bien. Primero, tienes que tener claro que una clave foránea es una referencia a una clave única definida en otra tabla. Las claves primarias son implícitamente únicas, así que generalmente, una clave foránea hace referencia a una clave primaria de otra tabla. Segundo, una clave foránea debe ser del mismo tipo que la clave a la que hace referencia. :mmm: Así que sospecho que cuando creaste las tablas en el Workbench, dejaste el tipo de dato por defecto, que es VARCHAR, y por eso no pudiste crear una referencia a la clave primaria de la otra tabla, ya que por defecto, las claves primarias son INT. Aquí hay un ejemplo simple de cómo crear una clave foránea en el Workbench usando 2 tablas sencillas (OJO: esta es una versión antigua del Workbench, así que quizás se vea distinto a la versión que tú usas): Crear una tabla persona: Crear una tabla cliente. Como los clientes son personas, los datos personales del cliente se almacenan fuera de la tabla cliente, en este caso, en la tabla persona. El campo ref_persona será la clave foránea; lo llamé así ya que las claves foráneas son referencias a otras tablas. Obviamente, tú puedes usar alguna otra nomenclatura para las claves foráneas. En la tabla cliente, vas a la pestaña Foreign Keys y creas una nueva. El nombre que se le asigna (Foreign Key Name) generalmente no lo vas a ocupar, pero se le suele asignar algún nombre que describa la relación entre el campo y la tabla a la que hace referencia. Yo le puse el nombre FKpersona para dar a entender que es una clave que hace referencia a la tabla persona, pero otras personas prefieren ponerle nombres como FK_cliente_persona o similares. Insisto, ese nombre quizás nunca lo uses, pero de todas formas se le suele dar algún nombre descriptivo (de hecho, es el nombre que aparece en la CONSTRAINT cuando creas el archivo SQL). En Referenced Table seleccionas la tabla personaSeleccionas el campo que vas a usar como clave foránea, en este caso, ref_persona y seleccionas el campo idpersona (que es la clave primaria de la tabla persona). Como ref_persona e idpersona son de tipo INT, entonces son compatibles y puedes asociar el campo cliente.ref_persona con persona.idpersona. Una vez que creas el modelo, deberías ver algo como esto: NOTA: Generalmente a las tablas del ejemplo se las llamaría personas y clientes (plural). Eso es una cuestión de gustos, costumbre o estándar de codificación. Tú veras qué nomenclatura usas para los nombres de las tablas y sus campos. Ahora, en relación al código PHP, la razón por la que te aparece el mensaje "Datos insertados." es porque después de la llamada a la función mysql_query viene una línea que imprime dicho mensaje :huasonto: . Así que no esperes que ocurra otra cosa, si tú misma haces que se imprima el mensaje sin verificar ninguna condición. Por último, estás usando la extensión MySQL (pero no se recomienda seguir usando esa extensión), deberías usar MySQLi, que es la más reciente (y recomendada). :huasonto:
  22. :mmm: No sé si seré muy ingenuo, pero uno de los mejores manuales de referencia de PHP que conozco es la documentación oficial de PHP :huasonto: , contiene explicación de la sintaxis del lenguaje, referencia de funciones, ejemplos, instrucciones de instalación, etc. Todo en un archivo CHM que puedes ver en cualquier versión de Windows. La versión más completa es la versión en inglés con notas de usuarios (contiene código de ejemplo, trucos y recomendaciones de la comunidad de usuarios de PHP). Aquí hay una captura: :huasonto:
  23. En esta página dice cómo generar informes periódicamente de forma automatizada, esos informes los puedes guardar en formato CSV, y después importas el archivo CSV en Excel. No tengo idea qué tan bien funcionará eso porque no tengo ni Excel ni el sistema operativo en cuestión... :huasonto:
  24. :mmm: Parece que se puede, siempre y cuando tengas instalado el Service Pack 1: Esto lo saqué de la pregunta What edition of Windows will I get as part of this free upgrade? que aparece en las preguntas frecuentes :huasonto:
  25. La velocidad está bien, siempre y cuando sepas la diferencia entre bits y bytes, y qué unidades de medida usan los proveedores de internet para sus planes. Los proveedores de internet, usan la palabra mega (a secas) para referirse a megabits por segundo, esos megabits son "binarios", o sea, 1 megabit es igual a 1 x 1024 x 1024 bits. Ahora, esos bits tienes que pasarlos a bytes, porque esa es la unidad de medida que se usa normalmente para expresar la velocidad de descarga. Así que 2 megas de subida son 2 x 1024 x 1024 bits por segundo (2.097.152 bits por segundo), para pasarlos a bytes, los divides por 8, o sea: 2.097.152 bits son 262.144 bytes262.144 bytes son 256 KB (256 kilobytes)Así que estaría bien la velocidad de subida que alcanzas actualmente (aproximadamente 250 KB/s). De la misma forma, 40 megas significa que puedes descargar (aproximadamente) a 5 MB/s (megabytes por segundo). Dicho de otra forma: 40 megas = 40 Mbps = 5 MBps = 5 MB/s2 megas = 2 Mbps = 256 KBps = 256 KB/sOjo con las mayúsculas y minúsculas, B = byte y b = bit. :huasonto:
×
×
  • Create New...