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 - pandemonio

#2
Dada la presión que me agobia me atrevo a publicar la siguiente duda en esta sección. En resumen, el problema principal es que intento insertar registros de forma automática a una base de datos pero después varios registros insertados la aplicación ya no logra conectarse al servidor MySQL. A grandes rasgos, lo que hago es abrir una conexión, insertar registros y posteriormente cerrar la conexión, esto lo hago en un número indeterminado de veces pero al cabo de unos momentos la aplicación ya no logra conectarse al servidor de MySQL.

Dejo el enlace en donde comento mi duda un poco más detallada y publico una parte del código. Gracias anticipadas.

http://foro.elhacker.net/index.php/topic,159133.0.html
#4
Cita de: CeLaYa en 16 Octubre 2006, 20:58 PM
ups!!! se me paso poner esta declaracion

Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long

Gracias, disculpa pero faltó la declaración de la constante STILL_ACTIVE, aunque si la declaras con el valor de 1 funciona. El código quedaría así:



Private Declare Function OpenProcess Lib "kernel32" _
    (ByVal dwDesiredAccess As Long, _
    ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
    (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Const STILL_ACTIVE = 1

Private Function ExeEspera(COMANDO As String)
    Dim hProcess As Long
    Dim RetVal As Long
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(COMANDO, vbMinimizedNoFocus))
    Do
        GetExitCodeProcess hProcess, RetVal
        DoEvents
        Sleep 1000
    Loop While RetVal = STILL_ACTIVE
End Function

Private Sub Command1_Click()
'    ExeEspera "ping 124.32.54.4"
    Dim Winzip As String
    Dim ArchivoZIP As String
    Dim PorComprimir As String
   
    ArchivoZIP = "C:\temp\ArchivoZIP.zip"
    PorComprimir = "C:\temp\PorComprimir.txt"
    Winzip = "C:\Archivos de programa\WinZip\winzip32.exe -a -r "
   
    ExeEspera Winzip & ArchivoZIP & " " & PorComprimir
   
    MsgBox "Listo"
End Sub



Pero me parece que no funciona correctamente, ya que el MsgBox aparece antes de que termine el proceso, pero quizás me estoy equivocando.
#5
Cita de: CeLaYa en 13 Octubre 2006, 14:37 PM
si lo que quieres hacer es esperar a que tu aplicacion espere a que termine la ejecucion de la ventana del DOS, te paso un tip, que aqui mismo me dieron:


en tu programa en lugar de usar el shell
usa esta funcion

ExeEspera "comando ms-dos"

Private Function ExeEspera(COMANDO As String)
    Dim hProcess As Long
    Dim RetVal As Long
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(COMANDO, vbMinimizedNoFocus))
    Do
        GetExitCodeProcess hProcess, RetVal
        DoEvents
        Pausa 100
    Loop While RetVal = STILL_ACTIVE
End Function


Gracias CeLaYa por el código, pero le hace falta algunas cosas, como funciones y APIS, con las APIS no hay problema, pero sí con las funciones, pero no importa, ya solucioné el problema de otra forma (sencilla y que no consume muchos recursos). Esta fue la solución:



Dim Success%

Private Function FileExists%(fname$)
   On Local Error Resume Next
   Dim ff%
   ff% = FreeFile
   Open fname$ For Input As ff%
   If Err Then
       FileExists% = False
   Else
       FileExists% = True
   End If
   Close ff%
End Function

Private Sub Command1_Click()
1
   'Se ejecuta el primer proceso
   '
   '
   '
   
   '
   '
   'Se ejecuta el proceso de MS-DOS
   '
   '
   '
   
   'Se prepara la función para comprobar la existencia de Archivo.txt
   Success% = FileExists(App.Path & "\Archivo.txt")
   
   'En caso de ser verdadero
   If Success% = True Then
       'Se ejecuta el proceso que deseo
   Else
'        Se regresa al primer proceso hasta que se encuentre el archivo
       GoTo 1
   End If
   'Se continua con otro proceso
End Sub



Obviamente no está completo el código, pero con esto cualquiera se da una idea de que ya pude llevar a cabo lo que quería. Muchas gracias por tu ayuda.

No estaría mal que publicaras el código completo que mostraste al principio, quizás me sea más útil que lo que encontré.
#6
Cita de: CeLaYa en 13 Octubre 2006, 14:37 PM
si lo que quieres hacer es esperar a que tu aplicacion espere a que termine la ejecucion de la ventana del DOS, te paso un tip, que aqui mismo me dieron:


en tu programa en lugar de usar el shell
usa esta funcion

ExeEspera "comando ms-dos"

Private Function ExeEspera(COMANDO As String)
    Dim hProcess As Long
    Dim RetVal As Long
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(COMANDO, vbMinimizedNoFocus))
    Do
        GetExitCodeProcess hProcess, RetVal
        DoEvents
        Pausa 100
    Loop While RetVal = STILL_ACTIVE
End Function


Gracias CeLaYa por el código, pero le hace falta algunas cosas, como funciones y APIS, con las APIS no hay problema, pero sí con las funciones, pero no importa, ya solucioné el problema de otra forma (sencilla y que no consume muchos recursos). Esta fue la solución:



Dim Success%

Private Function FileExists%(fname$)
    On Local Error Resume Next
    Dim ff%
    ff% = FreeFile
    Open fname$ For Input As ff%
    If Err Then
        FileExists% = False
    Else
        FileExists% = True
    End If
    Close ff%
End Function

Private Sub Command1_Click()
1
    'Se ejecuta el primer proceso
    '
    '
    '
   
    '
    '
    'Se ejecuta el proceso de MS-DOS
    '
    '
    '
   
    'Se prepara la función para comprobar la existencia de Archivo.txt
    Success% = FileExists(App.Path & "\Archivo.txt")
   
    'En caso de ser verdadero
    If Success% = True Then
        'Se ejecuta el proceso que deseo
    Else
'        Se regresa al primer proceso hasta que se encuentre el archivo
        GoTo 1
    End If
    'Se continua con otro proceso
End Sub



Obviamente no está completo el código, pero con esto cualquiera se da una idea de que ya pude llevar a cabo lo que quería. Muchas gracias por tu ayuda.

No estaría mal que publicaras el código completo que mostraste al principio, quizás me sea más útil que lo que encontré.
#7
El problema es el siguiente; en la aplicación que desarrollé utilizo Shell para ejecutar un comando, con esto, se abre la consola de MS-DOS, y comienza a ejecutarse el proceso, cuando dicho proceso finaliza, la ventana se cierra, mi duda es ¿cómo puedo saber cuándo una ventana que estaba abierta se cerró? Sé cuándo una ventana aparece, más no sé cuándo desaparece, se me han ocurrido ideas con el control Timer, pero este consumiría muchos recursos. ¿Alguna idea?
#8
Cita de: karmany en 21 Septiembre 2006, 17:46 PM
Puedes abrir el archivo en modo binario o aleatorio y comparar cuándo aparece la ",":
Open nombre_fichero For modo As
  • nFichero
    Utiliza Freefile para obterner el siguiente número disponible.

    Después se me ocurre que cuando encuentre el programa una "," que mueva todo el contenido del archivo una posición a la izquierda, a partir de la "," encontrada.
Buena idea, gracias por tu comentario, me será de mucha ayuda. ¿Alguién tiene más sugerencias?



EDITADO

Aquí tengo el código para buscar la coma, ahora sólo me falta el código para quitarla en todo el archivo.



Private Sub Command1_Click()
    Dim Archivo As String, TODO As String, Busca As String
   
    Dim NumArchivo As Integer
   
    Archivo = "C:\archivo.txt"
    NumArchivo = FreeFile()
   
    Open Archivo For Input As #NumArchivo
        TODO = input(LOF(1), 1)
       
        busca = InStr(1, TODO, ",", vbTextCompare)
           
        If busca > 0 Then
            MsgBox "Encontrado"
        End If
    Close #NumArchivo
   
    Text1.Text = TODO
End Sub



Es necesario agregar un botón de comando y un cuadro de texto con la propiedad Multiline en True.
#9
Tengo un archivo de texto con el siguiente contenido:

Citar
Campo1, MAS DATOS|Campo2|Campo3|Campo4|
Campo1|Campo2, MAS DATOS|Campo3|Campo4|
Campo1|Campo2|Campo3, MAS DATOS|Campo4|
Campo1|Campo2|Campo3|Campo4, MAS DATOS|

Si notan, el archivo contiene una serie de registros conformados por campos los cuales están divididos por Pipes (|), mi problema aquí es que deseo eliminar todas las comas (,) que existen en el archivo y guardar dicho archivo sin las comas; haciendo esto el archivo debería quedar así:

Citar
Campo1 MAS DATOS|Campo2|Campo3|Campo4|
Campo1|Campo2 MAS DATOS|Campo3|Campo4|
Campo1|Campo2|Campo3 MAS DATOS|Campo4|
Campo1|Campo2|Campo3|Campo4 MAS DATOS|

El archivo debe quedar sin comas, eso es todo lo que necesito. Gracias.
#10
Cita de: hexabinarios en 12 Septiembre 2006, 22:29 PM
Hola Pandemonio, te cuento que puedes hacer esto con la propiedad Parent.

Te pido disculpas por no mostrarte un ejemplo de como hacerlo pero mi HD murio junto con todos mi codigos.

Se que se hacia algo asi:
Set DataGrid.Parent  = SSTab

Si no te funciona con eso entonces se hace via APIS, con el Sendmessage y el SetParent como mensaje.

Si encuentro algo en mi backup lo posteo.

Saludos.

Muchas gracias por tu sugerencia hexabinarios, me has dado informació vital, seguiré investigando al respecto.