Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Serapis

#2751
...es el problema del javascript... es como darle la llave de tu casa a cualquiera que dice venir "a hacer no se qué", sin más seguridad... que confiar en su 'palabra'.
#2752
El modo consola viene bien para ir aprendiendo sin entrar en las complicaciones del lenguaje (te deja hacer cosas sin un dominio total), pero más allá de eso, no le veo mucho sentido.

Si quieres porgramar de forma seria deja el modo consola para los principiantes... o para los linuxeros, que parece que les encanta pasarse la vida escibiendo comandos, memorizando parámetros y perdiendo tiempo en probar a ver si... me sale.
#2753
Es una pregunta muy genérica, para abordarla en detalle.
Si no logras mejor rendimiento, a buen seguro es poque traduces línea por línea, a su equivalente en NET, y no debe ser así.

En general recuerdo que para vb2003 y vb2005 había un asistente de importación, que entre otras cosas te daba sugerencias que en efecto servían para optimizarlo. Aunque los mejores resultados se obtienen refactorizando el código para NET y para ello debes haber adquirido cierto dominio de NET, o al menos saber qué tienes a disposición para solucionar qué problemas.

Si tienes cuestiones concretas pregunta...
#2754
Los números aleatorios debes elegirlos entre el rango 1-8... así no te saldrá nunca el 9.

Para evitar que los números salgan repetidos una y otra vez, procede de esta manera:

Primeor se meten en la 'bolsa' los números que se van a rifar:

Array de enteros = funcion RellenarArray(entero cantidad, entero Inicio)
    entero k
    array de enteros Ar

    bucle para k desde Inicio a (Cantidad + Inicio)
        Ar(k) = k 
    fin bucle
fin funcion


Y luego se barajan, así el reparto es aleatorio:


funcion Barajar(Array de enteros Ar, entero Cantidad)
    entero i, j, k

    Bucle para k desde cantidad-1 hasta 1 retrocediendo
        j = random(ente 0 y k)
        i = Ar(j)
        Ar(j) = Ar(k)
        Ar(k) = i
fin bucle



Con cada nueva partida, tu harás dos llamadas, antes que nada:

   Ar = Rellenararray(8, 1)
   Barajar(Ar, 8)
   //....colocar en sus casillas

#2755
Hardware / Re: Especificaciones de PC
26 Enero 2018, 03:44 AM
Cita de: LuisC24 en 25 Enero 2018, 18:29 PM
PC para crear vídeos y páginas webs.
Te sobra...

A ver si va a suceder que llevamos 20 años creando vídeos y páginas web, con los "tostadores" que teníamos años atrás, y ahora no vamos a ser capaz con equipos entre 10 y 100 veces más potentes que aquellos...
#2756
Hablas de 'objetos', 'todos ellos', luego tienes necesidad de una colección. Cada uno tendrá un índice asignado, tanto en la colección como en correspondencia con la interfaz. Y como hay varios y quieres mover uno, estamos hablando de 'uno seleccionado', el 'acutal', luego en tu colección sería conforme mantener una referencia al actual. ...y ese será el que se mueva.

Al hacer click sobre uno lo seleccionas, y :

coleccion de personaje s_Personajes
entero      s_IxActual
personaje s_PjActual


funcion Ventana_click(x,y )
    // dadas unas cordenadas de click, devolver el índice dle personaje. Devolver -1 si no hay personaje
    entero indice = IndicePersonajeEnCordenadas(x,y)

   Si (indice>=0) luego
       Si (indice <> s_IxActual ) luego
            s_PjActual.Grafico.QuitFoco  // el que era actualmente selccionado, pierde el foco
            s_IxActual = indice
            s_PjActual = s_Personajes(s_IxActual) //seleccionar como actual el personaje cuyo índice se ha seleccionado.
            s_PjActual.Grafico.SetFoco  // dibuja bajo él una sombra para indicar que es el seleccionado actualmente (algo visual).
       fin si
   fin si
fin funcion


