• Viernes 29 de Marzo de 2024, 14:32

Autor Tema:  Un error que me sorprende  (Leído 1752 veces)

Val_d_Homero

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Un error que me sorprende
« en: Sábado 4 de Julio de 2009, 18:29 »
0
Numerosísimas veces he puesto en los programas el subprograma siguiente para pedir confirmación antes de una supresión o modificación y nunca me ha dado problema, pero ahora me dice:
Error de compilación. Variable no definida
La variable a que se refiere es  "confirma".
Aun nunca lo he hecho y no me ha dado problemas he puesto al principio
 Dim confirma as String  (repito que nunca me ha hecho falta esto) y sigue dando el mismo error. ¿Cómo solucionarlo? Gracias.
El código es:
Private Sub Command3_Click() 'Suprimir
confirma = MsgBox("¿Quiere suprimir este registro?", vbYesNo, "Confirmación")
If confirma = vbYes Then
    Adodc1.Recordset.Delete
      MsgBox "Registro suprimido.", , "Borrado"
    Else
       MsgBox "Supresión cancelada.", , "No borrado"
End If
End Sub

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Un error que me sorprende
« Respuesta #1 en: Sábado 4 de Julio de 2009, 19:54 »
0
Seguramente has reinstalado recientemente VB6 y a consecuencia de ello, has activado la opción 'Option Explicit', cuando se activa dicha opción, te obliga a declarar todas las variables utilizadas, en caso contrario te marca el error señalado, en cada variable que uses y que no hayas declarado previamente.

Puedes desactivarlo si quieres desde el menú: Herramientas -> opciones -> ficha editor -> Requerir declaración de variables (lo desactivas) entra en vigor la próxima vez que inicies vb pero los proyectos en los que YA esté dicha intrucción responderá igual, en dicho caso puedes eliminar la línea 'Option Explicit' del proyecto y guardarlo.

Por otro lado, cuando no declaras explícitamente las variables, ésta, por defecto asume el tipo variant. El tipo variant es muy útil, para los casos donde se necesita pero supone una pérdida de rendimiento cuando no es realmente necesario. En tu caso la variable 'confirma' no necesita ser un variant, por tanto cuando no la declaras produces pérdida de rendimiento.

Tampoco debes declararla como string (aunque te funcionará perfectamente) como mínimo deberías declarala numérica, aunque mejor el tipo propio que al caso es parte de una enumeración:
dim confirma as vbmsgboxresult , que además te provee las opciones disponibles para dicha enum con el intellisense cada vez que pongas un operador...
«Ma non troppo»
----> ModoVacaciones = False<----

Val_d_Homero

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Un error que me sorprende
« Respuesta #2 en: Sábado 4 de Julio de 2009, 20:13 »
0
Sí, señor, tienes toda la razón. Vi lo de "Explicit" y no le presté atención. Quitaré esa línea y espero funcione. Muchas gracias.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Un error que me sorprende
« Respuesta #3 en: Sábado 4 de Julio de 2009, 20:48 »
0
Cita de: "Val_d_Homero"
Sí, señor, tienes toda la razón. Vi lo de "Explicit" y no le presté atención. Quitaré esa línea y espero funcione. Muchas gracias.
A la vista de tu respuesta, me pregunto si realmente has entendido lo que te he dicho y no me refiero a quitar esa línea de código...

Imagina que vb fuera un amigo, entonces Option explicit quiere decir exactamente: Oye 'vb', avísame cuando se me olvide declarar el tipo más adecuado para una variable, porque si no lo hago, como 'tú, vb' asumes que es un variant y como el variant es más lento y utiliza más recursos pues mi programa sería más lento innecesariamente, entonces estaría bien que me lo recordaras cada vez que se me olvide, para que así yo (el programador) ponga el tipo de datos más correcto para las variables que utilizo. Como soy tan olvidadizo... me serías de ayuda...

Resumiendo , a tí te vendría bien dejar activado option explicit y el error lo debes corregir consecuentemente poniendo la línea 'dim confirma as vbmsgboxresult' . Sólo se debe quitar option explicit cuando eres una persona cuidadosa que nunca, nunca olvida declarar TODAS las variables que utiliza con el tipo adecuado que precisa.

Yo ya no puedo hacer más por ti. Lo que hagas es cosa tuya.
«Ma non troppo»
----> ModoVacaciones = False<----