una tabla primaria llaves llave hacer foranea declarar crear creada con compuestas compuesta como clave campos agregar sql ms-access access-vba recordset

sql - primaria - Cómo especificar la clave principal al usar vba para crear tablas



crear llaves compuestas sql (1)

Actualicé el código con la sugerencia que figura a continuación, que probé y funciona muy bien, para una referencia rápida para futuros usuarios.

Estoy usando el siguiente código para crear tablas vinculadas sin tener que configurar un DSN para cada usuario, ¿cómo puedo especificar una clave principal como se le preguntaría si se conecta manualmente?

Dim sConnect As String Dim db As DAO.Database Dim tdf As DAO.TableDef Set db = CurrentDb Set tdf = db.CreateTableDef tdf.Name = "dbo_vwFeedback" '' - -- --- This is the Label that you see in Access... tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server01/serverinstance;DATABASE=db_name;Trusted_Connection=Yes" tdf.SourceTableName = "vwFeedback" '' - -- --- This is the actual name in SQL Server, minus the owner. db.TableDefs.Append tdf CurrentDb.Execute "CREATE UNIQUE INDEX PK_dbo_vwFeedback_PrimaryKey ON dbo_vwFeedback (DataSetID, FeedbackRef) WITH PRIMARY"

NOTA: Lo anterior es para una VISTA de SQL Server, es idéntica para una TABLA de SQL Server, pero no necesita la línea CurrentDB.Execute (si su clave principal está configurada correctamente en el Servidor).

El código está en el lugar de vincular una tabla y especificar una clave principal manualmente.

Si no especifica la creación de un índice para VIEWS de SQL Server manualmente o con el método anterior, solo obtendrá una vista READ ONLY y puede experimentar datos erróneos devueltos, consulte los comentarios a continuación para ver ejemplos.


Después de vincular la tabla con el código de su pregunta, debe hacer esto:

CurrentDb.Execute "CREATE UNIQUE INDEX SomeIndex ON SomeTable (PrimaryKeyColumn) WITH PRIMARY"

Consulte el código de VBA para agregar una tabla vinculada con la clave principal para obtener un ejemplo completo.

Tenga en cuenta que no necesita hacer esto si vincula una tabla : Access detectará automáticamente la clave primaria (como lo dejó claro Remou en su comentario a continuación).

Pero cuando vincula una vista de Servidor SQL en Access, es muy importante especificar una clave principal adecuada para la vista en Access.
Si especifica la clave incorrecta (= selecciona columnas que no identifican un registro único) o ninguna clave, Access vinculará la vista como tabla de solo lectura (como ya ha notado).

Además, arruinará las filas visualizadas. Consulte ¿Por qué la vista vinculada ofrece resultados diferentes de MS Access frente a SQL Manager? para más explicaciones
(lea mi respuesta y mis comentarios en la otra respuesta)