¿Cómo convierto a continuación el rango de valores A y A en filas individuales como se muestra en A en MS Access?

From:
Role    Field  From     To
Role1   F1      9411    9413
Role2   F2      9410    9412

To:
Role    Field  Value
Role1   F1      9411    
Role1   F1      9412    
Role1   F1      9413    
Role2   F2      9410    
Role2   F2      9411
Role2   F2      9412
0
Lord OfTheRing 22 jun. 2020 a las 20:57

2 respuestas

Lo que puede hacer es hacer un bucle de los registros en la primera tabla y luego tener un bucle "interno" que vaya entre los dos valores para agregar datos a la segunda tabla. Algo como:

Sub sAddData()
    On Error GoTo E_Handle
    Dim db As DAO.Database
    Dim rsSteer As DAO.Recordset
    Dim rsData As DAO.Recordset
    Dim lngLoop1 As Long
    Set db = DBEngine(0)(0)
    db.Execute "DELETE * FROM tblTo;"
    Set rsSteer = db.OpenRecordset("tblFrom")
    If Not (rsSteer.BOF And rsSteer.EOF) Then
        Set rsData = db.OpenRecordset("tblTo")
        Do
            For lngLoop1 = rsSteer("From") To Nz(rsSteer("To"), rsSteer("From"))
                rsData.AddNew
                rsData("Role") = rsSteer("Role")
                rsData("Field") = rsSteer("Field")
                rsData("Value") = lngLoop1
                rsData.Update
            Next lngLoop1
            rsSteer.MoveNext
        Loop Until rsSteer.EOF
    End If
sExit:
    On Error Resume Next
    rsSteer.Close
    rsData.Close
    Set rsSteer = Nothing
    Set rsData = Nothing
    Set db = Nothing
    Exit Sub
E_Handle:
    MsgBox Err.Description & vbCrLf & vbCrLf & "sAddData", vbOKOnly + vbCritical, "Error: " & Err.Number
    Resume sExit
End Sub

Saludos

0
Applecore 23 jun. 2020 a las 05:50

Puede usar una consulta cartesiana (multiplicadora).

Primero, cree una pequeña consulta:

SELECT DISTINCT Abs([id] Mod 10) AS N
FROM MSysObjects;

Guárdelo como Diez y luego cree la consulta final:

SELECT 
    RoleNumbers.Role, 
    RoleNumbers.Field, 
    [From] + [N] AS [Value]
FROM 
    RoleNumbers, 
    Ten
WHERE 
    [From] + [N] <= [To]
ORDER BY 
    RoleNumbers.Role, 
    [From] + [N];

Salida:

enter image description here

0
Gustav 23 jun. 2020 a las 08:59