Como definir el nombre de un campo mediante concatenación de variables.

Tengo una tabla con unos campos tipo Si/No que se llaman S1, S2, S3, ... S52. Son semanas. Tengo otros campos que son Semanainicio y periodicidad. Tengo un bucle en el que se almacena la suma de Semanainicio y periodicidad mientras el valor sea menor de 52. En cada bucle quiero activar el registro SX donde X es igual al valor de la suma.

Tengo escrito el siguiente código:

Dim inicio As Byte
Dim periodo As Byte
Dim semana As Byte
Dim sem As String
Dim s As String
Dim conexion As New Connection
Dim tabla As String
Dim mirecordset As New Recordset

inicio = PRIMERASEMANA.Value
periodo = PERIODICIDAD.Value

Set conexion = CurrentProject.Connection
tabla = "SELECT * from GAMAS"
mirecordset.Open tabla, conexion

While semana < 53

If semana = 0 Then
semana = inicio
Else
semana = semana + periodo
End If
sem = CStr(semana)
s = "S" & sem
MsgBox (s)
mirecordset.MoveLast
Set mirecordset!(s)= True
Wend

mirecordset.Close
Set mirecordset = Nothing
conexion.Close
Set conexion = Nothing

Y me da el siguiente error en la linea donde pongo el registro a True:

"El carácter de declaración de tipo no coincide con el tipo de datos declarado"

¿Qué estoy haciendo mal?

1 respuesta

Respuesta

Iker sin profundizar mucho, creo que la línea:

Set mirecordset!(s)= True

Debería ser

Mirecordset. Edit

mirecordset!(s) = True ' o mirecordset!(s) = -1

mirecrdset.Update

Ya me contarás . Saludos >> Jacinto

Muchas gracias. Ahora no me sale el error, pero no me actualiza la tabla. No sé si será porque la tabla es una tabla vinculada de otra base de datos.

Iker: Si la tabla tiene una vinculación correcta no debe ser obstaculo.

Dices que quieres hacer un bucle o eso me parece entender y le das la instrucción de:

Mirecordset. MoveLast

Con esto le dices que se vaya al final del recordset y provocas la salida.

Para dejar que el bucle se ejecute deberías poner

Mirecordset. MoveNext

Hecho ésto, ejecuta el Código paso a paso y mira que valores van tomando las variables, y cada dos otres recorridos puedes mirar la tabla si la va actualizando.

Si esto no te funciona, ya ahondaremos más. Saludos >> Jacinto

Iker: Te escribo unas líneas de código que yo normalmente utilizo para recorrer y

Hacer acciones en un Recordset. Utilizo DAO

Dim StrSQL As String
Dim Rst As DAO.Recordset
StrSQL = “ SELECT * FROM GAMAS;”

Set Rst = CurrentDB.OpenRecordset(StrSQL, dbOpenDynaset)

If Not (Rst.EOF And Rst.BOF) Then ' Si el Registro tiene Datos
         Do While Not Rst.EOF

                    ‘Instrucciones………

                     Rst.MoveNext
                     DoEvents
         Loop
Else
           MsgBox “Este Recordset no tiene Registros”,vbcritical;”FALTAN DATOS”
End If

Rst.Close
Set Rst = Nothing

Espero que te ayude. Saludos >> Jacinto

Iker un despiste: La terminación >>

... Vbcritical;”FALTAN DATOS” debe ser ... vbCritical,"FALTAN DATOS" o sea con una coma en lugar de punto y coma. Saludos >> Jacinto

Muchas gracias. Voy a probar eso y ya os contaré. Con movelast lo que quiero es ir a la última línea para grabar todo en un registro nuevo y no sobreescribir en uno ya programado.

Iker: Estaba repasando preguntas sin valoración y ésta es una de ellas.
Te agradeceré si la valoras, o si necesitas información adicional, me comentas.
Saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas