Доступ (Jet / ACE) DDL позволит вам изменить свойство поля Required
с False на True. Вот пример в окне «Доступ к немедленному доступу»:
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
False
CurrentDb.Execute "ALTER TABLE [MyTbl] ALTER COLUMN [MyCol] VARCHAR(30) NOT NULL;"
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
True
Тем не менее, вы хотите наоборот - изменить Required
с True на False. Access DDL этого не сделает. В этом примере применяется запрошенный размер поля, но свойство Required
не изменяется. И Access не выдает ошибку:
CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required = True
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
True
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Size
10
CurrentDb.Execute "ALTER TABLE [MyTbl] ALTER COLUMN [MyCol] VARCHAR(30) NULL;"
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
True
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Size
30
И если вы исключите любое упоминание Null в выражении DDL, Required
по-прежнему не изменится:
CurrentDb.Execute "ALTER TABLE [MyTbl] ALTER COLUMN [MyCol] VARCHAR(30);"
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
True
В качестве альтернативы вы можете использовать сочетание Access DDL и DML, как продемонстрировали @tschaible и @hawbsl. Однако такой подход кажется мне слишком большим усилием. Я бы предпочел подход, предложенный @Caltor. Если это практично для вас, это может быть даже так просто, как это ...
CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required = False