我有這段代碼列出了所有索引,但我只需要設定了 Indexed: “Yes, duplicates OK”的那些。有沒有辦法做到這一點,而不是手動查看所有索引?我需要將資料遷移到 SQL Server,但這樣我只能在 SQL Server 中獲得空表。
Const adSchemaIndexes As Long = 12
Dim cn As Object ' ADODB.Connection
Dim rs As Object ' ADODB.Recordset
Dim i As Long
Set cn = CurrentProject.Connection
Set rs = cn.OpenSchema(adSchemaIndexes)
With rs
' enable next three lines to view all the recordset column names
' For i = 0 To (.Fields.Count - 1)
' Debug.Print .Fields(i).Name
' Next i
Do While Not .EOF
Debug.Print !TABLE_NAME, !INDEX_NAME, !PRIMARY_KEY
.MoveNext
Loop
.Close
End With
Set rs = Nothing
Set cn = Nothing
uj5u.com熱心網友回復:
如所寫,該程序僅顯示記錄集的 25 列中的 3 列。如果您按照注釋說明“啟用下三行”,則可以查看所有可用列的名稱。特別是一列 ( UNIQUE) 應該對您的目的有用。當您在表設計中為“Indexed”屬性選擇“Yes (Duplicates OK)”時,它將在架構記錄集的列中顯示為 False。UNIQUE
我假設您對系統表(“MSys*”表名)上的索引資訊不感興趣。而且,對于非系統表索引,只為那些沒有唯一約束的索引提供資訊。以下是我如何Do While相應地修改回圈:
Do While Not .EOF
If !Unique = False And Not !TABLE_NAME Like "MSys*" Then
Debug.Print !TABLE_NAME, !INDEX_NAME, !COLUMN_NAME, !Unique
End If
.MoveNext
Loop
這是我的測驗資料庫中修改后的程序的輸出:
DiscardMe compound_4_5 f4 False
DiscardMe compound_4_5 f5 False
DiscardMe f3 f3 False
該表有 2 個非唯一索引。其中之一是基于 2 個欄位的復合索引。因此,模式記錄集為每個欄位包含單獨的行。另一個索引基于單個欄位,因此在記錄集中顯示為單行。
我認為這可以滿足您的問題。但我不知道這些索引會如何干擾將表資料遷移到 SQL Server。祝你好運。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505128.html
下一篇:訪問無法識別SQL布林值
