Validar datos con cuadro de texto 2

En días pasados me resolviste una duda acerca de como validar el texto escrito en un cuadro de texto en access y compararlo con lo que hay en mi tabla, el problema es que al ejecutar la operación access me marca error en la siguiente linea:
Set rst = CurrentDb.OpenRecordset(strSql)
Error "3061" en tiempo de ejecución: pocos parámetros. Se esperaba 1
Ya active la referencia microsoft DAO 3.6 object library, pero no me permite continuar, pienso yo que el código que me pasaste esta muy bien.

1 respuesta

Respuesta
1
Ponme más datos, que valor tiene strSql
¿Puedes ponerme todo el código?
Saludos, te adjunto todo el código:
Private Sub SEMAFORO_AfterUpdate()
Dim mydb As DAO.Database, myrst As DAO.Recordset
Dim NomCamp As String
 Dim NomTabla As String
 Dim CONTEO As Integer
 NomCamp = "[(PRODUCTO)]"
 NomTabla = "(PEDIDOS)"
 alerta = 0
 If Nz(NomCamp, "") <> "" Then
    If Nz(NomTabla, "") <> "" Then
    mydb = "SELECT " & NomCamp & " FROM " & NomTabla & ";"
        Set myrst = CurrentDb.OpenRecordset(mydb)
        With rst
            If (Not .EOF) And (Not .BOF) Then
                Do While Not .EOF
                    If .Fields(0) = SEMAFORO.Value Then
                        CONTEO = 1
                    End If
                    .MoveNext
                Loop
            End If
        End With
    End If
 End If
 If CONTEO = 0 Then
     missatge = MsgBox("El valor existe", vbOKOnly, "Error")
 Else
     missatge = MsgBox("El valor no existe", vbOKOnly, "Error")
End If
End Sub
El código que te puse anteriormente es uno que yo modifique para ver si me salia, el que te pongo a continuación es el original que tu me pasaste:
Private Sub SEMAFORO_AfterUpdate()
Dim rst As DAO.Recordset
 Dim strSql As String
 Dim NomCamp As String
 Dim NomTabla As String
 Dim CONTEO As Integer
 NomCamp = "[(PRODUCTO)]"
 NomTabla = "(PEDIDOS)"
 CONTEO = 0
 If Nz(NomCamp, "") <> "" Then
    If Nz(NomTabla, "") <> "" Then
    strSql = "SELECT " & NomCamp & " FROM " & NomTabla & ";"
        Set myrst = CurrentDb.OpenRecordset(mydb)
        With rst
            If (Not .EOF) And (Not .BOF) Then
                Do While Not .EOF
                    If .Fields(0) = SEMAFORO.Value Then
                        CONTEO = 1
                    End If
                    .MoveNext
                Loop
            End If
        End With
    End If
 End If
 If CONTEO = 0 Then
     missatge = MsgBox("El valor existe", vbOKOnly, "Error")
 Else
     missatge = MsgBox("El valor no existe", vbOKOnly, "Error")
End If
End Sub
Lo que te pongo resaltado es donde me marca el error. Gracias
Sustituye
Dim mydb As DAO.Database, myrst As DAO.Recordset
Por:
Dim mydb As String
Dim myrst As DAO.Recordset
Saludos, espero no causarte ninguna molestia. Te pongo el código y te marco con negritas la linea donde me marca el error :
Se ha producido el error ´3061´ en tiempo de ejecución:
Pocos parámetros. Se esperaba 1.
Private Sub SEMAFORO_AfterUpdate()
Dim rst As DAO.Recordset
 Dim strSql As String
 Dim NomCamp As String
 Dim NomTabla As String
 Dim CONTEO As Integer
 NomCamp = "[(PRODUCTO)]"
 NomTabla = "(PEDIDOS)"
 CONTEO = 0
 If Nz(NomCamp, "") <> "" Then
    If Nz(NomTabla, "") <> "" Then
    strSql = "SELECT " & NomCamp & " FROM " & NomTabla & ";"
        Set myrst = CurrentDb.OpenRecordset(strSql)
        With rst
      If (Not .EOF) And (Not PEDIDOS.BOF) Then
             Do While Not .EOF
                    If .Fields(0) = SEMAFORO.Value Then
                        CONTEO = CONTEO + 1
                    End If
                    .MoveNext
                Loop
            End If
        End With
    End If
 End If
 If CONTEO = 0 Then
     missatge = MsgBox("El valor existe", vbOKOnly, "Error")
 Else
     missatge = MsgBox("El valor no existe", vbOKOnly, "Error")
End If
End Sub
De antemano gracias
Ahora quita:
Set myrst = CurrentDb.OpenRecordset(strSql)
Y pon:
Set rst = CurrentDb.OpenRecordset(strSql)
Saludos, mismo error en misma linea. ¿Qué más podrá ser?
Gracias por tu apoyo.
Ahora quita:
NomTabla = "(PEDIDOS)"
Y pon:
NomTabla = "PEDIDOS"
Saludos, me sigue marcando el mismo error en la misma linea. Gracias
Jolin toy ciego
NomCamp = "[(PRODUCTO)]"
cambialo por:
NomCamp = "[PRODUCTO]"
Saludos, ya no me marca ningún error, pero no me valida ningún dato. Cualquier dato que le ponga me envía el mensaje "el valor existe2 sin importar si este ono en la base de datos.
Pienso que tu código es correcto, pero tal vez falta que te de más información de mi base de datos. Lo que necesito es que busque el valor solo en el formulario activo, no en toda la tabla de pedidos. Tal vez quieras que te la envíe la base y veas en donde es el error.
También ya intente con este código, pero me dice que ningún valor existe, cualquier cosa que yo le ponga, aunque existe ma manda el mensaje de que no.
Private Sub CAPTURA_AfterUpdate()
Dim CAPTURA As Integer
If CAPTURA = DLookup("[PRODUCTO]", "PEDIDOS", Me!CAPTURA = Me!PRODUCTO) Then
Me!CONTEO = Me!CONTEO + 1
Else: MsgBox ("NO EXISTE")
End If
End Sub
De antemano Gracias, si por cualquier razón ya no pudieras seguir contestando mis dudas, no te preocupes de verdad que agradezco tu atención, solo házmelo saber para que cierre la pregunta con tu calificación positiva.
Bien,
ese DLookup no lo veo bien.
Tienes la tabla pedidos, y estas igualando lo que hay en el campo Producto de esa tabla, a lo que haya en un textbox llamado CAPTURA, y el criterio no lo acabo de ver.
Dime los textbox que entran en juego y los campos de la tabla Pedidos que entran en juego y te remonot ese DLookup

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas