Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14

Добавление нового поля в таблицу

08.04.2013, 12:45. Показов 4073. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Access2003. При закрытии формы пытаюсь добавить поле в имеющуюся таблицу (форма с таблицей не связана):

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Form_Unload(Cancel As Integer)          
Dim tbl As TableDef
Dim fld As Field
Set tbl = CurrentDb.TableDefs("ИмяТаблицы")
Set fld = tbl.CreateField("1", dbText)
tbl.Fields.Append fld
CurrentDb.TableDefs.Append tbl
Set tbl = Nothing
Set fld = Nothing
End Sub
Однако
на строку Set fld = tbl.CreateField("1", dbText) выдает ошибку:
"Указан недопустимый объект, или объект более не задан"
В чем может быть проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.04.2013, 12:45
Ответы с готовыми решениями:

Одномоментное добавление нового поля и его значения в таблицу Access
Уважаемые форумчане, добрый вечер! Цель: иметь возможность из формы по необходимости создать новое поле для связанной с формой таблицы...

Добавление нового поля в подчиненную форму
Здравствуйте, уважаемые специалисты. Помогите пожалуйста. Делаю БД в Аксесс 2013. Есть форма, которая содержит в себе подчиненную форму. На...

Копирование нового поля из таблицы в таблицу
Доброго времени суток. Имеется две таблицы. Необходимо, чтобы при добавление поля в одной таблице, появлялось такое же поле в другой...

11
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
08.04.2013, 13:11
aspid77, вместо CurrentDB используйте копию
Visual Basic
1
2
3
4
5
6
Dim db as DAO.Database
Set db=Currentdb
Set tbl = db.TableDefs("ИмяТаблицы")
...................................
db.TableDefs.Append tbl
...................................
1
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
08.04.2013, 13:18
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Form_Unload(Cancel As Integer)
 
 Dim tbl As TableDef
 Dim fld As Field
 Dim dbs As Database
   Set dbs = CurrentDb
   Set tbl = dbs.TableDefs("ИмяТаблицы")
   Set fld = tbl.CreateField("1", dbText)
     tbl.Fields.Append fld
     tbl.Fields.Refresh
 Set tbl = Nothing
 Set fld = Nothing
 
 End Sub
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14
08.04.2013, 13:46  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Form_Unload(Cancel As Integer)          
Dim tbl As TableDef
Dim fld As Field
Dim dbs As Database
Set dbs = CurrentDb
Set tbl = dbs.TableDefs("Имя_таблицы")
Set fld = tbl.CreateField("1", dbText)
tbl.Fields.Append fld
tbl.Fields.Refresh       ' или       db.TableDefs.Append tbl
Set tbl = Nothing
Set fld = Nothing
End Sub
Ошибка на tbl.Fields.Append fld:
Нельзя определить поле более 1 раза
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
08.04.2013, 13:54
Цитата Сообщение от aspid77 Посмотреть сообщение
Нельзя определить поле более 1 раза
Естественно, так как скорее всего данное поле уже создано в таблице.

P.S. а зачем Вам каждый раз при закрытии формы создавать одно и тоже поле?
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14
08.04.2013, 14:02  [ТС]
Спс, тему можно закрыть
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
08.04.2013, 14:04
Ну, как вариант, можно разве что обработать саму ошибку:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo error
 
 Dim tbl As TableDef
 Dim fld As Field
 Dim dbs As Database
 Set dbs = CurrentDb
 Set tbl = dbs.TableDefs("Имя_таблицы")
 Set fld = tbl.CreateField("1", dbText)
 tbl.Fields.Append fld
 tbl.Fields.Refresh
 Set tbl = Nothing
 Set fld = Nothing
 
 
error:
   If Err.Number = 3191 Then
      MsgBox "Данное поле уже было создано!", _
      vbOKOnly + vbExclamation, "Внимание"
   End If
 End Sub
P.S. Вы так и не ответили на мой вопрос: "Зачем каждый раз создавать одно и то же поле?"
2
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14
08.04.2013, 15:32  [ТС]
В первый раз я выполнил код со строкой db.TableDefs.Append tbl, на который мне выдало ошибку "variable not defined", но я не обратил внимание, что поле создалось. Потом вместо db.TableDefs.Append tb использовал tbl.Fields.Refresh. Ну соответственно и выдало ошибку о том, что поле уже есть. Хотя я сейчас еще раз попробовал вставить 1 строку - поле не создалось. Вообщем где-то не досмотрел. А в дальнейшем я подправлю создание поля по условию. А для удаления поля надо воспользоваться методом tbl.Fields.delete fld?
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
08.04.2013, 15:47
aspid77, я повторю уже заданный вопрос. А зачем, вообще, создавать поля программно? Почему нельзя сделать их один раз в конструкторе? Или таково задание?
0
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14
08.04.2013, 16:00  [ТС]
Допустим есть таблица с банковскими операционными днями. В этой таблице предусмотрено отображение курсов различных валют. Пользователь должен иметь возможность выбрать для себя из списка валют, какие курсы ему необходимо учитывать и отображать. Пользователей много и они независимы.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
08.04.2013, 16:21
Цитата Сообщение от aspid77 Посмотреть сообщение
Допустим есть таблица с банковскими операционными днями. В этой таблице предусмотрено отображение курсов различных валют. Пользователь должен иметь возможность выбрать для себя из списка валют, какие курсы ему необходимо учитывать и отображать. Пользователей много и они независимы.
Обычно, соблюдая реляционные правила, делается иначе. Фактически, отображение просмотрового поля валюты конкретным пользователем есть выражения отношения "многие-ко-многим" между таблицей пользователей и некоторой таблицей фактов (у вас операционный день). Для отображения связи строится таблица с полями КодПользователя, КодВалюты в которой и записываются все предпочтения всех пользователей. Для конкретного юзера выбираются только записи, относящиеся именно к нему.
Дополнительных полей не потребуются. Новые предпочтения запишутся в новой записи. Или редактируя имеющуюся
0
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14
09.04.2013, 12:09  [ТС]
Здесь связь немного другая.
Есть пользователь который имеет открытые счета в различных видах валюты. На каждый открытый счет есть список операционных дней. В каждом операционном дне есть список проведенных операций. В справочнике у меня указан тип валюты и привязан он к типу счета. Тем более пользователь может добавлять необходимые себе типы валют вручную. В этом справочнике я хочу сделать флажок - отображать в операционных днях поле для учета курса этой валюты. Курс у меня привязан к операционному дню (т.к он меняется каждый день). Но у меня возникла проблема - в таблицу то я добавляю поле с курсом, а вот как передать это поле в табличную форму операционного дня. Если я переконвертирую в файл mde, то по-идее использование контролов не пройдет, т.к добавление происходит в режиме конструктора.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2013, 12:09
Помогаю со студенческими работами здесь

Добавление поля в таблицу через запрос на добавление
Здравствуйте, подскажите как создать запрос, чтобы к таблице добавить еще одно поле. Поля, не записи. Тип запроса Добавление....

Добавление нового поля заданного типа в запрос
Здравствуйте! Есть таблица с несколькими колонками.Нужно написать запрос, который выведет на экран данную таблицу+ логическую колонку...

Добавление нового поля на форме, если в таблице отсутствует
Создана форма. Допустим, уже на ней 5 полей(со своими форматами). Через некоторое время, например, добавится новый показатель для учета....

Добавление из формы поля в таблицу
Данные такие есть на форме поле в котором вычисляются значения скажем с 1 - 3 ,1-4, 1-5, 2-10 методом постановки галочки (Выделил пункты...

Добавление данных из поля ввода в таблицу
Всем доброго времени суток. Есть задание: создать базу спорткомплекса, запарился на форме с регистрацией посетителей. Форма -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru