• Viernes 8 de Noviembre de 2024, 16:53

Autor Tema:  Error "procedimiento Largo" Vb 6.0  (Leído 4417 veces)

gabrielgc2002

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Error "procedimiento Largo" Vb 6.0
« en: Sábado 12 de Abril de 2008, 08:08 »
0
Alguien sabe como solucionar el error de procedimiento largo por que en un solo procedimiento tengo aproximadamente como 16000 líneas de código  y me sale un error que dice procedure too large intente con subprocedimientos le pongo
Private Sub Form_Load1()
codigo
End sub
Private Sub Form_Load2()
Codigo
End sub
……………………………………
Y asi sucesivamente, pero entra en el primer procedimiento y se termina el programa y ya no entra en el segundo procedimiento. :(
Si alguien me puede ayudar se lo agradecería mucho. Saludos  :hola:

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #1 en: Sábado 12 de Abril de 2008, 23:10 »
0
No me puedo imaginar que procedimiento puede necesitar 16000 líneas de código.
La posible solución es algo parecido a esto.

Private Sub Form_Load1()
    código
    subprocedimiento1
    código
    subprocedimiento2
    código
    subprocedimiento3.....
End sub

 :comp:

gabrielgc2002

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #2 en: Domingo 13 de Abril de 2008, 02:26 »
0
Estoy haciendo un sistema contable tengo 10 formularios y el formulario que tiene dichas líneas es donde aparece toda la información  de 9 formularios :lol: , bueno al grano como se definen los subprocedimientos dentro del procedimiento principal  osea como seria el código . :hola:

fap1603

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #3 en: Domingo 13 de Abril de 2008, 17:31 »
0
bueno, creo que lo que puedes hacer es simplificar tu progrma, por que no pruebas declarando funciones publicas en un modulo, las llamas y pasas parametros del formulario que lo necesite, yo lo hago asi, por lo menos me funciona, x mas largo que sea el codigo y mas formularios que use, para las validaciones y eso tb puedes usar typos personalizados, llenar en matrices etc. revisalo bien, ago debes estar repitiendo. suerte
Saludos,

Francisco Ayala Pinazo
Lima - Perú

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #4 en: Domingo 13 de Abril de 2008, 18:38 »
0
Como no muestras por lo menos parte del código o el algoritmo del mismo, solo estamos tratando de adivinar que podrías hacer. Con tan poca información que proporcionas no se puede hacer otra cosa.

 :(

gabrielgc2002

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #5 en: Lunes 14 de Abril de 2008, 10:22 »
0
Bueno lo que pasa es que el código es demasiado largo,  tienes razón en que estoy comparando muchos cadenas de caracteres,  es por eso que esta muy largo creo que usando vectores se puede minimizar el código  pero pues ya esta hecho y presiento que todo esta bien nada mas que me sale el error del procedimiento largo, bueno lo que quiero  saber nada mas es como se definen los subprocedimientos Para dividir el código, si tiene un ejemplo  :)  :hola:

Angel38

  • Miembro MUY activo
  • ***
  • Mensajes: 370
    • Ver Perfil
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #6 en: Lunes 14 de Abril de 2008, 15:23 »
0
Estoy de acuerdo con fap, debes hacer modulos para simplificar el programa, ya que estos actuan globalmente en el desarrollo de tu software.

Y man, en serio si tienes 16.000 es que estas duplicando mucho codigo innecesariamente.
[size=109]Se me olvidó instalar los Drivers de Cordura en mi Cerebro.

gabrielgc2002

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #7 en: Martes 15 de Abril de 2008, 11:02 »
0
Bueno pues ya minimice el código y funciona a la perfección creo que nada mas era analizar un poco mas el algoritmo, pero como yo quería acabarlo lo mas rápido posible no puse atención en el código y lo hice a lo tonto es por eso que me salieron tantas líneas, pero pues ya solucione el problema claro gracias a ustedes se los agradezco mucho. Saludos  :D  :lol:  :hola:

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #8 en: Martes 22 de Abril de 2008, 19:50 »
0
Habrás solucionado tu problema pero al final nadie te ha explicado otra que has pedido crear subprocedimientos... ya te lo explico yo...

Sea que tienes un código de 40.000 líneas o las que sean ejemplo:
Código: Text
  1.  
  2.   public sub elProcedimiento()
  3.       codigo linea 1
  4.       codigo linea 2
  5.         .
  6.         .
  7.         .
  8.      codigo linea 39999
  9.      codigo linea 40000
  10.   end sub
  11.  
  12.  

pués se trata de añadir un módulo (menú proyecto añadir módulo) o más...
y hacer algo como esto:
Código: Text
  1.  
  2.   public sub elProcedimiento()  'esto sería la función inicial
  3.       call codigo1_10000
  4.       call codigo10001_20000
  5.       call codigo20001_30000
  6.       call codigo30001_40000
  7.   end sub
  8.  
  9. ' este otro código iría en el módulo añadido
  10.   public sub codigo1_10000
  11.       codigo linea 1
  12.       codigo linea 2
  13.         .
  14.         .
  15.         .
  16.      codigo linea 9999
  17.      codigo linea 10000
  18.   end sub
  19.   public sub codigo10001_20000
  20.        codigo linea 10001
  21.        codigo linea 10002
  22.         .
  23.         .
  24.         .
  25.      codigo linea 19999
  26.      codigo linea 20000
  27.   end sub
  28.   public sub codigo20001_30000
  29.         ....
  30.   end sub
  31.   public sub codigo30001_40000
  32.       .... ídem
  33.   end sub
  34.  
  35.  

Como ves hemos dividido el código en 4 rutinas con nombre sin significado alguno, a fin de que te quede más claro...

Lo lógico no es partir el código arbitrariamente por cualquier línea, sino hacerlo por 'tareas'... supongamos que tu código varias veces toma una cadena, busca algo en ella y si lo encuentra lo remplaza por otra, pués esa funcionalidad es una tarea específica que puede ser despejada a un módulo como una función, que por ejemplo podría llamarse remplazar_Cadena  ahora revisando todo tu código cada vez que hagas esa dentro de ella deberías sustituirlo por algo como lo siguiente:
Código: Text
  1.  
  2.     call remplazar_Cadena(cadenaOriginal, CadenaABuscar, ramplazo)
  3.  
  4.  
Naturalmente antes habría que haber trasladado el código  que hace esa tarea al módulo que sería algo como esto:
Código: Text
  1.  
  2.    public sub remplazar_Cadena(byref cadenaOrigen as string, buscar as string, remplazarCon as string)
  3.        código que busca la cadena y lo remplaza...
  4.    end sub
  5.  
  6.  

Cuando trabajas en un módulo se debe tener en cuenta el ámbito de las variables, esto es el 'alcance'. todas las variables de una función son reconocidas dentro de la función, pero una variable que es 'local' a una función no es accesible desde otra función, cuando se necesita disponer de variables accesibles desde diferentes funciones, hay que declaralas públicas en un módulo algo así como
Código: Text
  1.  
  2.    public estaVariable as integer
  3.    public otraVariable as string
  4.    public unaMatriz() as byte
  5.  
  6.  


Estas variables así declaradas en un módulo estarán disponibles en el formulario y por tanto podrás usarlas en todas las funciones..
Cuando sales de una función, todas las variables declaradas dentro de la función son borradas, al acceder nuevamente a la función las variables son nuevamente creadas, con el valor que les des, si no les das valor tomarán el que les es propio por fecto (0 para las numéricas, "" para los strings, etc..). entonces si quieres que una función 'recuerde' una variable entre llamadas, esto es que no la borre al salir de la función hay que declararla como Static, ejemplo:
Código: Text
  1.  
  2.     ' este ejemplo siempre la variable acumulador pierde su valor
  3.     public function Sumar( valor as integer) as long
  4.         dim acumulador as long   ' cada vez que entre acumulador vale 0
  5.       
  6.         acumulador=acumulador  + valor
  7.         sumar=acumulador 'cuando salga acumulador dejará de existir
  8.   end function
  9.  
  10.   ' en este ejemplo la variable acumulador guarda su valor..
  11.    public function Sumar( valor as integer) as long
  12.         static acumulador as long   ' cada vez que entre acumulador vale lo que valía la última vez que se salió
  13.       
  14.         acumulador=acumulador  + valor
  15.         sumar=acumulador 'cuando salga acumulador seguirá existiendo
  16.   end function
  17.  
  18.  

por último indicarte que desde un módulo para acceder a los controles situados en el formulario, deberás indicar además del nombre del control también el nombre del formulario, de otro modo no lo reconocerá, ejemplo: si tenía text1.text="Mi casa" desde un módulo tendrás que indicarlo así: Form1.text1.text="Mi casa" (form1 es el nombre que le hayas dado al formulario). Si tienes que usar muchas veces 'form1' en vez de usarlo cada vez puedes abreviarlo así:
Código: Text
  1.  
  2.     public sub Sumar(valor as integer)
  3.        static acumulador as long
  4.         with form1
  5.               .text1.text= acumulador + valor
  6.               .command1.enabled=true
  7.         end with
  8.     end sub
  9.  
  10.  

observa que se escribe with nombreDelFormulario y se cierra con un 'end nombredelformulario' y nota que cada control referenciado lleva delante de su nombre un punto.

Saludos.
«Ma non troppo»
----> ModoVacaciones = False<----

gabrielgc2002

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Error "procedimiento Largo" Vb 6.0
« Respuesta #9 en: Domingo 27 de Abril de 2008, 10:19 »
0
Pues muchas gracias, esta muy bien explicado para otra ocasión que se me ofrezca ya se como asarle, gracias de nuevo Nebire , Saludos    :D