Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 16:57   #1
myprog
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 33
По умолчанию Как программно VBA изменить свойство Обязательное поле в таблице

ПРОБЛЕМА:
при создании новой таблицы следующим способом:

cat.ActiveConnection = _
"Provider=Microsoft.Jet.OLEDB.4 .0;" & _
"Data Source=" & strFull_File_Name & ";"
tbl.Name = strTblName

For i = 1 To intCell - 3
tbl.Columns.Append CStr(i), adDouble
Next i


создается таблица с полями 1,2 ... и т.д.
все поля при этом имеют свойство:
Обязательное поле - Да

А мне надо:
Обязательное поле - НЕТ

Подскажите как программно т.е. через VBA это изменить
ОЧЕНЬ НУЖНО
e-mail: meg.shara@yandex.ru
myprog вне форума Ответить с цитированием
Старый 30.09.2010, 13:27   #2
LittleFatCat
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 68
По умолчанию

Доброго времени суток!

Public Sub PropFieldsChange()
Dim currDB As Database
Dim tblTabl As TableDef
Set currDB = CurrentDb
Set tblTabl = currDB.TableDefs("Table1")
tblTabl.Fields("Field1").Required = False
Set tblTabl = Nothing
Set currDB = Nothing
End Sub
LittleFatCat вне форума Ответить с цитированием
Старый 30.09.2010, 16:00   #3
myprog
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 33
По умолчанию СПАСИБО помогло!!!!

Только пришлось заменить строку:
Set currDB = CurrentDb
на новую:
Set currDB = OpenDatabase(strFull_File_Name)

но у меня вопрос:
такой метод только для изменения полей существующей таблицы
а сразу при создании таблицы это можно менять или нет?

Желательно метод ADO
Заранее спасибо!
myprog вне форума Ответить с цитированием
Старый 30.09.2010, 19:51   #4
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

Цитата:
Сообщение от myprog Посмотреть сообщение
Желательно метод ADO
для ADO можно так попробовать:

....
.Attributes = adColNullable
Abrakadabra вне форума Ответить с цитированием
Старый 02.10.2010, 12:12   #5
LittleFatCat
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 68
По умолчанию

Доброго времени суток!

А что если уйти от объектов к старому доброму SQL? Оператор CREATE TABLE, CREATE FIELD и т.д.? Можно в MS SQL Server Express создать таблицу с нужными свойствами полей и посмотреть как он в SQL пишет запрос. А так я навскидку не помню параметр, отвечающий за обязательное поле (но он точно есть! :-)
LittleFatCat вне форума Ответить с цитированием
Старый 02.10.2010, 15:33   #6
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

В вопросе нет ни слова об SQL.. Там написано: "следующим способом.."
Abrakadabra вне форума Ответить с цитированием
Старый 04.10.2010, 10:19   #7
myprog
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 33
По умолчанию Мысль об SQL интересна

Цитата:
Сообщение от LittleFatCat Посмотреть сообщение
Доброго времени суток!

А что если уйти от объектов к старому доброму SQL? Оператор CREATE TABLE, CREATE FIELD и т.д.?
Но суть в том, что база закрыта, доступ к базе осуществляется из другого приложения, т.е. даже при формировании запроса мы должны получить связь с базой, а это или DAO, или ADO, как бы мы не хотели от этого уйти.

Но тем не менее способ имеет право на существование, я попробую его на днях. Потом скажу что получилось.

Спасибо за проявленный интерес к данному вопросу.
myprog вне форума Ответить с цитированием
Старый 04.10.2010, 10:59   #8
LittleFatCat
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 68
По умолчанию

Доброго времени суток!

Я к тому и написал, что связь с базой можно установить любым способом (я в основном использую DAO), а затем выполнять запросы любого типа. Для меня, например, вполне достаточно CurrentDB.OpenRecordset(strSQL) и CurrentDB.Execute(strSQL), где strSQL - строка с текстом запроса. В этом случае достигается большая гибкость - запрос можно формировать "на лету". Думаю, что и для ADO можно задействовать подобные конструкции - а SQL в данном случае гибче и мощнее использования объектной модели Access
LittleFatCat вне форума Ответить с цитированием
Старый 05.10.2010, 10:31   #9
myprog
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 33
По умолчанию Уважаемый LittleFatCat

Все дело в том что надо создать новую таблицу в базе данных.
Причем база данных закрыта, но путь к ней известен.
А CurrentDB (насколько я понимаю это текущая база данных,
т.е. она открыта и мы в ней работаем). Причем параметр ОБЯЗАТЕЛЬНОЕ ПОЛЕ должен принимать значение НЕТ
myprog вне форума Ответить с цитированием
Старый 05.10.2010, 11:00   #10
LittleFatCat
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 68
По умолчанию

Доброго времени суток!

Нет проблем - вот так цепляем другую БД из текущей:
Set CurrDB = DBEngine.Workspaces(0).OpenDatabase ("MyRandomPatch:\MyRandomDB.mdb" )
И спокойно с ней работаем так, как я раньше писал :-)
LittleFatCat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить значение value в поле? erwerwe JavaScript, Ajax 8 04.08.2010 18:20
Как программно изменить наличие Series gs199 Компоненты Delphi 1 27.04.2010 10:11
Как изменить свойство href тега <A> Ga-sergey JavaScript, Ajax 2 23.04.2010 17:49
Как программно связать поле в отчёте FR с полем БД? Mishechka БД в Delphi 0 11.06.2009 15:57
Как изменить свойство объекта, если его имя находится в переменной? Aiden Компоненты Delphi 1 13.09.2007 07:57