2009-10-30 11 views
1

J'essaie d'insérer un enregistrement dans une table avec DAO (dans MS-Access) et ce faisant, je reçois une erreur 3022 (qui indique que un index unique est violé). L'erreur est correcte car en fait l'enregistrement essayé-à-insérer a une valeur qui se trouve déjà dans la table.Quel est le nom de la contrainte d'index unique de violation dans dao/ms-access

Maintenant, j'aimerais connaître le nom de l'index unique violé. Est-ce que quelqu'un a une idée de comment je l'aurais?

Merci pour tout pointeur René

+0

Je ne crois pas qu'il soit possible d'obtenir cette information, car l'objet d'erreur DAO ne renvoie pas la contrainte/l'index exact qui est violé (du moins, pour autant que je sache). Je sais exactement ce que vous êtes en train de traverser car des insertions ont jeté l'erreur, et j'ai ensuite dû déterminer manuellement quelle colonne causait le problème. –

+0

Merci David pour confirmer mes soupçons. Au moins, je sais que d'autres ont le même problème que moi. –

Répondre

0

Voici quelques notes:

Sub WithADO() 
''Reference: Microsoft ADO Ext x.x For DLL and Security 
Dim catTables As ADOX.Catalog 
Dim cn As ADODB.Connection 
Dim ndx As Object 

Set catTables = CreateObject("ADOX.Catalog") 

Set cn = CreateObject("ADODB.Connection") 
dbfile = "C:\Docs\LTD.mdb" 

    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
       "Data Source=" & dbfile & ";" 

Set catTables.ActiveConnection = cn 

For Each ndx In catTables.Tables("Table1").Indexes 
    strlist = ndx.Name & " " & ndx.Properties("Primary Key") & vbCrLf & strlist 
Next 
MsgBox strlist 

Set catTables = Nothing 

End Sub 

Sub WithDAO() 
''Reference: Microsoft DAO x.x Object Library 
Dim db As DAO.Database 
Dim tdf As TableDef 
Dim ndx As Object 

Set db = CurrentDb 
Set tdf = db.TableDefs("Table1") 

For Each ndx In tdf.Indexes 

    If ndx.Primary = True Then 
     MsgBox ndx.Name 
    End If 
Next 
End Sub 

Vous pouvez également utiliser des schémas.