![]() |
Temas activados Lista de Usuarios Calendario Búsqueda |
| |
** NORMAS DEL FORO **
| Access y VBA | |
| |
|
| << Anterior Página de 2 |
| Autor | Mensaje | |||||||||||||||||||||||||||||||||||||||||||||||
|
01loko
Colaborador
Agregado: 17/Agosto/2017 Lugar: Santander Estado: Desconectado Mensajes: 393 |
Enviado: 02/Abril/2020 a las 14:54 |
|||||||||||||||||||||||||||||||||||||||||||||||
|
vale, creo que lo habia entendido mal probemos con esto: Dim rcst As Recordset, db As Database
valor_max = DMax("id", "tabla4", "cliente=" & Me.cliente) misql = "select * from tabla4 where cliente=" & Me.cliente Set db = CurrentDb Set rcst = db.OpenRecordset(misql) With rcst Do Until .EOF If !Id < valor_max Then .Edit ![id_sig] = ![Id] + 1 .Update End If .MoveNext Loop End With rcst.Close |
||||||||||||||||||||||||||||||||||||||||||||||||
|
Recordar de que soy nuevo y estoy aprendiendo.
|
||||||||||||||||||||||||||||||||||||||||||||||||
IP conectada |
||||||||||||||||||||||||||||||||||||||||||||||||
|
xavi
Administrador
Terrassa-BCN Agregado: 10/Mayo/2005 Lugar: Catalunya |||| Estado: Desconectado Mensajes: 12080 |
Enviado: 02/Abril/2020 a las 17:03 |
|||||||||||||||||||||||||||||||||||||||||||||||
|
Veamos...
Obtienes el valor_max del id para un cliente dado Tomando los ejemplos: Para cliente 40, máximo 3 Para cliente 41, máximo 5 Para cliente 42, máximo 6 Para cliente 43, máximo 8 Abres una SQL filtrada al cliente dado (Imaginemos el cliente 40) Lo recorres Primera iteración si 1<3 entonces id_sig = 1 + 1 --> 2 (y lo guardas) Segunda iteración si 2<3 entonces id_sig = 2 + 1--> 3 (y lo guardas) A primera vista da resultados correctos... pero porque los Id's son correlativos. Si los ID del cliente 40 fueran 1, 4 y 7, el código devolvería 2 y 3 igualmente cuando deberian ser 4 y 7. Un saludo |
||||||||||||||||||||||||||||||||||||||||||||||||
IP conectada |
||||||||||||||||||||||||||||||||||||||||||||||||
|
01loko
Colaborador
Agregado: 17/Agosto/2017 Lugar: Santander Estado: Desconectado Mensajes: 393 |
Enviado: 02/Abril/2020 a las 17:40 |
|||||||||||||||||||||||||||||||||||||||||||||||
|
Tienes razon, si puedes revisar este otro intento: Dim rcst As Recordset, db As Database misql = "select * from tabla4 where cliente like '*'" Set db = CurrentDb Set rcst = db.OpenRecordset(misql) With rcst Do Until .EOF valor_max = DMax("id", "tabla4", "cliente=" & rcst!cliente) If !Id < valor_max Then .Edit ![id_sig] = Nz(DLookup("id", "tabla4", "id >" & !Id & " and cliente =" & !cliente), "") .Update End If .MoveNext Loop End With rcst.Close Resultado:
estoy aprendiendo mas en este rato, que en varios meses de teclear, juer que nervios no quedar mal con Xavi.
Editado por 01loko - 02/Abril/2020 a las 17:42 |
||||||||||||||||||||||||||||||||||||||||||||||||
|
Recordar de que soy nuevo y estoy aprendiendo.
|
||||||||||||||||||||||||||||||||||||||||||||||||
IP conectada |
||||||||||||||||||||||||||||||||||||||||||||||||
|
xavi
Administrador
Terrassa-BCN Agregado: 10/Mayo/2005 Lugar: Catalunya |||| Estado: Desconectado Mensajes: 12080 |
Enviado: 02/Abril/2020 a las 18:22 |
|||||||||||||||||||||||||||||||||||||||||||||||
|
Si bien obtienes el resultado correcto, cargas demasiado el sistema. Ten en cuenta que cada función de dominio es como una consulta en si misma. Hay que intentar no meter demasiadas en el código o la cosa se vuelve lenta.
Aclaración: yo he aportada una solución basada en una consulta; tu aportas una solución basada en rellenar un campo de la tabla. Yo no he asumido que ese campo existe y, por lo tanto, mi consulta siempre devuelve datos sin actualizar nada (salvo que me haya equivocado, que puede ser). Mi solución se puede convertir en una consulta de actualización y se obtiene el resultado en la tabla. De hecho, mi consulta se puede "ahorrar" la comprobación de fecha, dado que el iniciador del hilo ha dicho que son secuenciales en el tiempo. Si lo que se pretende es actualizar un campo de la tabla mediante un recordset, yo optaría por aplicar la misma técnica: buscar el primer registro dónde se cumpla que sea el mismo cliente y que el Id sea superior al actual. Para asegurar, forzar ordenación. Set rst = CurrentDb.OpenRecordset("SELECT * FROM Tabla1 ORDER BY Id") Do Until rst.EOF rst.Edit rst!Id_Siguiente = DFirst("Id", "Tabla1", "Cliente = " & rst!Cliente & " And Id > " & rst!Id) rst.Update Loop rst.Close Set rst = Nothing Un saludo
|
||||||||||||||||||||||||||||||||||||||||||||||||
IP conectada |
||||||||||||||||||||||||||||||||||||||||||||||||
|
Jesusdvd
Asiduo
Agregado: 12/Abril/2005 Lugar: Colombia Estado: Desconectado Mensajes: 273 |
Enviado: 02/Abril/2020 a las 22:28 |
|||||||||||||||||||||||||||||||||||||||||||||||
|
Bueno pues he hecho lo que me has explicado Xavi y ha funcionado de maravilla, en efecto está ordenado por Id y el campo Fecha no era necesario, en efecto 01Loko se trataba de rellenar una tabla por lo que he hecho una consulta de actualización y la instrucción ha quedado así:
DPrim("[Id]";"Tabla1";"[Cliente]='" & [Tabla1]![Cliente] & "'AND [Id]>" & [Tabla1]![Id]) La he puesto a correr sobre unos 900 mil registros y de momento lleva 5 min procesando... ya les contaré cuánto tiempo me ha tomado y procederemos a cerrar... Xavi sos un crack! |
||||||||||||||||||||||||||||||||||||||||||||||||
|
...en el mundo existen 10 clases de personas, las que conocen los binarios y las que no....
|
||||||||||||||||||||||||||||||||||||||||||||||||
IP conectada |
||||||||||||||||||||||||||||||||||||||||||||||||
|
Jesusdvd
Asiduo
Agregado: 12/Abril/2005 Lugar: Colombia Estado: Desconectado Mensajes: 273 |
Enviado: 13/Abril/2020 a las 16:57 |
|||||||||||||||||||||||||||||||||||||||||||||||
|
Hola, como lo mencioné arriba la consulta funciona a la perfección, en los 900 mil registros no he logrado culminarla debido a que han pasado más de 6 horas sin resultado, he segmentado en varias tablas de menor tamaño y he logrado que funcione aunque toma mucho tiempo. Pero perfecto! Muchas gracias a todos.
Se puede cerrar el hilo |
||||||||||||||||||||||||||||||||||||||||||||||||
|
...en el mundo existen 10 clases de personas, las que conocen los binarios y las que no....
|
||||||||||||||||||||||||||||||||||||||||||||||||
IP conectada |
||||||||||||||||||||||||||||||||||||||||||||||||
| << Anterior Página de 2 | |
|
||
Seleccione Foro |
Tú no puedes enviar nuevos Temas al Foro Tú no puedes responder a los Temas de este Foro Tú no puedes borrar los mensajes en este Foro Tú no puedes editar los mensajes de este Foro Tú no puedes crear encuesta en este Foro Tú no puedes votar en encuesta en este Foro |
|