Error de compilación

14/07/2010 - 18:58 por isidorodos | Informe spam
Buenas tardes:

Después de actualizar un campo hago que se busque el valor en una
tabla y si existe me avise con un mensaje, el código siguiente me ha
funcionado sin ningún problema desde hace años pero estoy actualizando
el formulario y desde hace unos días me salta el siguiente error
despues de actualizar el campo

Error de compilación, no se ha definido la variable

La línea que da el error es Set mibd = CurrentDb()

y el código que estoy usando es el siguiente:

Dim sSQL As String
sSQL = "SELECT * FROM articulos"
Set mibd = CurrentDb()
Set rsRegistros = mibd.OpenRecordset(sSQL, dbOpenDynaset)
If rsRegistros.RecordCount > 0 Then
Do While Not rsRegistros.EOF
If Me.idarticuloa = rsRegistros!idarticuloa Then
MsgBox "EL CÓDIGO DE ARTÍCULO YA EXISTE EN LA TABLA
ARTÍCULO, ELIJA OTRO CÓDIGO DE ARTÍCULO", vbInformation
Me.idarticuloa.SetFocus
Me.Undo
Exit Do
End If
rsRegistros.MoveNext
Loop
End If

No tengo muchos conocimientos de programación pero no se que está
pasando.

¿Alguna ayuda?

Utilizo Access 2002

Gracias y un saludo

Preguntas similare

Leer las respuestas

#6 isidorodos
20/07/2010 - 13:52 | Informe spam
On 16 jul, 14:07, "Emilio" wrote:
¡Importante!: Colabora con el grupo. Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias
Por ejemplo, no declaras la variable strCliente y trabajas con ella, hasta
que en un determinado momento cometes uns falta de ortografía y en lugar de
escribir strCliente escribes srtCliente, VBA no te va a avisar de tu error
pero el proceso va a fallar y te costará mucho trabajo encontrar el error,
si hubieras utilizado Option Explicit al compilar te avisaría de toodos y
cada unos de los errores ortográficas.

Además una debida declaración de variables, es decir con los debidos
tiempos, hace que el proceso sea mucho mas rápido,

prrueba este código y lo comprobarás

' esta tarda muuucho
Public Sub Prueba1()
Dim i, _
    j, _
    lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
    j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

' esta casca por que la variable j está mal dimensionada y
' no cabe en ella el resultado (5,00000005E+15)
Public Sub Prueba2()
Dim i As Long, _
    j As Long, _
    lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
    j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

' esta tarda mucho menos
Public Sub Prueba3()
Dim i As Long, _
    j As Double, _
    lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
    j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

Saludos a todos
Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA hotmail.comhttp://www.mvp-access.com/forohttp://www.mvp-access.es/emilio

"isidorodos" escribió en el mensajenews:
Gracias Emilio:

Qué gano con utilizar Option Explicit y dime algún ejemplo de problema
o disgusto que me evito al requerir la declaración de variables.

Me pica el gusanillo :) y perdón por mí ignorancia...

Gracias de nuevo y un saludo.



Gracias Emilio, más o menos lo voy entendiendo

Por otro lado, existe alguna manera rápida de comprobar todos aquellos
formularios, informes, módulos etc que no tengan la declaración de
variables.
Lo digo por no tener que ir mirando uno por uno, ya que son unos
cuantos, jeje ;)

Un saludo y un millón de gracias...
Respuesta Responder a este mensaje
#7 José Mª Fueyo
21/07/2010 - 11:57 | Informe spam
Hola
¿Has definido la variable mibd en algún sitio?

Dim mibd as DAO.Database

Salu2,
José Mª Fueyo
[MS MVP Access]
Respuesta Responder a este mensaje
#8 Emilio
30/07/2010 - 23:11 | Informe spam
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Hola!
acabo de regresar de vacaciones, no te había leido hasta ahora, no se me
ocurre ningún método sencillo, aunque tal vez se pueda hacer algo,
recorriendo lionea a linea, a ver si tengo un rato y lo discurro.

Saludos a todos desde Huelva

Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA hotmail PUNTO com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"isidorodos" escribió en el mensaje de noticias
news:
On 16 jul, 14:07, "Emilio" wrote:
¡Importante!: Colabora con el grupo. Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias
Por ejemplo, no declaras la variable strCliente y trabajas con ella, hasta
que en un determinado momento cometes uns falta de ortografía y en lugar
de
escribir strCliente escribes srtCliente, VBA no te va a avisar de tu error
pero el proceso va a fallar y te costará mucho trabajo encontrar el error,
si hubieras utilizado Option Explicit al compilar te avisaría de toodos y
cada unos de los errores ortográficas.

Además una debida declaración de variables, es decir con los debidos
tiempos, hace que el proceso sea mucho mas rápido,

prrueba este código y lo comprobarás

' esta tarda muuucho
Public Sub Prueba1()
Dim i, _
j, _
lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

' esta casca por que la variable j está mal dimensionada y
' no cabe en ella el resultado (5,00000005E+15)
Public Sub Prueba2()
Dim i As Long, _
j As Long, _
lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

' esta tarda mucho menos
Public Sub Prueba3()
Dim i As Long, _
j As Double, _
lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

Saludos a todos
Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA
hotmail.comhttp://www.mvp-access.com/forohttp://www.mvp-access.es/emilio

"isidorodos" escribió en el
mensajenews:
Gracias Emilio:

Qué gano con utilizar Option Explicit y dime algún ejemplo de problema
o disgusto que me evito al requerir la declaración de variables.

Me pica el gusanillo :) y perdón por mí ignorancia...

Gracias de nuevo y un saludo.



Gracias Emilio, más o menos lo voy entendiendo

Por otro lado, existe alguna manera rápida de comprobar todos aquellos
formularios, informes, módulos etc que no tengan la declaración de
variables.
Lo digo por no tener que ir mirando uno por uno, ya que son unos
cuantos, jeje ;)

Un saludo y un millón de gracias...

__________ Information from ESET Smart Security, version of virus signature
database 5327 (20100730) __________

The message was checked by ESET Smart Security.

http://www.eset.com




__________ Information from ESET Smart Security, version of virus signature database 5327 (20100730) __________

The message was checked by ESET Smart Security.

http://www.eset.com
Respuesta Responder a este mensaje
#9 Emilio
31/07/2010 - 19:31 | Informe spam
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Hola!

No veo mi respuesta de ayer, en la que comentaba:
"acabo de regresar de vacaciones, no te había leido hasta ahora, no se me
ocurre ningún método sencillo, aunque tal vez se pueda hacer algo,
recorriendo linea a linea, a ver si tengo un rato y lo discurro."

He recuperado y retocado un procedimiento para hacer lo que querías, creo
que te puede servir así:

'*******************************************************************************
'* BuscarDeclaracionesIncompletas
'* busca las declaraciones incompletas de todos los módulos de la base de
datos
'* indicada o en su defecto la actual.
'* Si la línea o líneas continuadas (tal como acostumbro hacer yo) contiene
mas
'* de una declaración, solo indicará la primera
'* Argumentos: strBaseDatos => (opcional) ruta de la base de datos remota
'* uso: BuscarDeclaracionesIncompletas
'* ESH 31/07/10 19:22
'* Si utilizas este codigo, respeta la autoría y los créditos
'*******************************************************************************

Public Function BuscarDeclaracionesIncompletas(Optional strBaseDatos As
String) As Variant
Dim Modulo As Object, _
strCodigo As String, _
Matriz As Variant, _
MatrizSalida() As String, _
i As Long, _
j As Long, _
AccessApp As Object

On Error GoTo BuscarDeclaracionesIncompletas_TratamientoErrores

' en caso de que se pase ruta
If Not strBaseDatos = vbNullString Then
Set AccessApp = CreateObject("Access.Application")
AccessApp.OpenCurrentDatabase strBaseDatos
Else
Set AccessApp = GetObject(CurrentProject.FullName)
End If

For Each Modulo In AccessApp.Application.VBE.ActiveVBProject.VBComponents
' meto en una variable el contenido de todas las líneas de código de cada
módulo
strCodigo = Modulo.CodeModule.Lines(1, Modulo.CodeModule.CountOfLines)

' "troceo" el código en una matriz, línea a línea
Matriz = Split(strCodigo, vbNewLine)

' recorro la matriz, guardando en otra solo aquellos fragmentos de línea
que contengan un Dim
' y que no esten comentadas
For i = 0 To UBound(Matriz)
If InStr(Matriz(i), "Dim ") > 0 And Not InStr(Matriz(i), "Redim ") > 0
And Not Left(Trim(Matriz(i)), 1) = "'" Then
' dim al inicio
If Not InStr(Matriz(i), " As ") > 0 Then
' inserto el número de línea y la declaración
ReDim Preserve MatrizSalida(2, j)
MatrizSalida(0, j) = Modulo.Name
MatrizSalida(1, j) = i + 1
MatrizSalida(2, j) = Trim(Matriz(i))
j = j + 1
End If
End If
Next i
Set Modulo = Nothing
Next Modulo

' devuelvo el resultado
BuscarDeclaracionesIncompletas = MatrizSalida
For i = 0 To UBound(MatrizSalida, 2): Debug.Print MatrizSalida(0, i),
MatrizSalida(1, i), MatrizSalida(2, i): Next i


BuscarDeclaracionesIncompletas_Salir:
If Not strBaseDatos = vbNullString Then AccessApp.Quit
Set AccessApp = Nothing
On Error GoTo 0
Exit Function

BuscarDeclaracionesIncompletas_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: BuscarDeclaracionesIncompletas de
Módulo: Módulo8 (" & Err.description & ")", vbCritical + vbOKOnly,
"ATENCION"
Resume BuscarDeclaracionesIncompletas_Salir
Resume Next
End Function ' BuscarDeclaracionesIncompletas

Saludos a todos desde Huelva

Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA hotmail PUNTO com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"isidorodos" escribió en el mensaje de noticias
news:
On 16 jul, 14:07, "Emilio" wrote:
¡Importante!: Colabora con el grupo. Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias
Por ejemplo, no declaras la variable strCliente y trabajas con ella, hasta
que en un determinado momento cometes uns falta de ortografía y en lugar
de
escribir strCliente escribes srtCliente, VBA no te va a avisar de tu error
pero el proceso va a fallar y te costará mucho trabajo encontrar el error,
si hubieras utilizado Option Explicit al compilar te avisaría de toodos y
cada unos de los errores ortográficas.

Además una debida declaración de variables, es decir con los debidos
tiempos, hace que el proceso sea mucho mas rápido,

prrueba este código y lo comprobarás

' esta tarda muuucho
Public Sub Prueba1()
Dim i, _
j, _
lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

' esta casca por que la variable j está mal dimensionada y
' no cabe en ella el resultado (5,00000005E+15)
Public Sub Prueba2()
Dim i As Long, _
j As Long, _
lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

' esta tarda mucho menos
Public Sub Prueba3()
Dim i As Long, _
j As Double, _
lngEmpieza As Single

lngEmpieza = Timer
For i = 1 To 100000000
j = i + j
Next

Debug.Print Timer - lngEmpieza
End Sub

Saludos a todos
Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA
hotmail.comhttp://www.mvp-access.com/forohttp://www.mvp-access.es/emilio

"isidorodos" escribió en el
mensajenews:
Gracias Emilio:

Qué gano con utilizar Option Explicit y dime algún ejemplo de problema
o disgusto que me evito al requerir la declaración de variables.

Me pica el gusanillo :) y perdón por mí ignorancia...

Gracias de nuevo y un saludo.



Gracias Emilio, más o menos lo voy entendiendo

Por otro lado, existe alguna manera rápida de comprobar todos aquellos
formularios, informes, módulos etc que no tengan la declaración de
variables.
Lo digo por no tener que ir mirando uno por uno, ya que son unos
cuantos, jeje ;)

Un saludo y un millón de gracias...

__________ Information from ESET Smart Security, version of virus signature
database 5327 (20100730) __________

The message was checked by ESET Smart Security.

http://www.eset.com




__________ Information from ESET Smart Security, version of virus signature database 5328 (20100731) __________

The message was checked by ESET Smart Security.

http://www.eset.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida