
Error parametros al copiar tabla a tabla por sql
Publicado por Roland (3 intervenciones) el 31/10/2022 11:07:02
Buenas a todos! Estoy tratando de copiar los datos de un campo (USUARIOS) de una tabla (TBL_ORIGEN) a otra tabla (TBL_USUARIOS). El origen tiene usuarios repetidos, y quiero que el destino tenga los usuarios únicos, es decir, lo mismo que en origen, pero sin estar repetidos..
la sentencia sql que uso es la siguiente: sql = "SELECT DISTINCT usuarios FROM tbl_origen" pero me da error de parametros (pocos parametros, se esperaba 1)
os copio el codigo de la funcion:
Dim db As DAO.Database, sql As String
Dim rstL, rstE As DAO.Recordset
Dim i As Integer
'VOLCADO DE LA TABLA USUARIOS'
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
sql = "SELECT * FROM tbl_origen usuarios" 'Cógeme todos los datos de la tabla tbl_origen
Set db = CurrentDb() 'Asigno a db la base de datos actual que tengo abierta
Set rstL = db.OpenRecordset(sql, dbOpenForwardOnly) 'rstL apunta a la tabla tbl_origen en modo solo lectura
Set rstE = db.OpenRecordset("tbl_usuarios", dbOpenDynaset) 'rstE apunta a la usuarios en modo escritura
i = 1 'esta variable nos irá introduciendo los ID primary key de cada tabla
If rstE.BOF = True And rstE.EOF = True Then 'Si principio de fichero y final de fichero son verdaderos, entonces la tabla esta vacía
With rstE
Do Until rstL.EOF
.AddNew
!ID = i
i = i + 1
!nombre = rstL!usuario
If !nombre = "_" Then
!nombre = "NINGUNO"
End If
.Update
rstL.MoveNext
Loop
End With
rstL.Close
rstE.Close
db.Close
MsgBox "Datos volcados con éxito", vbInformation, "Aviso"
Else
MsgBox "Antes de volcar los nuevos datos debe eliminar los datos anteriores", vbInformation, "Aviso"
End If
Lo curioso que no entiendo es por qué si uso sql = "SELECT * FROM tbl_origen" no me da error, y me copia los datos, pero claro, me los copia todos, con sus repeticiones, y eso no me vale.
Tambien he probado a hacerlo con un UPDATE y me tira el mismo error en la misma linera:
la linea que me da el error es en el primero set:
Set rstL = db.OpenRecordset(sql, dbOpenForwardOnly) 'rstL apunta a la tabla tbl_origen en modo solo lectura
¿Podéis ayudarme amigos? muchas gracias!
la sentencia sql que uso es la siguiente: sql = "SELECT DISTINCT usuarios FROM tbl_origen" pero me da error de parametros (pocos parametros, se esperaba 1)
os copio el codigo de la funcion:
Dim db As DAO.Database, sql As String
Dim rstL, rstE As DAO.Recordset
Dim i As Integer
'VOLCADO DE LA TABLA USUARIOS'
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
sql = "SELECT * FROM tbl_origen usuarios" 'Cógeme todos los datos de la tabla tbl_origen
Set db = CurrentDb() 'Asigno a db la base de datos actual que tengo abierta
Set rstL = db.OpenRecordset(sql, dbOpenForwardOnly) 'rstL apunta a la tabla tbl_origen en modo solo lectura
Set rstE = db.OpenRecordset("tbl_usuarios", dbOpenDynaset) 'rstE apunta a la usuarios en modo escritura
i = 1 'esta variable nos irá introduciendo los ID primary key de cada tabla
If rstE.BOF = True And rstE.EOF = True Then 'Si principio de fichero y final de fichero son verdaderos, entonces la tabla esta vacía
With rstE
Do Until rstL.EOF
.AddNew
!ID = i
i = i + 1
!nombre = rstL!usuario
If !nombre = "_" Then
!nombre = "NINGUNO"
End If
.Update
rstL.MoveNext
Loop
End With
rstL.Close
rstE.Close
db.Close
MsgBox "Datos volcados con éxito", vbInformation, "Aviso"
Else
MsgBox "Antes de volcar los nuevos datos debe eliminar los datos anteriores", vbInformation, "Aviso"
End If
Lo curioso que no entiendo es por qué si uso sql = "SELECT * FROM tbl_origen" no me da error, y me copia los datos, pero claro, me los copia todos, con sus repeticiones, y eso no me vale.
Tambien he probado a hacerlo con un UPDATE y me tira el mismo error en la misma linera:
la linea que me da el error es en el primero set:
Set rstL = db.OpenRecordset(sql, dbOpenForwardOnly) 'rstL apunta a la tabla tbl_origen en modo solo lectura
¿Podéis ayudarme amigos? muchas gracias!
Valora esta pregunta


0