Al pulsar el teclado, las flechas de dirección moverían el gráfico asociado al personaje... se supone que tienes un sprite y por cada plsación tu decides si cambia un solo frame o varios o según el caso...

funcion teclado_Up(entero key)
   Si (s_IxActual >= 0) luego  // si hay algún personaje seleccionado
       Seleccionar key
           caso KeyUp
               s_PjActual.Grafico.Subir
               pararseleccion // break
           caso KeyDown
               s_PjActual.Grafico.Bajar
               pararseleccion //break
           caso KeyRight
               s_PjActual.Grafico.Avanza // a derecha
               pararseleccion
           caso keyLeft
               s_PjActual.Grafico.Retrocede // a izqierda
               pararseleccion
           caso keyHome
               s_PjActual.Grafico.GoToHome // regresa al inicio
               pararseleccion
           caso .... etc...
               // ...
       fin seleccion
   fin si
fin funcion


También podría haber momentos o acciones en los que todos se muevan o solo algunos... si son solo algunos decide cuantos y cuales al azar... y o bien los mueves hacia una dirección específica desde la actual donde están (persiguen), o bien siguen la ruta que llevan (deambulan)

// Cuantos: decide cuantos se mueven: -1=todos. 0=todos excepto seleccionado.
// Cuales: Solo se aplica cuando todos >0, e indica si se eligen al azar, si los que cumplan cierta condición, etc... un valor enumerado podría dar mucho de sí (por ejemplo si los hay de colores, o definidos por 'una característica', por ejemplo 'jinetes', 'arqueros', 'lanceros', etc...
// Adonde: indica si el movimiento es de persecución (se dirigen hacia las cordenadas x,y desde su ubicación actual, o deambulan (cada uno avanza en la dirección que lleva.
// X,Y: Dirección hacia la que se mueven, si 'adonde' =true (esto es, persiguen)
funcion MoverVarios(entero cuantos, enum cuales, buleano adonde, x,y)
   nueva coleccion personajes p

 
   Si (cuantos <= 0) luego   // todos o casi todos.    
       p = s_Personajes    
       Si (cuantos = 0 ) luego  // menos el seleccionado
          p.eliminar(s_IxActual)
       fin si
   sino // algunos
       nueva coleccion s = s_Personajes.CopiaTodo
       entero k = s.Count -1
       personaje j
       entero i, n

       Seleccionar cuales
            caso 0 // random                
                bucle para i desde 1 a cuantos
                    n = random(entre 0 y k)
                    j = s.Item(n) // personaje elegido al azar.
                    p.Add(j)  // se añade a la nueva colección
                     // no queremos elegirlo de nuevo, luego lo eliminamos (de la colección intermedia copia de la original, ojo copia, no referencia).
                    s.Delete(n)
                    k -=1
                fin bucle
            caso 13 // arqueros
                Hacer mientras (n <> cuantos) y (i<= k)                                      
                    Si (s.Item(i).Tipo = ARQUERO luego)  // personaje elegido .
                        p.Add(s.Item(i))  // se añade a la nueva colección                    
                        n +=1
                    fin si                    
                    i +=1                    
                Repetir
           caso ... etc...
               //...
       fin Seleccion
   fin si

   // ahora que se tiene la colección de los que se han de mover, toca moverlos
   Si (adonde = PERSECUCION) luego
       Por cada j en s  // por cada 'j' personaje en la colección 's'
           AcercarHacia( j.Grafico.x , jGrafico.y , x, y)
            j.Grafico.Dibujar  // en su posicion x,y actual
       Siguiente
   sino // DEAMBULAN
       Por cada j en s  // por cada 'j' personaje en la colección 's'
           j.Grafico.x += j.Grafico.Dirx    // DirX= -1, 0 ó +1
           j.Grafico.y += j.Grafico.Diry   // DirY= -1, 0 ó +1
           j.Grafico.Dibujar // en su posicion x,y actual
       Siguiente
   fin si
fin funcion


Mueve un poco acercándose hacia el objetivo...
En realidad aquí no se mueve, solo se calcula la posición adonde moverse

funcion AcercarHacia(desdeX, desdeY, haciaX, haciaY)
    Si (desdeX > haciaX) luego
         desdeX -=1
    sino
         desdeX +=1
    fin si

   Si (desdeY > haciaY) luego
         desdeY -=1
    sino
         desdeY +=1
    fin si
fin funcion
#2757
Las rutas tienen un largo máximo específico, tanto para la ruta de carpetas como para el nombre de 260 caracteres.
Ahora bien, es posible aterar ese límite, recurriendo a 'trucos', pero deja el cntenido inaccesible, usando la propia ruta completa.

Recientemente Mocosoft, decidió modificar dicho límite, pero aunque se modifique tampoco veo la necesidad de que alcance los 4.000 caracteres que propones, duplícalo a lo sumo: 520, pero sólo si haces uso de esas rutas largas, si no déjalo en 260 o ligeramente mayor si añades alguna cadena a la ruta, en fin 300 caracteres debería servirte de sobra.

Mocosoft, recomienda no usar los tipos: "ntext", "text" e "image", porque piensan eliminarlos en un futuro no lejano.

Recuerda que números de caracteres y número de bytes para alojar una cadena puede variar, así char y varchar, se usan generalmente para textos no unicode, y el mínimo de caracteres es 1 (no admite una cadena vacía) al igual que nChar y nVarchar.
En tu caso yo usaría nChar(300)

Para profundizar en el tema (mejor lees la propia documentación de Mocosoft sobre los tipos):
https://docs.microsoft.com/es-es/sql/t-sql/data-types/data-types-transact-sql
Por lo cual quizás te convenga más 
#2758
Cita de: CAEL20 en 25 Enero 2018, 07:38 AM
Si solo quiero guardar las direcciones de archivos que el boton Button1 busca, de ahi el timer es de guardar las direcciones que encontró el buscador y enlisto el label 7 es como el ID y el label 1 la ruta ejemplo D:\carpeta\archivo.txt los demas label son label que lleno con otro contenido, todo va bien y se ejecuta bien pero llega el momento que se detiene la depuración.

Bien, pero tenemos que seguir jugando a adivinar qué pasa, insisto:
Cita de: NEBIRE en 25 Enero 2018, 03:07 AM
... ¿Tanto cuesta poner el error que marca el stacktrace????...
Ya te decía, que sin más detalles no se puede saber que está pasando. Por imaginar, sin detalles lo úniico aventurado señalar es que los datos estén fuera de rango... una cadena vacía donde se espera contenido, un valor numérico dentro de unos límites (si es un byte, que no reciba un entero, etc... incluso si el valor no está acotado en el campo: >20 y < 150 por ejemplo, si el campo está así definido y un valor fuera dle rango, genera un error.

¿Puedes añadir líneas de código de depurración, para controlar las variables implicadas, y ver si tienen el valor que debieran tener?. Depurar es eso... verificar que cada variable contiene el valor que correponde al estado actual y si para ello hay que añadir líneas de control se añaden hasta capturar el error.

¿Por qué no añades un mísero Try...catch (en la línea que dices que falla)? y devuelves la excepción resultante.

Es que no pones ni lo mínimo, que sería el contenido de cada uno de esos labels en el momento del fallo... ...en fín tu pretendes que adivinemos donde tienes un error sin más.



Voy a tomarme la molestia de revisar tu código, a pesar de que es algo a evitar cuando uno no hace lo correcto, dar detalles...

Selecciono el siguiente fragmento de código  (del timer) y me centro sólo en él:
(por cierto, la función de evento del timer, no tiene su correspondiente 'end sub', asumo que sólo es un problema de copy-paste en el foro).

Bien, como tú dices que funciona durante un momento y luego falla, y observo que vas borrando ítems de un listbox, después de insertar los datos, aunque quede vacío, lo controlas antes, luego ahí no hay error...
Solo veo que 'label1' contiene el contenido actual del primer ítem del listbox
Y que el label7, lleva una cuenta (una cuenta fea de llevar, convertir a número y luego a texto, etc.. ese label sería mejor estar soportado en una función o propiedad, como sigue:
Código (vb) [Seleccionar]

private p_cuenta as int32
private function SumaCuenta as string
   p_Cuenta +=1
   return  p_Cuenta.toString
end function


Luego haría falta una línea adicional para controlar la situación... modifica como señalo...

Código (vb) [Seleccionar]

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       Dim k As Int32

       k = listbox1.items.Count
       If (k > 0) Then
           label6.text = k.ToString
           Label1.Text = ListBox1.Items.Item(0)

           label7.text = SumaCuenta

           Try

               DatosTableAdapter.Insert(Label7.Text, Label1.Text, Label3.Text, Label4.Text, Label5.Text)
               ListBox1.Items.Remove(0)
           Catch ex As Exception
               MessageBox.Show(ex.StackTrace) ' mínimo ex.message
           End Try
       Else
           '...
       End If
   End Sub


Luego ejecuta (paso a paso al llegar al evento del timer) y cuando salte el error, copia el texto del mensaje que salga y pégalo por aquí, a ver si se aclara algo...

Mejor opción es que hagas copia del proyecto, elimina lo que no sea necesario o no te parezca prudente revelar (pero que pueda ejecutarse hasta ahí), y a ver si se puede hacer algo más que adivinar...



Bien acabo de ver el mensaje último (éste lo tenía editado y me tuive que marchar y ahora al volver lo he enviado).
La imagen es clara, como se asume, una conversión de tipos forzada.... tu usas labels que son strings, y alguno de ellas se espera un tipo de datos de otro tipo, que no puede ser convertido, implícitamente, debe hacerse su 'cast' preciso.
...pero ves que en la misma imagen te pone: 'copiar detalles al portapapeles'?... pués eso es lo que hay que hacer y pegar aquí, junto con el código (solo hiciste esta última parte).
Si pones el cursosr sobre el 'guioncito rojo' (al final dle texto), y pinchas en él, te sugiere cambios, tal que si sabes lo que estás haciendo sabrás si en efecto, "vaya se me pasó", o dirás. "Ni P... idea"... si no lo resuelves pon el stacktrace entero...
#2759
No lo pones fácil. Básicamente quieres que adivinemos que error te sucede al introducir unos datos que desconocemos de una carpeta que desconocemos, de unos ficheros que desconocemos, en una base de datos que desconocemos.

Viendo los 'labels', que contienen los supuestos datos a ingresar en la supuesta línea que te falla, (así a ciegas) yo apuntaría que:
1 - El contenido de un label está vacío y la base de datos para ese campo está marcado como 'not null or empty', vamos que no admite una cadena de texto vacía...
2 - O lo contrario, que un campo esté limitado a un máximo de caracteres y esté recibiendo más, aunque en tal caso debiera truncarlo.
3 - Que el campo estuviera reclamando un tipo de datos (por ejemplo numérico), y que hasta el momento el label contenía un dato que puede ser interpretado como numérico, pero más adelante no.

Apostaría por el caso 1, mucho menos por el 2 y remotamente improbable por el 3...

Y ahora pregunto yo. ¿Tanto cuesta poner el error que marca el stacktrace????.
¿Quieres respuestas razonables o apuestas adivinas?...
#2760
Si, claro, pero debes saber que tipo de memoria usa, para adquirir el módulo que le corresponde.

Si abres la trampilla de la memoria del portátil, mira por encima y por debajo a ver si aparecen letras en el slot, o sobre el zócalo que identifique el tipo de memoria.
El slot2 siempre es un tipo de memoria más actual que la que porta el slot1.

La única forma de 'desactivar' (solo por satisfacerte con el palabro) el dual-channel simplemente es no usar el slot que no quieres usar (la memoria reconoce la que se usa). De hecho no puedes poner los 2 módulos, ponerlos es arriesgarse a dañar la placa cuando le entre energía (depende del diseño del fabricante que suceda si se colocan los dos)...