** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Valor predeterminado tabla vinculada
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Valor predeterminado tabla vinculada

 Responder Responder Página  123>
Autor
Mensaje Invertir el orden de clasificación
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 829
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Valor predeterminado tabla vinculada
    Enviado: 3 horas 8 minutos a las 18:52
Publicado originalmente por rokoko rokoko escribió:

Me suelta el error 3251 operacion no valida para este tipo de objeto, linea de error en rojo

        .TableDefs(strTablaOriginal).Fields(Campo).DefaultValue = Valor

No dispongo de SQL Server, así que no puedo hacer muchas pruebas. Posibles causas que se me ocurren:

- El usuario con el que accedes al servidor no tiene permisos para cambiar esa propiedad.
- SQL Server no permite cambiar el valor predeterminado mediante esa propiedad del objeto TableDef.
- Si después de conectar, intentas usar el objeto TableDef con otras propiedades, aunque sólo sea para leer su valor, ¿puedes hacerlo?
- Y más causas posibles...

Para SQL Server (y otros gestores), existe otra posibilidad: ejecutar un procedimiento almacenado o una consulta de paso a través para modificar esa propiedad:

- https://docs.microsoft.com/en-us/sql/relational-databases/tables/specify-default-values-for-columns?view=sql-server-2017
- https://www.w3schools.com/sql/sql_default.asp
- https://support.microsoft.com/es-es/help/303968/how-to-create-an-sql-pass-through-query-in-access
- http://www.mvp-access.com/foro/consulta-paso-a-travs-desde-vba_topic73545.html
- https://revistadigital.inesem.es/informatica-y-tics/procedimientos-almacenados-de-sql-server-desde-microsoft-access/
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 829
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 3 horas 27 minutos a las 18:33
Prueba con esta:

- https://1drv.ms/u/s!AsYMk9OS3HACh1N85hZ4pMKFAiaK

Es lo mismo que ha subido Rokoko, pero con las 2 bases de datos convertidas a mdb. A ver si así no te da el fallo de formato.
Arriba
Parche Ver desplegable
Habitual
Habitual


Unido: 03/Julio/2018
Localización: Alicante
Estado: Sin conexión
Puntos: 68
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Parche Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: Ayer a las 19:35
Publicado originalmente por rokoko rokoko escribió:

Publicado originalmente por Parche Parche escribió:

Hola,

Interesante hilo.

No consigo abrir la BD de la tabla vinculada (uso A2007) dice que  "no se reconoce el formato de la base de datos error.3343"

Saludos.


La acabo de descargar y la abro sin problemas, esta creada con access 2013, pero deberia de ir con 2007, es el misma extension. Que raro.

En el ejemplo mirar tambien que refrencias estan activadas......

Hola,

La Bd Formulario la abro bien, cuando intento abrir la tabla1 sale el error que he puesto.

Las referencias están bien, bueno, no me da error o falta de algo.

La bdTablas me salta el error que he puesto y no deja entrar.

Puesto en C:/ raiz y en la carpeta que viene con la descarga.

Saludos.

Arriba
Parche Ver desplegable
Habitual
Habitual


Unido: 03/Julio/2018
Localización: Alicante
Estado: Sin conexión
Puntos: 68
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Parche Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: Ayer a las 19:34
Duplicada respuesta.


Editado por Parche - Ayer a las 19:37
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1601
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: Ayer a las 18:46
Por lo que me dices con el codigo que hemos utilizado para tablas vinculadas con o sin contraseña deberia funcionar no??

Me suelta el error 3251 operacion no valida para este tipo de objeto, linea de error en rojo

Las tablas del servidor estan vinculadas y puedo acceder y editar en ellas sin problemas.
la varible  strTablaOriginal  pilla el nombre de la tabla con el prefijo dbo.  por lo que en principio parece que se conecta bien al servidor sql la funcion, o eso creo

'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
   
 End Function


Editado por rokoko - Ayer a las 18:46
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 829
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: Ayer a las 18:15
En un principio, puedes modificar el valor predeterminado de los campos de cualquier gestor de datos siempre y cuando:

1. El gestor de datos permita el uso de valores predeterminados.
2. Se pueda acceder con DAO a la base de datos (o con ADO; aunque en este caso habrá que modificar el código).
3. Dispongas de los datos de conexión a la base de datos (o de una tabla vinculada para saber cómo acceder).

Dependiendo del gestor de datos, quizá es más sencillo ejecutar una instrucción SQL que modifique el valor predeterminado, en vez de abrir la base de datos. Por ejemplo, para SQL Server:

- https://docs.microsoft.com/es-es/sql/relational-databases/tables/specify-default-values-for-columns?view=sql-server-2017

Y para Access, también se puede hacer con una instrucción SQL. Pero en este caso no se puede usar DAO porque da error. Debemos usar ADO:

- Esto da error: CurrentDb.Execute "ALTER TABLE Clientes ALTER COLUMN Nombre TEXT(50) DEFAULT Pepe"

- Esto funciona: CurrentProject.Connection.Execute "ALTER TABLE Clientes ALTER COLUMN Nombre TEXT(50) DEFAULT Pepe"

Más info en: https://docs.microsoft.com/es-es/office/vba/access/concepts/structured-query-language/modify-a-table-s-design-using-access-sql
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1601
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 22:10
Y por liarla un poco mas y por curiosidad, si las tablas son vinculadas pero de un servidor SQL, se les puede cambiar tambien el valor predeterminado??
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1601
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 19:55
Publicado originalmente por pitxiku pitxiku escribió:

Publicado originalmente por rokoko rokoko escribió:

Y como seria si quieres modificarlo, pero de una base de datos externa, no tienes tablas vinculadas??

Si tienes el nombre de la base de datos y la contraseña, no necesitas vincular una tabla. Úsalos directamente con el OpenDatabase:

Set dbs = OpenDatabase(<Nombre y ruta de la base de datos>, False, False, ";PWD=" & <La contraseña>)

dbs.TableDefs(<Nombre de la tabla real>)...

Ok, probado y perfecto. Lo habia hecho vinculando la tabla y luego desvinculandola, pero asi mucho mas sencillo.Clap


'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


Editado por rokoko - 17/Enero/2019 a las 19:57
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 829
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 17:50
Publicado originalmente por rokoko rokoko escribió:

Y como seria si quieres modificarlo, pero de una base de datos externa, no tienes tablas vinculadas??

Si tienes el nombre de la base de datos y la contraseña, no necesitas vincular una tabla. Úsalos directamente con el OpenDatabase:

Set dbs = OpenDatabase(<Nombre y ruta de la base de datos>, False, False, ";PWD=" & <La contraseña>)

dbs.TableDefs(<Nombre de la tabla real>)...
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1152
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Nomada Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 17:16
Por fin perfecto todo.
Muchas gracias a todos y mil perdones por mi error.
Por mi parte, este hilo se puede cerrar satisfactoriamente.

Saludos.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1601
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 16:47
Publicado originalmente por Parche Parche escribió:

Hola,

Interesante hilo.

No consigo abrir la BD de la tabla vinculada (uso A2007) dice que  "no se reconoce el formato de la base de datos error.3343"

Saludos.


La acabo de descargar y la abro sin problemas, esta creada con access 2013, pero deberia de ir con 2007, es el misma extension. Que raro.

En el ejemplo mirar tambien que refrencias estan activadas......


Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1601
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 15:37
4o5 post mas arriba pitxiku a puesto el codigo que funciona con y sin contraseña, estas utilizando ese?? Es el que he utilizado en en el ejemplo que he puesto.
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1152
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Nomada Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 14:23
Perdón, perdón. El problema estaba en que desde el formulario donde hacía la llamada no era independiente, sino basado en la tabla que llamaba.

Ahora si le pongo una contraseña a la tabla vinculada (PruebaDB_be_accdb) me da el error:

Se ha producido el error '3055' en tiempo de ejecución:
No es un nombre de archivo válido

y me marca de amarillo la línea: Set dbs = OpenDatabase(strRutaBD)

Por qué da el error, si la dirección no ha cambiado?

Muchas gracias.
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1152
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Nomada Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 11:51
Buenas.
Como dices he puesto el código que me has pasado:
El de la llamada a la función:
Call ActualizarPropiedad("Tabla1", "PAIS", Me.vPAIS)

La función:

'Actualizamos el valor predeterminado de un campo de una tabla vinculada:
'- TablaVinculada: 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(TablaVinculada As String, Campo As String, Valor)
    Dim dbs As DAO.Database
    Dim strRutaBD As String
    Dim strTablaOriginal As String
   
    'Recuperamos las propiedades de la tabla vinculada:
    ' - Cadena de conexi?n a la base de datos
    strRutaBD = CurrentDb.TableDefs(TablaVinculada).Connect
    ' - Nombre real de la tabla vinculada
    strTablaOriginal = CurrentDb.TableDefs(TablaVinculada).SourceTableName
   
    'A la cadena de conexi?n, le quitamos la primera parte:
    ';DATABASE=
    'OJO: Estoy suponiendo que la base de datos es MS Access. Para otros tipos, hay que
    'mantener la cadena de conexi?n.
    strRutaBD = Mid(strRutaBD, 11)
   
    'Abrimos la base de datos
    Set dbs = OpenDatabase(strRutaBD)
   
    With dbs
        'Modificamos el valor por defecto
        .TableDefs(strTablaOriginal).Fields(Campo).DefaultValue = Valor
        'Y cerramos la base de datos
        .Close
    End With
   
    'Limpiamos memoria
    Set dbs = Nothing
End Function

Con este código me dice:
"Se ha producido el error '34222 en tiempo de ejecución: No se puede modificar la estructura de la tabla. Otro usuario tiene la tabla abierta."

y me marca en amarillo la línea:  .TableDefs(strTablaOriginal).Fields(Campo).DefaultValue = Valor

Me vuelvo majara
Arriba
Parche Ver desplegable
Habitual
Habitual


Unido: 03/Julio/2018
Localización: Alicante
Estado: Sin conexión
Puntos: 68
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Parche Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Enero/2019 a las 10:49
Hola,

Interesante hilo.

No consigo abrir la BD de la tabla vinculada (uso A2007) dice que  "no se reconoce el formato de la base de datos error.3343"

Saludos.

Arriba
 Responder Responder Página  123>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable