Recorrer varias tablas a la vez en vba

Otra vez mire estoy intentado recorrer una tabla hasta el final y después preguntar si el indice de una tabla coincide con el indice de la otra, el problema es que siempre me sale como que los indices tienen el numero 2 en memoria y siempre me dice que tiene dos registros. Te pongo el código por si me puede echar una mano y me he equivocado en algo.

Private Sub Form_Open(Cancel As Integer)
Dim db1 As Database
Dim db2 As Database
Dim rsdef As Recordset
Dim rsTer As Recordset
Set db1 = CurrentDb
Set rsTer = db1.OpenRecordset("Select Términos.indice from Términos")
Set db2 = CurrentDb
Set rsdef = db2.OpenRecordset("Select Definiciones.Ind_definiciones from Definiciones")
sumar = 0
Do While Not rsdef.EOF
If rsTer!Indice = rsdef!Ind_definiciones Then
sumar = sumar + 1
End If
rsdef.MoveNext
Loop
rsdef.Close
rsTer.Close
Set rsdef = Nothing
Set rsTer = Nothing
End Sub

La variable sumar es publica e integer

Las dos tablas tienen una relación de uno a varios.

La finalidad de este código es contar los registros que coinciden con los dos indices para luego decirme cuantos registros son iguales.

1

1 Respuesta

30.075 pts. Desde hace más de 15 años me dedico profesionalmente a...

No hace falta que declares 2 variables como database si se trata de la misma base de datos

Si lo que quieres es contar los registros en los que indice de Términos e indice de Definiciones son el mismo, puedes hacerlo de una forma diferente.

Private Sub Form_Open(Cancel As Integer)
    Dim MiSQL As String
    Dim rs As Recordset
    Dim db As Database
    Sumar = 0
    MiSQL = "SELECT COUNT (Términos.indice) As Cuenta " & _
            "FROM Términos INNER JOIN Definiciones " & _
            "ON Términos.indice = Definiciones.Ind_definiciones"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(MiSQL)
    If Not (rs.BOF And rs.EOF) Then
        rs.MoveFirst
        Sumar = Nz(rs!Cuenta, 0)
    End If
    rs.Close
    Set rs = Nothing
End Sub

Lo que hago es unir las dos tablas, exigiendo que sólo aparezcan los registros que coinciden, y saco la cuenta.

El resultado del campo lo asigno a la variable.

He echo lo que me has puesto, y ahora la variable sumar siempre tiene el numero 22

no se que estoy haciendo mal, por mas vuelta que le de, veo que todo esta correcto.

Gracias por tu tiempo.

Quizás lo que quieres hacer y lo que has pedido no se corresponden.
Piensa que los índices siempre pueden coincidir. Dime qué es lo que quieres hacer y ya miramos la solución.

Pues lo que quiero hacer es que tengo dos tablas con una relación de uno a varios y cada tabla tiene un indice, las dos tablas son términos y definiciones, es decir un mismo termino puede tener dos o tres definiciones o simplemente una y lo que quiero hacer es cuando entro en el formulario de bajas, me indique cuantas definiciones tiene ese termino y si tiene nada mas una definición inhabilitar con la propiedad enabled dos botones de comandos que he puesto para ir al siguiente registro y otro al anterior.

Espero habértelo explicado lo mejor posible.

Muchas Gracias.

En el formulario de las bajas, habrás de tener un campo indice, y en el evento "Al activar registro" pones lo siguiente:

Dim MiSQL As String
 Dim rs As Recordset
 Dim db As Database
 Sumar = 0
 MiSQL = "SELECT Count(Ind_definiciones) AS Cuenta " & _
 "FROM Definiciones " & _
 "WHERE Ind_definiciones = " & Me.Indice
 Set db = CurrentDb
 Set rs = db.OpenRecordset(MiSQL)
 If Not (rs.BOF And rs.EOF) Then
 rs.MoveFirst
 Sumar = Nz(rs!Cuenta, 0)
 End If
 rs.Close
 Set rs = Nothing

En la variable Suma tienes la cuenta de las definiciones asociadas.

Una solución fantástica, muchas gracias por hacerme participe de sus conocimientos con algunos puntos donde creo que lo estoy llevando bien, y no me da el resultado esperado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas