Access - Bucle para dar de alta registros dado de baja

 
Vista:
sin imagen de perfil

Bucle para dar de alta registros dado de baja

Publicado por andres (42 intervenciones) el 28/02/2023 13:57:40
Buenas espero estén bien.
Me surgió el siguiente inconveniente
Tengo una base de datos de un club para las categorías, cuando finaliza el torneo a fin de año se le da de baja a todas las categorías (eso lo tengo resuelto) el problema me surge cuando tengo que volver a dar de alta (se da siempre en febrero) la misma cantidad de categorías, del año pasado. La verdad que no le encuentro la vuelta.
Ahora bien, tengo una tabla
T_Plantel con los siguientes campos
Plant_Div (DAMAS DECIMA)
Plant_Id_Div (1)
Plant_Gener (Femenino)
Plant_Estado (Vencida)
Plant_Ano (2022)
Plant_Entrenad_ApellyNomb (acá como es obligatorio le pongo “A confirmar”)

Y otra tabla T_0_Division con los campos
Div_id_Div (1)
Div_Division (DAMAS DECIMA)
Div_Id_Genero (Femenino)
Espero puedan darme una mano ya que pronto tengo que darle de alta.
Muchas gracias!!

form
form1
T_o_divi
T_o_divi1
T_Plantel
T_Plantel1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Bucle para dar de alta registros dado de baja

Publicado por Anonimo (3316 intervenciones) el 28/02/2023 18:46:55
Si la tabla [T_0_Division] se mantiene entre temporadas y la tabla [T_Plantel] es la misma todos los años (puede cambiar [Plant_Ano] y [Plant_entrenad_ApellyNomb]) no veo la necesidad de borrar la tabla y reconstruirla.

En todo caso los datos actuales de/en [T_Plantel] se envían a un histórico (una consulta de datos añadidos) y a la tabla se le actualiza el campo año año con el que corresponda y al campo entrenador (a la espera de que se formalice) se le pone como nombre un interrogante.

El campo [Plan_Id] de la tabla [T_Plantel] ¿se le utiliza en algún sitio?, en principio ya hay un campo que puede hacer ese cometido y puede ser (también en esta tabla) un identificador único.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Bucle para dar de alta registros dado de baja

Publicado por andres (42 intervenciones) el 28/02/2023 23:27:51
Hola, gracias por tu tiempo..
Te comento ahora que veo tu respuesta me doy cuenta que no fui claro.
Debo mantener todos los registros en la tabla plantel, dar de baja quise decir que en el campo Plant_Estado se coloca "Vencida" y darle de alta tengo que creear nuevos registros como les di de de baja.
Tuviese que copiar el campo Plant_Div (por ej.; DAMAS DECIMA), Plant_Gener (Femenino) y en el campo Plant_Ano (ej.; 2023), Plant_Estado (Vigente), Plant_Entrenad_ApellyNomb (acá como es obligatorio le pongo “A confirmar”)
Espero me hayas/an entendido ahora. Si no es así me dicen y trato de explicarme mejor.
Gracias..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle para dar de alta registros dado de baja

Publicado por Anonimo (3316 intervenciones) el 01/03/2023 01:21:35
Entonces lo que deseas se parece a duplicar todos los registros que tengan el año actual =2022 pero que: el año = 2023, estado = vigente y el entrenador = 'a confirmar'.

Quizas esto te sea util, para poder utilizarlo:
.- Crea una nueva consulta
.- NO selecciones ninguna tabla
.- Aceptas
.-Veras un icono que pone 'Vista SQL'
.- Click en el

En la ventana que se abre, pegas esto sobre lo que contenga:

1
2
3
4
5
PARAMETERS [Que año] Text ( 255 );
INSERT INTO T_Plantel ( Plant_id_Div, Plant_Div, Plant_Estado, Plant_Ano, Plant_Gener, Plant_Entrend_ApellyNom )
SELECT T_Plantel.Plant_id_Div, T_Plantel.Plant_Div, "Vigente" AS DT1, (Val([que año])+1) AS DT2, T_Plantel.Plant_Gener, "A confirmar" AS DT3
FROM T_Plantel
WHERE (((T_Plantel.[Plant_Ano])=([Que año])));

Dile que año y duplicara los datos de ese año cambiando el año (le añade uno al que indiques) y actualizando los campos [Plant_Estado] + [Plant_Entrenad_ApellyNomb].

ATENCION:
Si la tabla no tiene una regla que impida el duplicar [Plant_Ano] + [Plant_id_Div] (por lo menos el conjunto de esos dos campos), cada vez que ejecutes la consulta añadirá los mismos datos una y otra vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Bucle para dar de alta registros dado de baja

Publicado por andres (42 intervenciones) el 01/03/2023 02:46:55
Gracias, por tu tiempo, voy a probarlo, el problema que veo es que por ahi a lo mejor un año una categoria no participa.

Lo estoy intentando con un bucle pero me repite siempre el mismo. nombre de categoria dejo el codigo por ahi me podes ayudar.

En el formulario que tengo el boton al hacer click


Private Sub Alta_Plantel_Click()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("T_Plantel", dbOpenTable)
Do Until rs.EOF
Call CreaPlantel(rs!Plant_Id_Div, rs!Plant_Ano, rs!Plant_Estado) '(Division As String, Res_Ano As Integer, Estado As String)
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Me.Requery
End Sub

Declaración de la función pública

Option Compare Database

Public Function CreaPlantel(Ident_Div As Byte, Ano_Plant As Integer, Estado_Plant As String)

Dim rs As Recordset

Dim Plant_Ano As Byte

Dim busca_plant As Long

Dim Busca_Id_Plant As Byte

Dim Genero As String

Dim id_plan As Long

Dim plantel As String

Dim Entrenador As String

Dim id_estado As String

Dim guarda As Long

Dim id_div_plan As Long

Dim id_div As Long


vAnyoNow = Year(Date)
vMesNow = Month(Date)
vDiaNow = Day(Date)

Res_Ano = vAnyoNow - 1

Estado = "VIGENTE"
Entrenador = "A Confirmar"
Plant_Id_Entren = "6"
Res_Ano = vAnyoNow - 1

Busca_Id_Plant = DCount("*", "T_Plantel", "Plant_Id_Div =" & Ident_Div & " And Plant_Estado=""Vigente"" And Plant_Ano='" & vAnyoNow & "'")

If Busca_Id_Plant = 0 Then

id_div_plan = DLookup("Plant_Id_Div", "T_Plantel", "Plant_Estado=""VENCIDA"" AND plant_ano ='" & Res_Ano & "'")


id_divi = DLookup("Div_id_Div", "T_0_Division", "Div_Division='" & plantel & "' AND Div_id_Div =" & id_div_plan & "")

'Plant_Ano vAnyoNow

'Plant_Gener
Genero = DLookup("Plant_Gener", "T_Plantel", "Plant_Estado=""VENCIDA"" AND plant_ano ='" & Res_Ano & "'") 'GENERO DE LA DIVISION DEL AÑO ANTERIOR

'Plant_Estado
Plant_Est = DLookup("Plant_Estado", "T_Plantel", "Plant_Estado=""ARCHIVADO""") 'DEVULVE LA CANTIDAD DE PLANTELES ARCHIVADOS

'Plant_Div
plantel = DLookup("Plant_Div", "T_Plantel", "Plant_Estado=""VENCIDA"" AND plant_ano ='" & Res_Ano & "'") 'NOMBRE DE LA DIVISION DEL AÑO ANTERIOR

'Plant_Entrenad_ApellyNomb Entrenador = "A Confirmar"

'Plant_Id_Entren Plant_Id_Entren = "6"

'Plant_Id_Edad
Edad_Cate = DLookup("Div_id_Edad", "T_0_Division", "Div_Division = '" & plantel & "' And Div_id_Div=" & id_div_plan & "") ' DIVISION Y AÑO ACTUAL

strSQL = "INSERT INTO T_Plantel(Plant_Ano, Plant_Gener, Plant_Estado,Plant_Div, Plant_Entrenad_ApellyNomb, Plant_Id_Entren,Plant_Id_Edad) VALUES ('" & vbCrLf
strSQL = strSQL & vAnyoNow & "','" & Genero & "','" & Estado & "','" & plantel & "','" & Entrenador & "','" & Plant_Id_Entren & "' ," & Edad_Cate & ")"

CurrentDb.Execute strSQL


End If

End Function



Tengo dos inconvenientes. como mencione al principio no recorre solo me repite una misma categoria.
y ahora me da un error adjunto la imagen

error


Aguardo una ayudita. Gracias a todos de antemano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle para dar de alta registros dado de baja

Publicado por Anonimo (3316 intervenciones) el 01/03/2023 20:20:32
La solución la veo en 'cambiar el enfoque':

En la exposición ampliada quedaron cosas en el tintero como que había una tabla mas con una (supuesta) lista de los grupos a crear y que en la tabla [T_0_Plantel] hay (por lo menos) un campo mas que se relaciona con la edad de los participantes en cada grupo y no se ve en el diseño.

Se parte de que solo se pueden crear grupos que existan en la tabla [T_0_Division] en la que a sus dos campos le añadiría uno mas (de tipo booleano) y de nombre ¿Activo?.

A la hora de planificar el siguiente ciclo, iniciaría el campo [Activo] de la tabla [T_0_Division] a cero (False) y activaría los que se van a crear este año (los pasaría a TRUE).

Un bucle que recorra a la tabla [T_0_Division] y que por cada registro que tenga activado el campo [activo] localice en tabla [T_Plantel] el primer [Div_Id_Div] coincidente (o el ultimo, carece de importancia) y lo insertase el la tabla [T_Plantel] modificando solo las diferencias ( estado, año, entrenador, edad ..).

Con respecto al proceso publicado, comenzaría por eliminar todas las variables que no son necesarias y reduciría las necesarias a imprescindibles (ejemplo: si tengo un año y deseo el anterior: le resto uno y no se necesita la variable), variable que para que fuera fiel habrá que volver a actualizar si se modifica el año.

Curiosidad: con alguna excepción todos los campos son de tipo alfanumérico aunque su tipo 'natural' sea numérico ¿hay alguna razón que lo imponga/justifique?

Otra curiosidad: la edad ¿no es un atributo del grupo [T_0_Division]?

P.D.
Con el código anterior, si este año no es continuación del anterior o el siguiente continuación del actual, tras una 'copia adaptada' se eliminan los que este año no están activos y se añade a los que el año anterior no existían.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Bucle para dar de alta registros dado de baja

Publicado por andres (42 intervenciones) el 03/03/2023 00:23:49
Hola gracias por tu tiempo, sinceramente no logro encontrar la vuelta, me crea todas las categorias pero no logro que a las categorias del año anterior en el campo Plant_Estado me coloque archivado para evitar que el proximo año me cree las categorias con dos años de antiguedad.
Al darle de baja me pone a todos tuviese que poner solo a los del año anterior vencida

adjunto la base por si alguien que darme su ayuda.
Desde ya agradezco a todos por su tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle para dar de alta registros dado de baja

Publicado por Anonimo (3316 intervenciones) el 03/03/2023 03:55:10
Ojeare la base, pero lo de cambiar la categoría del año pasado no estaba en el guion, creía que se daban de baja en momentos diferentes (al acabar la temporada o ciclo según fueran finalizando los compromisos).

Dar de baja todo el año anterior es sencillo (una línea mas):

DoCmd.RUnSQL "Update T_Plantel Set Plant_Estad = 'Vencida' where Plant_Ano = '" & [Que Año] & "'"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Bucle para dar de alta registros dado de baja

Publicado por andres (42 intervenciones) el 03/03/2023 13:38:24
Nuevamente agradecido.
Respecto a cambiar la categoría me surgió como parámetro para que se pueda diferenciar cuales se tiene que crear, por esa razón puse Vigente (año en curso)
Vencida (año pasado) (dado de baja para luego se creen con el año actual una vez creado debe pasar a Archivado)
Archivado (a los planteles que fueron creados)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar