2009-08-03 8 views
1

J'ai plusieurs bases de données Access, chacune ayant plusieurs tables. Chaque table a une clé primaire composite, avec des champs variables comprenant cette clé.MS-Access - comment trouver le nom de la clé primaire composite et les champs associés

Comment puis-je, pour une table donnée, obtenir le nom de la clé primaire et les noms des champs qui y sont utilisés? C'est-à-dire, quel est le SQL pour le faire? (J'ai besoin d'utiliser SQL brut plutôt que Visual Basic)

BTW Je sais que je peux ouvrir les tables dans l'interface graphique Access et y voir les clés primaires, mais j'ai besoin d'automatiser le processus afin que je puisse modifier les clés primaires .

merci! max

+0

Pourquoi la limitation à SQL? Dans quelle langue accédez-vous aux données? –

Répondre

0

Regardez le ADOX Object Model. Plus précisément l'objet clé:

Avec les propriétés et les collections de un objet clé, vous pouvez:

  • Identifier la clé avec la propriété Name.

  • Déterminez si la clé est primaire, étrangère ou unique avec la propriété Type .

  • Accédez aux colonnes de la base de données de la clé à l'aide de la collection Columns.

  • Spécifiez le nom de la table associée avec la propriété RelatedTable.

  • Déterminer l'action effectuée lors de la suppression ou de la mise à jour d'une clé primaire avec les propriétés DeleteRule et UpdateRule .

En outre, How to list the primary key columns in an Access table

Mise à jour: Je pense que la question a dit à l'origine programme: Si vous voulez utiliser TSQL alors vous devez interroger le Hidden System Tables

+0

merci mitch - cela vous dérangerait-il de me donner quelques conseils pour le sql pour cela? Je n'ai jamais entendu parler du modèle adox et je n'ai aucune idée de comment l'obtenir ... –

+0

Les index ne sont pas listés dans MSysObjects, ni aucune autre table système que je connaisse. –

+0

Comment utilisez-vous ADOX dans SQL, ce que demande le questionneur d'origine? –

0

est ici une fonction VBA Access utilise ADOX pour obtenir les colonnes de clé primaires.

Private Function getPrimaryKeyFields(ByRef strFieldNames() As String) As Integer 
On Error GoTo HandleErr 

Dim intReturn As Integer 

'just get the primary key field here. 
Dim idx As ADOX.Index 
Dim Table As ADOX.Table 
Dim col As ADOX.Column 
Dim cat As New ADOX.Catalog 

Set cat.ActiveConnection = CurrentProject.Connection 

Set Table = cat.Tables(mTableName) 
Set idx = Table.Indexes("PrimaryKey") 

ReDim strFieldNames(idx.Columns.Count) 
Dim intCount As Integer 
intCount = 0 
For Each col In idx.Columns 
    strFieldNames(intCount) = col.Name 
    intCount = intCount + 1 
Next 
intReturn = intCount 
Set idx = Nothing 
Set Table = Nothing 
Set col = Nothing 
Set cat = Nothing 



ExitHere: 
getPrimaryKeyFields = intReturn 
    Exit Function 

HandleErr: 
    Select Case Err.Number 
     Case Else 

      'put some error handling here. 
      Resume ExitHere 
    End Select 
' End Error handling block. 
End Function 

Passez dans un tableau de chaînes et il est rempli avec les noms des champs. Le nombre de champs est renvoyé par la fonction. J'espère que cela t'aides.

Seth

+0

Je me rends compte que ce n'est pas une façon de le faire ... mais c'est une façon de travailler. Avant d'utiliser ce code, vous devez définir une référence à ADOX pour votre projet. Pour ce faire ... à partir d'un code windows Outils/Références.Faites défiler jusqu'à ce que vous voyez "Microsoft ADO Ext. 6.0 pour DDL et sécurité." Cliquez sur la case à cocher à côté de cela. Ensuite, le code ci-dessus devrait fonctionner. Si vous ne voyez pas cette référence, vous devrez peut-être l'installer à partir de l'un des MDAC. Seth –

Questions connexes