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

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

08.04.2013, 12:45. Показов 3084. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2013, 12:45
Ответы с готовыми решениями:

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

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

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

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

11
Эксперт MS Access
26717 / 14397 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
08.04.2013, 13:11 2
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
3349 / 1767 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
08.04.2013, 13:18 3
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  [ТС] 4
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
3349 / 1767 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
08.04.2013, 13:54 5
Цитата Сообщение от aspid77 Посмотреть сообщение
Нельзя определить поле более 1 раза
Естественно, так как скорее всего данное поле уже создано в таблице.

P.S. а зачем Вам каждый раз при закрытии формы создавать одно и тоже поле?
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14
08.04.2013, 14:02  [ТС] 6
Спс, тему можно закрыть
0
3349 / 1767 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
08.04.2013, 14:04 7
Ну, как вариант, можно разве что обработать саму ошибку:
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  [ТС] 8
В первый раз я выполнил код со строкой db.TableDefs.Append tbl, на который мне выдало ошибку "variable not defined", но я не обратил внимание, что поле создалось. Потом вместо db.TableDefs.Append tb использовал tbl.Fields.Refresh. Ну соответственно и выдало ошибку о том, что поле уже есть. Хотя я сейчас еще раз попробовал вставить 1 строку - поле не создалось. Вообщем где-то не досмотрел. А в дальнейшем я подправлю создание поля по условию. А для удаления поля надо воспользоваться методом tbl.Fields.delete fld?
0
Эксперт MS Access
26717 / 14397 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
08.04.2013, 15:47 9
aspid77, я повторю уже заданный вопрос. А зачем, вообще, создавать поля программно? Почему нельзя сделать их один раз в конструкторе? Или таково задание?
0
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14
08.04.2013, 16:00  [ТС] 10
Допустим есть таблица с банковскими операционными днями. В этой таблице предусмотрено отображение курсов различных валют. Пользователь должен иметь возможность выбрать для себя из списка валют, какие курсы ему необходимо учитывать и отображать. Пользователей много и они независимы.
0
Эксперт MS Access
26717 / 14397 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
08.04.2013, 16:21 11
Цитата Сообщение от aspid77 Посмотреть сообщение
Допустим есть таблица с банковскими операционными днями. В этой таблице предусмотрено отображение курсов различных валют. Пользователь должен иметь возможность выбрать для себя из списка валют, какие курсы ему необходимо учитывать и отображать. Пользователей много и они независимы.
Обычно, соблюдая реляционные правила, делается иначе. Фактически, отображение просмотрового поля валюты конкретным пользователем есть выражения отношения "многие-ко-многим" между таблицей пользователей и некоторой таблицей фактов (у вас операционный день). Для отображения связи строится таблица с полями КодПользователя, КодВалюты в которой и записываются все предпочтения всех пользователей. Для конкретного юзера выбираются только записи, относящиеся именно к нему.
Дополнительных полей не потребуются. Новые предпочтения запишутся в новой записи. Или редактируя имеющуюся
0
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 14
09.04.2013, 12:09  [ТС] 12
Здесь связь немного другая.
Есть пользователь который имеет открытые счета в различных видах валюты. На каждый открытый счет есть список операционных дней. В каждом операционном дне есть список проведенных операций. В справочнике у меня указан тип валюты и привязан он к типу счета. Тем более пользователь может добавлять необходимые себе типы валют вручную. В этом справочнике я хочу сделать флажок - отображать в операционных днях поле для учета курса этой валюты. Курс у меня привязан к операционному дню (т.к он меняется каждый день). Но у меня возникла проблема - в таблицу то я добавляю поле с курсом, а вот как передать это поле в табличную форму операционного дня. Если я переконвертирую в файл mde, то по-идее использование контролов не пройдет, т.к добавление происходит в режиме конструктора.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2013, 12:09

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

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

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

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

Добавление поля в таблицу со значением по умолчанию
Добавление поля в таблицу со значением по умолчанию создал запрос ALTER TABLE ADD ...

Добавление нового поля в таблицу
В таблицу Access мне нужно добавлять поле при нажатии на кнопку. ADOQuery1->Active=false;...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.