Cambiar valor predeterminado tabla vinculada
Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85301
Fecha de impresión: 20/Abril/2024 a las 17:15
Tema: Cambiar valor predeterminado tabla vinculada
Publicado por: Nomada
Asunto: Cambiar valor predeterminado tabla vinculada
Fecha de publicación: 25/Mayo/2020 a las 12:23
Buenas. Tengo una base de datos dividida con tablas vinculadas con contraseña, y al intentar cambiar el valor predeterminado de un campo me aparece el error: "La operación no es compatible con tablas vinculadas."
Creo recordar que es por el "DYNASET" o algo parecido. El código que uso para cambiar del valor predeterminado es: If Me.checkCuotAgua = True Then CurrentDb.TableDefs("T_Trimestre_AAB").Fields("TRI_CuotaAgua").DefaultValue = Me.vTRI_CuotaAgua
Alguna sugerencia? Gracias
|
Respuestas:
Publicado por: xavi
Fecha de publicación: 25/Mayo/2020 a las 13:14
Tienes que conectar con la BDD dónde está la tabla. Te está devolviendo el mismo error que si intentas cambiar el diseño de una tabla vinculada.
Dim app As Application
Set app = CreateObject("Access.Application") app.OpenCurrentDatabase rutacompletaalabdd, , password
app.CurrentDb.TableDefs("T_Trimetre_AAB").Fields("TRI_CuotaAgua").Properties("DefaultValue") = Me.vTRI_CuotaAgua
app.CloseCurrentDatabase Set app = Nothing
|
Escrito al vuelo
------------- Xavi, un minyó de Terrassa
http://www.llodax.com" rel="nofollow - Mi web
|
Publicado por: rokoko
Fecha de publicación: 25/Mayo/2020 a las 13:36
Esto es lo que tengo yo en mis chuletas..CAMBIAR EL VALOR
PREDETERMINADO DE UNA TABLA VINCULADA EN ACCESS
'Actualizamos el valor predeterminado de un campo de
una tabla vinculada:
'- Tabla: Nombre que le hemos dado a la tabla
vinculada en la base de datos activa
'- Campo: Nombre del campo que queremos modificar
'- Valor: Nuevo valor predeterminado
Function ActualizarPropiedad(Tabla As String, Campo
As String, Valor)
Dim dbs As DAO.Database
Dim strTablaOriginal As String
'Recuperamso el nombre de la tabla original
strTablaOriginal = CurrentDb.TableDefs(Tabla).SourceTableName
'Abrimos
la base de datos donde se encuentra realmente la tabla
Set dbs = OpenDatabase("", False, False,
CurrentDb.TableDefs(Tabla).Connect)
With dbs
'Modificamos el valor por defecto
.TableDefs(strTablaOriginal).Fields(Campo).DefaultValue = Valor
'Y
cerramos la base de datos
.Close
End With
Set dbs = Nothing
MsgBox "Dato cambiado correctamente.",
vbInformation
End Function
Para llamar a la función
ActualizarPropiedad(TablaVinculada As String, Campo
As String, Valor)
ActualizarPropiedad
"NombreTabla", "NombreCampo", Me.NombreControlFormulario
CAMBIAR EL VALOR
PREDETERMINADO DE UNA TABLA VINCULADA EN ACCESS CUANDO LAS TABLAS SON DE UNA
BASE DE DATOS EXTERNA
'Actualizamos el valor
predeterminado de un campo de una tabla vinculada:
'- Tabla: Nombre que le hemos
dado a la tabla vinculada en la base de datos activa
'- Campo: Nombre del campo que
queremos modificar
'- Valor: Nuevo valor
predeterminado
Function
ActualizarPropiedad(Tabla As String, Campo As String, Valor)
Dim dbs As DAO.Database
'Abrimos la base de datos donde se encuentra
realmente la tabla
Set dbs = OpenDatabase("Nombre y ruta
de la base de datos", False, False, ";PWD=" & contraseña)
With dbs
'Modificamos el valor por defecto
dbs.TableDefs(Tabla).Fields(Campo).DefaultValue = Valor
'Y cerramos la base de datos
.Close
End
With
Set
dbs = Nothing
MsgBox
"Valor predeterminada cambiado correctamente.", vbInformation
End Function
Cambiar valor predeterminado
de una tabla local
CurrentDb.TableDefs("NombreTabla").Fields("NombreCampo").DefaultValue
= “333”
CurrentDb.TableDefs("tbFacturas").Fields("MesesGarantia").DefaultValue
= Me.txtGarantia
|
Publicado por: Nomada
Fecha de publicación: 25/Mayo/2020 a las 18:58
Rokoko creo que mi opción es la de "Cambiar el valor predeterminado de una tabla vinculada en Access cuando las tablas son de una base de datos externa", pues veo que tiene la opción de contraseña. Lo que no entiendo es la parte de: Para llamar a la función
ActualizarPropiedad(TablaVinculada As String, Campo
As String, Valor)
ActualizarPropiedad
"NombreTabla", "NombreCampo", Me.NombreControlFormulario
gracias.
|
Publicado por: xavi
Fecha de publicación: 25/Mayo/2020 a las 19:08
El método OpenDatabase del DAO.WorkSpace tiene varios argumentos (lo pone en la ayuda). Uno ellos permite poner el password.
El metódo de DAO.OpenCurrentDatabase es (para mi) más sencillo de utilizar.
Aunque el resultado es el mismo, obviamente.
------------- Xavi, un minyó de Terrassa
http://www.llodax.com" rel="nofollow - Mi web
|
Publicado por: Nomada
Fecha de publicación: 25/Mayo/2020 a las 19:08
Xavi probando con tu código me da el error: "Error de sintaxist (coma) en la expresión de validación de tablas." y al clicar en "depurar" me señala la siguiente línea: app.CurrentDb.TableDefs("Tabla1").Fields("Agua").Properties("DefaultValue") = Me.vAAA
Pda. estoy haciendo una prueba con una tabla de nombre Tabla1 y el campo moneda Agua, donde escribo en el campo independiente vAAA para tomar el valor predeterminado. El código final quedaría: Dim app As Application
Set app = CreateObject("Access.Application") app.OpenCurrentDatabase "D:\PASO\PRUEBA\pruebaExportar_be.accdb", , 12345
app.CurrentDb.TableDefs("Tabla1").Fields("Agua").Properties("DefaultValue") = Me.vAAA
app.CloseCurrentDatabase Set app = Nothing
gracias.
|
Publicado por: rokoko
Fecha de publicación: 25/Mayo/2020 a las 19:18
Nomada escribió:
Rokoko creo que mi opción es la de "Cambiar el valor predeterminado de una tabla vinculada en Access cuando las tablas son de una base de datos externa", pues veo que tiene la opción de contraseña. Lo que no entiendo es la parte de: Para llamar a la función
ActualizarPropiedad(TablaVinculada As String, Campo
As String, Valor)
ActualizarPropiedad
"NombreTabla", "NombreCampo", Me.NombreControlFormulario
gracias.
|
Pues es la forma de llamar a la funcion pasandole los 3 parametros necesarios. En el ehemplo el valor lo cojo de un campo, pero se puede poner dorectamente en la funcion si quieres, pero claro no se puede modificar sin entrara codigo vba, de hay que en el ejemplo lo pillo de un campo de un fromulario, para cambiarlo cuando lo desee sin necesidad de eitar el codigo vba al llamr a la funcion.
ActualizarPropiedad(TablaVinculada As String, Campo As String, Valor)
Tal cua asi ActualizarPropiedad "NombreTabla", "NombreCampo", "NuevoValorPredeterminado"
|
Publicado por: rokoko
Fecha de publicación: 25/Mayo/2020 a las 19:22
Esto en lo que tengo yo en una base de datos real, cambio la hora predeterminada al darle a un boton
Dim varHora As Date varHora = Me.txtHora 'Pillo la hora de del campo txtHora del formulario, asi modifico tantas veces quiera
ActualizarPropiedad "tbFicha", "Hora", "#" & varHora & "#" msgbox"Hora cambiada correctamente"
Ten en cuanta que a la funcion tendras que ponerle el directorio de la base de datos y contraseña si la tubiese
'Abrimos la base de datos donde se encuentra realmente la tabla Set dbs = OpenDatabase(constDirectorio, False, False, ";PWD=" & constPass)
En este caso yo le paso los datos mediante dos constantes que tengo en un modulo
Si se lo quieres pasar directamente seria asi Set dbs = OpenDatabase("C:\NombreBaseDatos.mdb", False, False, ";PWD=" & "LaContraseña")
Tambien habria formas de sacar el directorio y contraseña directamente de las tablas del sistema de access, por si la ruta la vas cambiando de vez en cuando, esta se cambia sola sin necesidad de entrar a editar el codigo....
|
Publicado por: Nomada
Fecha de publicación: 25/Mayo/2020 a las 19:24
Rokoko, después de escribir lo siguiente: ActualizarPropiedad(Tabla1 As String, Agua As Currency, vValor) me dice: "Se esperaba: separador de listas o)"
Hay algo mal?
|
Publicado por: rokoko
Fecha de publicación: 25/Mayo/2020 a las 19:30
Nomada escribió:
Rokoko, después de escribir lo siguiente: ActualizarPropiedad(Tabla1 As String, Agua As Currency, vValor) me dice: "Se esperaba: separador de listas o)"
Hay algo mal?
|
Hay no le estas pasando los parametros..
ActualizarPropiedad("Tabla1" , "Agua", "5")
El nombre de la tabla, nombre del campo y el valor que quieres como predeterminado. Prueba a ver
Separador de listas se refiere a las comillas dobles que tiene que llevar el parametro que le pasas
|
Publicado por: Nomada
Fecha de publicación: 25/Mayo/2020 a las 19:42
Rokoko con el siguiente código me da el error: Private Sub Comando5_Click() ActualizarPropiedad "Tabla1 As String", "Agua As Variant", "vCuota as Variant" End Sub
Function ActualizarPropiedad(Tabla1 As String, Agua As Variant, vCuota As Variant) Dim dbs As DAO.Database vCuota = Me.vCuota Set dbs = OpenDatabase("D:\PASO\PRUEBA\pruebaExportar_be.accdb", False, False, ";PWD=12345")
With dbs dbs.TableDefs(Tabla1).Fields(Agua).DefaultValue = vCuota End With
Set dbs = Nothing
MsgBox "Valor predeterminada cambiado correctamente.", vbInformation End Function
Error:
"No se encontró el elemento en esta colección" y me señala la línea dbs.TableDefs(Tabla1)...
|
Publicado por: rokoko
Fecha de publicación: 25/Mayo/2020 a las 19:47
No no no....La funcion no la tienes ni que tocar!!!!!!! Bueno si, para pasarle la ruta de la base de datos claro y contraseña, nada mas
Function ActualizarPropiedad(Tabla As String, Campo As String, Valor) 'ESTO SON LOS PARAMETROS A PASARLE NO TIENES QUE TOCARLOS; SE LOS PASAS CON EL CODIGO DEL BOTON Dim dbs As DAO.Database 'Abrimos la base de datos donde se encuentra realmente la tabla
Set dbs = OpenDatabase("D:\PASO\PRUEBA\pruebaExportar_be.accdb", False, False, ";PWD=" & 12345) With dbs 'Modificamos el valor por defecto dbs.TableDefs(Tabla).Fields(Campo).DefaultValue = Valor 'Y cerramos la base de datos .Close End With Set dbs = Nothing MsgBox "Valor predeterminada cambiado correctamente.", vbInformation End Function Y para llamarla!!! nombre tabla, nombre campo a modificar su valor predererminado y el valor que quieres como predeterminado Private Sub Comando5_Click() ActualizarPropiedad "Tabla1", "Agua", "5" End Sub
|
Publicado por: Nomada
Fecha de publicación: 25/Mayo/2020 a las 20:02
Veamos. Con el siguiente código da el mismo error que el código de xavi: "Error de sintaxis (coma) en la expresión de validación de tablas."
Private Sub Comando5_Click() ActualizarPropiedad "Tabla1", "Agua", "vCuota" End Sub
Function ActualizarPropiedad(Tabla1, Agua, vCuota) Dim dbs As DAO.Database vCuota = Me.txtCuota Set dbs = OpenDatabase("D:\PASO\PRUEBA\pruebaExportar_be.accdb", False, False, ";PWD=12345")
With dbs dbs.TableDefs(Tabla1).Fields(Agua).DefaultValue = vCuota End With Set dbs = Nothing MsgBox "Valor predeterminada cambiado correctamente.", vbInformation End Function
No se que puede estar mal.
|
Publicado por: Nomada
Fecha de publicación: 25/Mayo/2020 a las 20:10
Al final salió. Después de revisar todo paso a paso, el problema era que tenía el campo independiente con decimales. Muchas gracias a los dos. Este hilo se puede cerrar satisfactoriamente. Saludos
|
Publicado por: rokoko
Fecha de publicación: 25/Mayo/2020 a las 20:11
Vamos a ver, que NO hay que tocar la funcion, solo para pasarle la ruta de la base datos y contraseña si la tubiese.
El resto se lo pasas cuando llamas a la funcion
Un ejemplillo, copia la carpeta Ejemplo en C, si no tendras que volver a vincular. No tiene contraseña la base de datos
https://www.dropbox.com/s/6w605bgn0xzm43n/Ejemplo%20valor%20predeterminado%20cambiar%20tabla%20vinculada.rar?dl=0
|
Publicado por: rokoko
Fecha de publicación: 25/Mayo/2020 a las 20:16
Nomada escribió:
Al final salió. Después de revisar todo paso a paso, el problema era que tenía el campo independiente con decimales. Muchas gracias a los dos. Este hilo se puede cerrar satisfactoriamente. Saludos
|
Te funciona pero no es correcto como lo haces, fijate que le pasas el dato directamente a la funcion y no cuando la llamas. Private Sub Comando5_Click() ActualizarPropiedad "Tabla1", "Agua", "vCuota" esto no te vale para nada, aqui tendria que ir me.txtCuota End Sub
Function ActualizarPropiedad(Tabla1, Agua, vCuota) Dim dbs As DAO.Database vCuota = Me.txtCuota ' Esto te sobraria Set dbs = OpenDatabase("D:\PASO\PRUEBA\pruebaExportar_be.accdb", False, False, ";PWD=12345")
With dbs dbs.TableDefs(Tabla1).Fields(Agua).DefaultValue = vCuota 'Aqui es donde pilla el valor End With Set dbs = Nothing MsgBox "Valor predeterminada cambiado correctamente.", vbInformation End Function
|
Publicado por: Nomada
Fecha de publicación: 25/Mayo/2020 a las 20:24
Perfecto, perfecto. Ahora si: Private Sub Comando5_Click() ActualizarPropiedad "Tabla1", "Agua", "txtCuota" End Sub
Function ActualizarPropiedad(Tabla1, Agua, txCuota) Dim dbs As DAO.Database Set dbs = OpenDatabase("D:\PASO\PRUEBA\pruebaExportar_be.accdb", False, False, ";PWD=12345")
With dbs dbs.TableDefs(Tabla1).Fields(Agua).DefaultValue = txtCuota .Close End With Set dbs = Nothing MsgBox "Valor predeterminada cambiado correctamente.", vbInformation End Function
Muchas, muchas gracias.
|
Publicado por: rokoko
Fecha de publicación: 25/Mayo/2020 a las 20:39
Asi mejor no, pillar el dato del campo. "txtCuota" le estaria pasando un valor de texto creo....
Private Sub Comando5_Click() ActualizarPropiedad "Tabla1", "Agua", Me. txtCuota End Sub
|
Publicado por: Nomada
Fecha de publicación: 26/Mayo/2020 a las 12:02
Muchas gracias. Este hilo se puede cerrar satisfactoriamente. Saludos.
|
|