Имейте в виду, что вы не можете быть уверены, что вы извлекли все схемы за столом, даже при использовании обоих ADO (что нужно для CHECK
ограничений, WITH COMPRESSION
и т.д.) и ACEDAO (которые вам нужно для сложных типов данных и т.д.).
Вот пример такой таблицы:
Sub CantGetCheck()
On Error Resume Next
Kill Environ$("temp") & "\DropMe.mdb"
On Error GoTo 0
Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat
.Create _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & _
Environ$("temp") & "\DropMe.mdb"
With .ActiveConnection
Dim Sql As String
Sql = _
"CREATE TABLE Test " & _
"(" & _
" data_col INTEGER NOT NULL, " & _
" CONSTRAINT data_col__be_positive " & _
" CHECK (data_col >= 0), " & _
" CONSTRAINT data_col__values " & _
" CHECK (" & _
" data_col = 0 OR data_col = 1 OR data_col = 2 " & _
" OR data_col = 3 OR data_col = 4 OR data_col = 5 " & _
" OR data_col = 6 OR data_col = 7 OR data_col = 8 " & _
" OR data_col = 9 OR data_col = 10 OR data_col = 11 " & _
" OR data_col = 12 OR data_col = 13 OR data_col = 14 " & _
" OR data_col = 15 OR data_col = 16 OR data_col = 17 " & _
" OR data_col = 18 OR data_col = 19 OR data_col = 20 " & _
" ) " & _
");"
.Execute Sql
Dim rs
' 5 = adSchemaCheckConstraints
Set rs = .OpenSchema(5)
MsgBox rs.GetString
End With
Set .ActiveConnection = Nothing
End With
End Sub
Выходные данные показывают, что в то время как определение для ограничения по имени data_col__be_positive
действительно может быть извлечен, то data_col__values
определение не может (потому что она превышает 255 символов).
Так что решение всегда состоит в том, чтобы всегда сохранять код, который вы использовали для создания и впоследствии изменяете таблицу. Для меня использование сценариев SQL DDL для этой цели имеет большой смысл (мне не нужны некоторые функции, которые не могут быть созданы с помощью DDL).
Вы не упомянули, если вам нужна только схема таблицы, которую нужно скопировать, или схему таблицы * и * ее данные. –