Цитата(Akina @ 14.9.2018, 20:20 ) | Делай через TableDef |
Имеется в виду использовать TableDef вместо рекордсета? Ранее я пробовал так
Код | ... Set tdf = CurrentDb.TableDefs(tableName) ... For Each fd In tdf.Fields fd.Name = arrFieldsNames(i) Next ...
|
Получал ошибку "Указан недопустимый объект или объект более не задан" Поэтому поводу нашёл такое вот:
Цитата | Под отладчиком видно, что переменна CUR_TBL сначала = Nothing, а потом (после Set) становися действительным указателем, но в процессе выполнения ЛЮБОГО следующего оператора (Даже если после Set поставить X=1) перестает быть действительным. Экспериментально установлено, что объект TableDef прекращает свое существование к началу выполнения следующего оператора (составные операторы рассматриваются как несколько).
ФАНТАСТИКА! Я этого не знал! Т.е. работать с экземпляром объекта TableDef можно только в пределах одного оператора. Потом он разрушается, а указатель на него перестает быть действительнывм. Аналогично обстоит дело с объектами лежащими глубже (Например, ссылка на TableDef(...).Fields ведет себя также). Могу только предположить, что TableDef - это лишь логическое отражение некой физической реальности, которая потенциально может быть изменена другим пользователем (или даже просто другим потоком текущего приложения), и поэтому оно не является, например, потокозащищенным, а посему срок его жизни ограничен одним оператором, который в VBA выполняется в одном потоке в CriticalSection (но это только догадки)
Увы ничего тут не поделаешь! Придется писать громоздкий и неэффективный код!!!
Например цикл
For Each t In CurrentDb.TableDefs MsgBox t.Name Next
РАБОТАЕТ А цикл
For Each f In CurrentDb.TableDefs(CUR_TBL_NAME).Fields MsgBox f.Name Next
Уже не работает, так как при вхождении в цикл переменная f ссылается на объект Field, но уже на первоой же итерации (т.е. к началу выполнения MsgBox f.Name) оказывается ссылкой на недействительный объект!
Увы....
|
Вот тут - http://forum.developing.ru/archive/index.php/t-6774.html
|