|
Responder ![]() |
Autor | |
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() Enviado: 05/Marzo/2023 a las 19:45 |
Hola. Estoy tratando de eliminar registros duplicados de una tabla que después de recoger los datos de excel, se quedan duplicados. Pero no soy capaz. Lo que intento hacer es pasar una consulta de agrupación para contar los números de veces que existe un registro con el mismo Pedido y misma Posición. Son los dos datos indistinguibles de los registros. Y luego eliminar los registros que contengan esos datos, el número de veces menos 1. No sé si está bien lo que tengo, yo creo que no, me parece una chapuza pero bueno, en la línea rsttbl.Delete me salta que el registro ya está eliminado. No consigo que el bucle For pase una vuelta menos. ¿Una ayuda plis? Estoy desesperada ![]() Dim strPdDupl As String Dim rstPdDupl As Recordset strPdDupl = "SELECT First(tblHcoPedidos" & iAño & ".Pedido) AS PedidoCampo, First(tblHcoPedidos" & iAño & ".Pos) AS PosCampo, Count(tblHcoPedidos" & iAño & ".Pedido) AS NDeDuplicados " _ & " FROM tblHcoPedidos" & iAño & " GROUP BY tblHcoPedidos" & iAño & ".Pedido, tblHcoPedidos" & iAño & ".Pos " _ & " HAVING (((Count(tblHcoPedidos" & iAño & ".Pedido))>1) AND ((Count(tblHcoPedidos" & iAño & ".Pos))>1));" Set rstPdDupl = CurrentDb.OpenRecordset(strPdDupl) While Not rstPdDupl.EOF Dim x As Integer Dim w As Long w = rstPdDupl!PedidoCampo Dim rsttbl As Recordset Set rsttbl = CurrentDb.OpenRecordset("tblHcoPedidos" & iAño) While Not rsttbl.EOF If rsttbl!Pedido = rstPdDupl!PedidoCampo Then x = rstPdDupl!NDeDuplicados Dim r As Integer For r = 1 To x - 1 rsttbl.Delete Next End If rsttbl.MoveNext Wend rstPdDupl.MoveNext Wend Gracias,
|
|
![]() |
|
Mihura ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13814 |
![]() |
En vez de solucionar el problema no lo crees.
![]() Define en esa tabla un índice único por los campos Pedido y Posicion y cuando vayas a añadirlos a la misma no te dejará hacerlo, como ya no hay duplicados no tendrás que eliminarlos. |
|
![]() |
|
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() |
ayy el problema es que en el fichero de excel, las filas del mismo pedido y posición, tienen diferentes columnas con datos. Una fila tiene la columna cumplimentada del proveedor, otra fila tiene la columna del importe... Es un carajal. Yo lo que hacía era llevármelo a access y ahí tratarlo todo, pasando toda la info a todos los registros con mismo pedido y posición. Pero claro, una vez que ya están, no puedo hacer lo que dices ![]() No sé qué hacer,,
|
|
![]() |
|
Mihura ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13814 |
![]() |
¿Y cuál es el problema? ... la tabla destino es la que no te va a dejar poner duplicados.
Si más no, primero importalo a una tabla temporal y de aquí una vez procesados los pasas a la definitiva. |
|
![]() |
|
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() |
Vale, gracias Mihura, pero hay otro problema jeje. El Pedido y la posición, por separados, sí pueden repetirse. Es decir, puede haber un pedido 9874 y Posición 1 y también puede haber un pedido 9874 y Posición 2 o pedido 8888 y Posición 1 Entonces no puedo poner en la tabla destino un índice único en esos dos campos. Lo que estoy intentando hacer es copiar en la tabla destino pero con GROUP BY o incluso con DISTINCT pero sigo sin lograr que me copie únicamente un solo registro: INSERT INTO tblHcoPedidos2023 (Pedido, Pos, Suministrador, Concepto, Fecha, Importe) SELECT DISTINCT Pedido, Pos, Suministrador, Concepto, Fecha, Importe FROM tblHcoPedidosTemp o INSERT INTO tblHcoPedidos2023 (Pedido, Pos, Suministrador, Concepto, Fecha, Importe) SELECT Pedido, Pos, Suministrador, Concepto, Fecha, Importe FROM tblHcoPedidosTemp GROUP BY tblHcoPedidosTemp.Pedido, tblHcoPedidosTemp.Pos, tblHcoPedidosTemp.Suministrador, tblHcoPedidosTemp.Concepto, tblHcoPedidosTemp.Fecha, tblHcoPedidosTemp.Importe En este último, si pusiese los campos el Pedido y Posición, me copia solo un registro de cada pero claro, la instrucción Group by me obliga a meter todos los campos y ya se descuadra ¿Qué puedo hacer? Mil gracias |
|
![]() |
|
Mihura ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13814 |
![]() |
Se puede crear un índice único con dos o más campos. No hay problema.
|
|
![]() |
|
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() |
ya pero yo si pongo los campos Pedido y Posición como clave (sin duplicados) solo me cogerá un registro de los que tengan varios Pedidos y Posiciones pero como decía antes, puedo tener varios pedidos y posiciones repetidos. Lo importante es la combinación Pedido-Posición. Es decir, por ejemplo, los registros: Pedido 8888 y Posicion 1 Pedido 8888 y Posicion 1 Pedido 8888 y Posicion 2 Pedido 8888 y Posicion 2 Pedido 9999 y Posicion 1 De estos registros, me interesa que coger el pedido 8888 - Posición 1, pedido 8888 - Posición 2 y pedido 9999 - Posición 1 y al ser estos campos clave De todas formas, lo he intentado y no me los pega por la infracción de clave
|
|
![]() |
|
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() |
Ya lo tengo, aunque no sé cómo tirará con la tabla real, he estado haciendo pruebas con una de pruebas de apenas registros. Saco un recordset DISTINCT para sacar los registros únicos, sin duplicar y luego pego los valores de ese recordset a otro de la tabla destino. Dim strUnico As String Dim rstUnico As Recordset Dim rst2 As Recordset strUnico = "SELECT DISTINCT * FROM tblHcoPedidosTemp" Set rstUnico = CurrentDb.OpenRecordset(strUnico) While Not rstUnico.EOF Set rst2 = CurrentDb.OpenRecordset("tblHcoPedidos2023") rst2.AddNew rst2!Pedido = rstUnico!Pedido rst2!Pos = rstUnico!Pos rst2!Suministrador = rstUnico!Suministrador rst2!Concepto= rstUnico!Concepto rst2!Fecha= rstUnico!Fecha rst2!Importe= rstUnico!Importe rst2.Update rstUnico.MoveNext Wend rst2.Close: Set rst2 = Nothing rstUnico.Close: Set rstUnico = Nothing Muchas gracias por todo de todas maneras, Saludos,
|
|
![]() |
|
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() |
bueno, no me funciona del todo jiji, me sigue duplicando algo, bueno voy a serguir dándole vueltas :)
|
|
![]() |
|
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() |
creo que ya está!! es: strUnico = "SELECT DISTINCT Pedido, Pos FROM tblHcoPedidosTemp"
|
|
![]() |
|
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() |
Ahora sí. No podía recoger el resto de valores únicamente con el DISTINCT Pedido, Pos. Ahora está ok Dim strUnico As String Dim rstUnico As Recordset Dim rst1, rst2 As Recordset strUnico = "SELECT DISTINCT Pedido, Pos FROM tblHcoPedidosTemp" 'RECORDSET CON LOS REGISTROS ÚNICOS, CON PEDIDO Y POSICIÓN Set rstUnico = CurrentDb.OpenRecordset(strUnico) While Not rstUnico.EOF 'RECORDSET TABLA ORIGEN CUYO PEDIDO Y POSICIÓN COINCIDE CON EL RECORDSET ANTERIOR Set rst1 = CurrentDb.OpenRecordset("SELECT * FROM tblHcoPedidosTemp WHERE tblHcoPedidosTemp.Pedido = " & rstUnico!Pedido & " AND tblHcoPedidosTemp.Pos = " & rstUnico!Pos) 'RECORDSET TABLA DESTINO Set rst2 = CurrentDb.OpenRecordset("tblHcoPedidos" & iAño) rst2.AddNew rst2!Pedido = rst1!Pedido rst2!Pos = rst1!Pos rst2!Suministrador = rst1!Suministrador rst2!Concepto= rst1!Concepto rst2!Fecha= rst1!Fecha rst2!Importe= rst1!Importe rst2.Update rstUnico.MoveNext Wend rst2.Close: Set rst2 = Nothing rst1.Close: Set rst1 = Nothing rstUnico.Close: Set rstUnico = Nothing |
|
![]() |
|
paloma ![]() Habitual ![]() Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 60 |
![]() |
Por favor, pueden cerrar el hilo, el tema está resuelto tal y como indico en mi último mensaje
|
|
![]() |
Responder ![]() |
|
Tweet
|
Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |