2009-10-30 3 views
1

Я пытаюсь вставить запись в таблицу с DAO (внутри MS-Access), и я получаю сообщение об ошибке 3022 (что указывает на то, что нарушается уникальный индекс). Ошибка правильная, так как на самом деле записанная вставляемая запись имеет значение, которое уже найдено в таблице.Какое имя нарушения уникального ограничения индекса в dao/ms-access

Теперь я хотел бы узнать название нарушенного уникального индекса. Кто-нибудь знает, как я это получу?

Спасибо за любой указатель Рене

+0

Я не верю, что можно получить эту информацию, поскольку объект ошибки DAO не возвращает точный ограничивающий/индекс, который нарушается (по крайней мере, насколько я знаю). Я точно знаю, что вы переживаете, поскольку у меня были вставки, выкидывающие ошибку, а затем мне пришлось вручную выяснить, какой столбец вызывает проблему. –

+0

Спасибо Дэвиду за подтверждение моего подозрения. По крайней мере, я знаю, что у других такая же проблема, как у меня. –

ответ

0

Вот некоторые примечания:

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 

Вы также можете использовать схемы.