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 - Eleкtro

#2552
Windows / Re: Favoritos
11 Abril 2017, 06:17 AM
Para evitar confusiones a Zorronde:
No confundir con la carpeta de Favoritos la cual si pertenece al sistema operativo: C:\Users\{USUARIO}\Favorites

¡Saludos!
#2553
Windows / Re: PATH Windows 8
11 Abril 2017, 06:13 AM
Valor por defecto:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;

EDITO: Y para Python, simplemente añades la ruta al directorio donde tengas el archivo py.exe, en la variable de entorno PATH.

PD: La próxima vez, usa Google.

¡Saludos!
#2554
Cita de: RevolucionVegana en 10 Abril 2017, 11:35 AMme da error en int rangoUser = (int) rd["rango"];

¿Qué tipo de excepción y con que mensaje de error?. No somos adivinos.

¡Saludos!
#2555
Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PMdentro de la clase he creado el método ConectarYa y he puesto que no retorne nada, es correcto o tiene que retornar algo?

Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PMme gustaría saber si hace falta que esa clase retorne algo o como va la cosa

La clase que estás instanciando, MySqlConnection, representa la conexión a la base de datos MySql que vas a abrir, y además es una clase disposable (utiliza recursos no administrados que deberían ser liberados cuando ya no se los necesite usar más), con esto ya tienes dos motivos fundamentales por los cuales deberías devolver la instancia de esa clase.




Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PMHabía pensado en poner return HacerConexion.Open() pero no sabría de que tipo es el retorno

Estás en Visual Studio, la IDE más completa y sofisticada en el mundo de la programación (¡tenlo presente!), ante la duda tan solo tienes que posicionar el puntero del ratón sobre el nombre del miembro ("Open") y la característica Intellisense de Microsoft te mostrará un tooltip diciéndote de que tipo es el miembro, o en caso de una función que tipo de valor de retorno devuelve... en este caso ninguno, puesto que MySqlConnection.Open() es un método sin valor de retorno.




Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PMhe creado una clase para hacer la conexión a la base de datos y poder reutilizarla cuantas veces quiera

Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PM
Código (csharp) [Seleccionar]
class ConexionDB

Una clase cuyo propósito sea proveer métodos de uso genérico, por lo general debe ser una clase "sellada" (es decir, no heredable).
sealed class ConexionDB

Además deberías declarar un constructor de accesibilidad privada para impedir que la clase pueda ser instanciada por equivocación. [/quote]
private ConexionDB() { }

Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PM
Código (csharp) [Seleccionar]
public void ConectarYa()

Y por ese último motivo que acabo de mencionar, los métodos de uso genérico deberían tener una accesibilidad global.
public static void ConectarYa()

En general aquí abajo te muestro buenas prácticas de diseño que se deberían seguir según lo estipula en las directrices de diseño de Microsoft:

Código (csharp) [Seleccionar]
#region " usings "

using System.Diagnostics;
using MySql.Data.MySqlClient;

#endregion

namespace MySqlUtils {

   /// <summary>
   /// Contains helper methods for a <c>MySQL</c> database.
   /// </summary>
   public sealed class DatabaseHelper {

       #region " Constructors "

       [DebuggerNonUserCode()]
       private DatabaseHelper() { }

       #endregion

       #region " Public Methods "

       /// ----------------------------------------------------------------------------------------------------
       /// <summary>
       /// Establishes a connection to a <c>MySQL</c> Server database using the specified connection string.
       /// </summary>
       /// ----------------------------------------------------------------------------------------------------
       /// <example> This is a code example.
       /// <code>
       /// using (MySqlConnection connection = GetConnection("server=localhost; userid=x; password=x; database=x")) {
       ///     // ...
       /// }
       /// </code>
       /// </example>
       /// ----------------------------------------------------------------------------------------------------
       /// <param name="connectionString">
       /// The connection string used to open the <c>MySQL</c> database.
       /// </param>
       /// ----------------------------------------------------------------------------------------------------
       /// <returns>
       /// A <see cref="MySqlConnection"/> instance that represents the connection established with the <see cref="MySQL"/> database.
       /// </returns>
       /// ----------------------------------------------------------------------------------------------------
       [DebuggerStepThrough()]
       public static MySqlConnection GetConnection(string connectionString) {

           MySqlConnection connection = new MySqlConnection(connectionString);
           connection.Open();
           return connection;

       }

       #endregion

   }

}


Ejemplo de llamada:
Código (csharp) [Seleccionar]
MySqlConnection db = MySqlUtil.DatabaseHelper.GetConnection("MySQL query");

Si intentas hacer las cosas más o menos similar entonces estarás avanzando a pasos de gigante en el "nivel principiante", la estructurización/diseño es fundamental, te ayudará en todo, sobre todo a ser mas analítico o metódico. La documentación Xml es muy util y recomendable pero bueno si te parece algo muy tedioso de realizar entonces lo puedes ignorar, yo es que soy un maniático y un cansino del perfeccionismo, pero no te fijes en los tochos de documentación sino en la estructurización de todo lo demás... y en las nomenclaturas de los miembros, muy importante también (deberías intentar no escribir absolutamente nada en Español... ¡ni siquiera los commentarios!)

PD: Esto ha sido solo un consejo personal para intentar ayudarte un poco a que descubras como poder mejorar tus modelos, es mi opinión la cual se puede aceptar o rechazar sin problema; ¡que cada cual aprenda a programar como prefiera!.

¡Saludos!
#2556
Cita de: bybaal en  9 Abril 2017, 01:15 AMRealmente lo que necesitamos es que se oculten las filas que no coinciden con lo buscado y que la búsqueda sea al escribir en el TextBox.

Aquí abajo te muestro otra alternativa de hacerlo. En caso de que lo uses, adáptalo a tus necesidades.

Código (vbnet) [Seleccionar]
Public NotInheritable Class Form1 : Inherits Form

   Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

       Me.TriggerFindText(DirectCast(sender, TextBox), Me.DataGridView1)

   End Sub

   Private Sub TriggerFindText(ByVal tb As TextBox, ByVal dgv As DataGridView)

       ' Cuando se dispara el evento TextBox.TextChanged, guardamos el texto actual en una variable,
       ' esperamos 300-500 ms approx. y verificamos si el texto sigue siendo el mismo o ha cambiado.
       ' De esta manera evitamos realizar búsquedas indeseadas (términos de búsqueda incompletos) mientras el usuario está escribiendo.
       ' Util también si tenemos miles de filas en el datagridview, para evitar bloqueos en el thread de la UI.

      ' Como es evidente, esta metodología está pensada para una búsqueda en "tiempo real";
      ' Si prefieres iniciar la búsqueda solamente cuando se presione la tecla "Enter" entonces esta metodología no tienes por que usarla...

       Dim t As New Task(
           Sub()
               Dim oldText As String = tb.Text
               Dim newText As String
               Thread.Sleep(400)

               newText = tb.Text
               If String.IsNullOrEmpty(newText) Then
                   ShowAllRowsInDataGridView(dgv)

               ElseIf (oldText = newText) Then
                   FindTextInDataGridView(dgv, tb.Text, StringComparison.OrdinalIgnoreCase)

               Else ' (oldText <> newText)
                   ' El texto ha cambiado, así que no hacemos nada.

               End If

           End Sub)

       t.Start()

   End Sub

   Friend Shared Sub ShowAllRowsInDataGridView(ByVal dgv As DataGridView)

       If (dgv.InvokeRequired) Then
           dgv.Invoke(New Action(Sub() ShowAllRowsInDataGridView(dgv)))
       End If

       dgv.SuspendLayout()
       For Each row As DataGridViewRow In dgv.Rows
           If Not (row.IsNewRow) Then
               row.Visible = True
           End If
       Next row
       dgv.ResumeLayout(performLayout:=True)

   End Sub

   Friend Shared Sub FindTextInDataGridView(ByVal dgv As DataGridView, ByVal str As String, ByVal stringComparison As StringComparison)

       If (dgv.InvokeRequired) Then
           dgv.Invoke(New Action(Sub() FindTextInDataGridView(dgv, str, stringComparison)))
       End If

       Dim cellContainsFunc As Func(Of DataGridViewCell, String, Boolean) =
           Function(ByVal cell As DataGridViewCell, s As String)
               If (cell.Value IsNot Nothing) Then
                   Return (cell.Value.ToString().IndexOf(s, stringComparison) <> -1)
               Else
                   Return False
               End If
           End Function

       Dim indices As IEnumerable(Of Integer) =
           (From row As DataGridViewRow In dgv.Rows
            Where row.Cells.Cast(Of DataGridViewCell).Any(Function(x As DataGridViewCell) cellContainsFunc(x, str))
            Select row.Index)

       dgv.SuspendLayout()
       dgv.ClearSelection()
       For Each row As DataGridViewRow In dgv.Rows
           If Not (row.IsNewRow) Then
               row.Visible = indices.Contains(row.Index)
           End If
       Next row
       dgv.ResumeLayout(performLayout:=True)

   End Sub

End Class


¡Saludos!
#2557
Hmmm... creo que tienen razón en lo que dicen en el video.

Que un experto me corrija, por favor:

Teniendo este partido como antes:
-10 Equipo_A  vs. Equipo_B +10

Si yo apuesto en ese momento al Hándicap del Equipo_A, es decir -10, y suponiendo que el resultado final sea Equipo_A=91 puntos y Equipo_B=80 puntos, la condición para que la apuesta resulte ganadora es que al descontar el Hándicap de los puntos del Equipo_A, es decir 91-10=81, esos puntos sigan siendo mayor a los puntos del otro equipo, y en este caso habría ganado la apuesta con 81 puntos por encima de los 80 puntos del otro equipo.
O lo que viene a ser lo mismo, que el equipo por el que he apostado siga teniendo el mismo Hándicap o un Hándicap mayor (ej. -12) al terminar el partido.

Vamos, que no tenía que ver tanto con el valor negativo del Hándicap como yo creia, ¿verdad?.

PD: Aclaro que me estoy refiriendo a apuestas en directo, el Hándicap varía a cada momento según la diferencia de puntos entre los equipos, el equipo con más puntos tiene un mayor Hándicap -negativo.

¡Saludos
#2558
Hola.

A ver si por casualidad hay algún aficionado al baloncesto en el foro y que sepa un poco de apuestas de baloncesto para poder resolver una duda básica que tengo...

Vamos a ver, tomando este partido como ejemplo:

-10 Equipo_A  vs. Equipo_B +10

Si yo apuesto en ese momento al Hándicap del Equipo_A, es decir -10, ¿cuales son las condiciones que se tienen que dar en el marcador final de puntos del partido para que mi apuesta resulte ganadora?.

Si yo apuesto por el Equipo_A con ese Hándicap de -10 puntos, lo que pienso o lo que interpreto desde mi completa ignorancia es que para que la apuesta resulte ganadora la única condición que se ha de dar es que el Hándicap del Equipo_A se mantenga en un valor negativo (-1) hasta el final del partido. Por ese motivo, yo lo que hago es esperar hasta la mitad del 4º tiempo del partido y si uno de los equipos tiene un Hándicap de digamos -20 puntos (de lo contrario no apuesto por ninguno de los equipos, diréctamente ignoro el partido), apuesto a ese equipo, y gano la apuesta (por que no le llegan a meter 20 puntos al equipo por el que yo aposté), esto no me ha fallado en las apuestas que he echo hasta ahora, pero creo que a pesar de estar ganando consecutivamente quizás sea la suerte del novato y no lo estoy haciendo bien ...con sensatéz, por que no sé muy bien a lo que estoy apostando la verdad, quizás me estoy equivocando con mi interpretación del Hándicap en las apuestas de baloncesto.

Quiero aclarar que no tengo demasiado claro el concepto del Hándicap, y he mirado el siguiente video pero sigo teniendo mis dudas al respecto:

[youtube=640,360]https://www.youtube.com/watch?v=s3Qv9Ph87pA[/youtube]

...y digo que tengo dudas despues de haber visto el video, por que lo que se explica en ese video (la suma/resta en el marcador final de puntos) en mi opinión no concuerda con lo que yo he visto en las apuestas que he ganado, o tal vez si, ¡no sé!, yo solo veo que solo gano la apuesta si apuesto por un equipo con un buen hándicap negativo (ej. -20) y si ese hándicap se mantiene en valor negativo la apuesta sale vencida. Tengo la cabeza echa un lío. Vuelvo a repetir la pregunta:

Si yo apuesto en ese momento al Hándicap del Equipo_A, es decir -10, ¿cuales son las condiciones que se tienen que dar en el marcador final de puntos del partido para que mi apuesta resulte ganadora?.

Gracias por adelantado.
#2559
Cita de: aspiazu en  8 Abril 2017, 11:09 AMcomo puedo hacer que busque png y jpg? y lo mismo con exe y lnk?

En el caso de que Unity permita el uso de LINQ (.NET Framework +3.5):

Código (csharp) [Seleccionar]
DirectoryInfo dir = new DirectoryInfo(@"C:\Directory\");
IEnumerable<FileInfo> files =
   from file in dir.EnumerateFiles("*.*", SearchOption.AllDirectories)
   where new string[] { ".png", ".jpg" }.Contains(file.Extension, StringComparer.OrdinalIgnoreCase)
   select file;

foreach (FileInfo file in files) {
   Console.WriteLine(file.FullName);
}


En el caso contrario:
Código (csharp) [Seleccionar]
DirectoryInfo dir = new DirectoryInfo(@"C:\Directory\");
FileInfo[] files =
    Array.FindAll(dir.GetFiles("*.*", SearchOption.AllDirectories),
                  file => new string[] { ".png",".jpg" }.Contains(file.Extension, StringComparer.OrdinalIgnoreCase));

foreach (FileInfo file in files) {
   Console.WriteLine(file.FullName);
}


¡Saludos!
#2560
La que estás liando, jeje.

Cita de: LeandroA en  7 Abril 2017, 07:07 AMsupongo que hay una forma mas profesional de hacer una desinstalacion desatendida.

Para llevar a cabo una desinstalación desatendida ya no de forma profesional, sino de forma sensata, lo primero que debiste hacer es documentarte sobre los argumentos command-line que acepta el tipo de desinstalador en cuestión; no es necesario llevar a cabo metodologías rebuscadas con la API de Windows, tan solo buscar información sobre cual es la forma guiada que un installer-builder proporciona para desinstalar un producto de forma desatendida.




Los archivos con nombre "unins000" hacen referencia a un desinstalador creado por el installer-builder Inno Setup, por ende puedes pasarle el argumento /s o también /silent (ambos argumentos completamente en minúscula) para desinstalarlo de forma silenciosa:
"unins000.exe" /silent

...Esto seguirá mostrando la UI, pero sin interacción con el usuario. Si quieres ocultar la ventana es decisión tuya.




Cita de: LeandroA"C:\ProgramData\Package Cache\{246dcb72-b18c-4ab9-9de9-8a996296b01d}\vcredist_x86.exe"  /uninstall

Para los desinstaladores de Microsoft (MSI) en la mayoría de los casos puedes utilizar la siguiente sintaxis:
"vcredist_x86.exe"  /uninstall /quiet
"setup.msi"         /uninstall /quiet

...Puedes reemplazar el argumento /quiet por /passive si prefieres mostrar una UI con el progreso de desinstalación, sin interacción con el usuario.

Puedes llamar al desinstalador pasándole el argumento "/?" para mostrar los argumentos disponibles por defecto:
"setup.msi" /?

...Ten en cuenta que eso no incluye argumentos creados por el autor del instalador.




Cita de: LeandroAMsiExec.exe /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}

Para una desinstalación usando la versión command-line de MSI, MsiExec.exe, puedes usar la siguiente sintaxis:

MsiExec.exe /quiet /X {1D8E6291-B0D5-35EC-8441-6616F567A0F7}

...y de nuevo también puedes pasarle el argumento /passive si lo prefieres.




Cita de: LeandroAC:\Program Files (x86)\InstallShield Installation Information\{9D3D8C60-A5EF-4123-B2B9-172095903AB}\Install.exe -uninst -l0xA

Para los desinstaladores de InstallShield se requiere un poco más de esfuerzo realizando el siguiente paso previo a la desinstalación:




Etcétera con el resto de tipos de instaladores. Si no estás seguro de a que tipo de instalador pertenece un executable, puedes intentar pasarle argumentos de ayuda al executable a ver si te muestra algo (-h | --h | -help | --help | /?) o puedes analizar el PE con cualquier software dedicado a ello como por ejemplo TridNet o PEInfo, y a partir de eso cuando averigues el tipo de instalador te documentas en Google sobre los argumentos de desinstalación desatendida, o diréctamente en la web del producto.




Cita de: LeandroA en  8 Abril 2017, 08:07 AMNo se porque movieron el tema a este foro si era de programacion no buco un progama de terceros

Yo no moví el post, pero aunque el planteamiento inicial de tu pregunta estuvo enfocada a la programación, en mi opinión (desde mi punto de vista personal) la solución no tiene que ver con la programación, sino más bien con el entendimiento del uso básico de un software dedicado a la creación de instaladores, lo cual se podría catalogar como una duda de software bajo Windows (desde mi punto de vista personal, insisto).

¡Saludos!