Как индексировать новый DAO CreateField на лету - MS Access
У меня проблема. Мне нужно взять только что созданный столбец таблицы (поле) У меня было только имя "ID" и INDEX его (уникальный). Я пробовал несколько способов безуспешно. Все, что я прошу, это чтобы кто-то предложил новую перспективу. Шоу
Public Sub OrcleJEtoUnmatched()
Dim db As Database
Dim tdf As DAO.TableDef
Dim fld1 As DAO.Field, fld2 As DAO.Field
Dim idx As Index
Dim rst As DAO.Recordset
Dim hertz As String
Set db = CurrentDb()
'Copies table data from ORACLE JE Table; Creates / overwrites existing data to UNMATCHED Table (Working Table)
DoCmd.RunSQL "SELECT [Oracle JE].* INTO Unmatched FROM [Oracle JE];"
Set tdf = db.TableDefs("Unmatched")
Set fld1 = tdf.CreateField("ID", dbText, 255)
Set fld2 = tdf.CreateField("BatchCalc", dbText, 255)
With tdf
.Fields.Append fld1
.Fields.Append fld2
End With
Set rst = db.OpenRecordset("Unmatched", dbOpenTable)
Do Until rst.EOF
hertz = rst![Accounting Document Item] & Mid(rst![JE Line Description], 20, 2) & Round(Abs(rst![Transaction Amount]), 0)
rst.Edit
rst!ID = Replace(hertz, " ", "")
rst!BatchCalc = Mid(rst![JE Line Description], 8, 8)
rst.Update
rst.MoveNext
Loop
rst.Close
Application.RefreshDatabaseWindow
Set fld1 = Nothing
Set fld2 = Nothing
Set tdf = Nothing
Set db = Nothing
End Sub
3 ответа
Если вы хотите придерживаться объектной модели DAO, чтобы создать свое поле и проиндексировать его, посмотрите на метод Index.CreateField в справочной системе Access.
Но я думаю, что легче сделать оба, выполнив ALTER TABLE
заявление...
CurrentDb.Execute "ALTER TABLE Unmatched ADD COLUMN ID TEXT(255) UNIQUE;"
Чтобы добавить индекс к объекту DAO tabledef, используйте метод createindex.
Вот основная документация;
https://msdn.microsoft.com/EN-US/library/office/ff196791.aspx
Используя ответ, предоставленный @HansUp, я изменил его и заставил работать. Спасибо вам обоим @jhTyppeny & @Hansup за быстрый ответ.
DoCmd.RunSQL "CREATE UNIQUE INDEX ID ON Unmatched (ID) WITH PRIMARY"