Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690

Как создать таблицу со всеми допустимыми типами полей?

23.05.2019, 16:21. Показов 3323. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как программно с помощью VBA создать таблицу со следующим составом полей:
Короткий текст
Длинный текст
Числовой
bigint
Дата и время
Денежный
Счетчик
Логический
Поле объекта OLE
Гиперссылка
Вложение
?

Предварительный код
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
' *** Создать таблицу ***
' *** *** *** *** *** ***
Private Sub CreateTable()
        
        Dim strTableName As String ' Название таблицы
        Dim tbl As TableDef                 ' объект таблица
        Dim fld As Field                        ' объект поле
        
        Dim rst As Recordset               ' объект набор записей
        
        
        strTableName = "Table_Test"
        
     
        ' Удаляем прошлое
            On Error Resume Next
                    CurrentDb.TableDefs.Delete strTableName
                Err.Clear
        
        ' Создать таблицу дней недели
        On Error GoTo CreateTableErr
        
        'создание объектной переменной таблицы, полей и индекса в ней
            Set tbl = CurrentDb.CreateTableDef(strTableName)
            With tbl
                .Fields.Append tbl.CreateField("dbBigInt", dbBigInt, 250)
                .Fields.Append tbl.CreateField("dbBinary", dbBinary, 250)
                .Fields.Append tbl.CreateField("dbBoolean", dbBoolean, 250)
                .Fields.Append tbl.CreateField("dbByte", dbByte, 250)
                .Fields.Append tbl.CreateField("dbChar", dbChar, 250)
                .Fields.Append tbl.CreateField("dbCurrency", dbCurrency, 250)
                .Fields.Append tbl.CreateField("dbDate", dbDate, 250)
                .Fields.Append tbl.CreateField("dbDecimal", dbDecimal, 250)
                .Fields.Append tbl.CreateField("dbDouble", dbDouble, 250)
                ' .Fields.Append tbl.CreateField("dbFloat", dbFloat, 250) ' Ошикба !"
                .Fields.Append tbl.CreateField("dbGUID", dbGUID, 250)
                .Fields.Append tbl.CreateField("dbInteger", dbInteger, 250)
                .Fields.Append tbl.CreateField("dbLong", dbLong, 250)
                .Fields.Append tbl.CreateField("dbLongBinary", dbLongBinary, 250)
                .Fields.Append tbl.CreateField("dbMemo", dbMemo, 250)
                .Fields.Append tbl.CreateField("dbNumeric", dbNumeric, 250)
                .Fields.Append tbl.CreateField("dbSingle", dbSingle, 250)
                .Fields.Append tbl.CreateField("dbText", dbText, 250)
              '   .Fields.Append tbl.CreateField("dbTime", dbTime, 250)  ' Ошикба !"
               ' .Fields.Append tbl.CreateField("dbTimeStamp", dbTimeStamp, 250) ' Ошикба !"
                 .Fields.Append tbl.CreateField("dbVarBinary", dbVarBinary, 250)
            End With
        
        ' Фактическое добавление таблицы из объектной переменной описанной выше
         CurrentDb.TableDefs.Append tbl
        
        
CreateTableBye:
            On Error Resume Next
            Set tbl = Nothing
            rst.Close
            Set rst = Nothing
            Exit Sub
        
CreateTableErr:
            MsgBox "Произошла ошибка при выполнении процедуры " & _
            "[CreateTable] :" & vbCrLf & _
            Err.Description & vbCrLf & _
            "Номер ошибки = " & Err.Number, vbCritical
            Resume CreateTableBye
End Sub



В строке
Visual Basic
1
CurrentDb.TableDefs.Append tbl
код выдаёт ошибку:
"Произошла ошибка при выполнении процедуры [CreateTable]:
Недопустимая операция.
Номер ошибки = 3219"


Свойство Field.Type (DAO)
https://docs.microsoft.com/en-... operty-dao

Вопросы.

1. Какие типы использовать, чтобы код создавал таблицу с составом полей как описано выше?
Т.е. нужен состав полей как в таблице "Table_Example".
Например следующие типы создают числовые поля:
dbDecimal Числовой
dbDouble Числовой

dbGUID Числовой
dblnteger Числовой '
dbLong Числовой.


Я так понимаю правильней использовать "dblnteger"?


2. Как создать поля:
- счётчик;
- гиперссылка;
- вложение?
Данный код не позволяет создать в таблице такие поля.
Я по крайней мере не понял.
3. Почему поле "Логический" отображается не в виде "чекбокса", а в виде цифры "0"?
Или это не принципиально?
Миниатюры
Как создать таблицу со всеми допустимыми типами полей?  
Вложения
Тип файла: zip СоздТабл_00.zip (60.4 Кб, 7 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2019, 16:21
Ответы с готовыми решениями:

Как создать таблицу, чтобы одно из полей автоматически увеличивалось на 1
Как создать таблицу, чтобы одно из полей автоматически увеличивалось на 1. Например нужно создать таблицу TEST одно поле которой (типа...

Работа программы со всеми типами текстового файла
Здравствуйте, у меня два вопроса: 1. Как сделать что бы в поле куда выводится анализ (Memo1), выводился анализ только тех символов,...

Создать таблицу из полей
Создать таблицу из полей - ФИО, дата рождения, пол, зарплата и вывести сведения о женщинах в возрасте от 40 до 50 лет с зарплатой больше...

7
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
23.05.2019, 16:56
Вашу версию Access невозможно открыть на более старых версиях.

Я вот думаю, не надо ли после добавления полей в таблицу:

Visual Basic
1
tbl.Fields.Refresh
Попробуйте.

Добавлено через 2 минуты
И еще посмотрите CreateProperty.
1
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
23.05.2019, 17:46
А почему не создаете таблицы с помощью SQL CREATE TABLE? Это же проще, чем кодить на VBA
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
23.05.2019, 17:59  [ТС]
Цитата Сообщение от MrShin Посмотреть сообщение
А почему не создаете таблицы с помощью SQL CREATE TABLE? Это же проще, чем кодить на VBA
Ну не знаю...

Я пробовал на "SQL"...

Мне пока мало опыта, чтобы рассуждать какой из способов проще или сложнее....

По мне, так они вроде по трудоёмкости не особо отличаются...
0
Эксперт MS Access
 Аватар для Eugene-LS
12066 / 5849 / 1494
Регистрация: 05.10.2016
Сообщений: 16,440
23.05.2019, 18:43
Лучший ответ Сообщение было отмечено Soft17 как решение

Решение

Soft17, ну нечто такое (по картинке):
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Private Sub CreateTableAndFields()
'Создадание таблицы с различными типами полей
Dim strTableName As String ' Название таблицы
Dim tbl As DAO.TableDef    ' объект таблица
Dim fld As DAO.Field
        
        strTableName = "Table_Test"
        
     
' Удаляем прошлое
    On Error Resume Next
    CurrentDb.TableDefs.Delete strTableName
    Err.Clear
 
        '
On Error GoTo CreateTableAndFields_Err
 
        
'создание объектной переменной таблицы, полей и индекса в ней
    Set tbl = CurrentDb.CreateTableDef(strTableName)
    With tbl
        .Fields.Append tbl.CreateField("fldText", dbText, 255)    'короткий текст
        .Fields.Append tbl.CreateField("fldMemo", dbMemo)         'Memo (длинный текст)
        .Fields.Append tbl.CreateField("fldDouble", dbDouble)     'числовой Double
        .Fields.Append tbl.CreateField("fldLong", dbLong)         'BigInt = Long Integer
        .Fields.Append tbl.CreateField("fldDate", dbDate)         'Дата время
        .Fields.Append tbl.CreateField("fldCurrency", dbCurrency) 'Денежный
        
 
        'Long Integer - счётчик
        Set fld = tbl.CreateField("fldAutoKey", dbLong)
        With fld 'Определение свойств поля
            .Attributes = dbAutoIncrField
        End With
        .Fields.Append fld 'Добавление
        
        .Fields.Append tbl.CreateField("fldBoolean", dbBoolean) 'Логический
    
        'OLE = 11
        .Fields.Append tbl.CreateField("fldOLE", 11)
 
        'Гиперссылка
        Set fld = tbl.CreateField("fldHyperlink", 12)
         With fld 'Определение свойств поля
            .Attributes = dbHyperlinkField
        End With
        .Fields.Append fld 'Добавление
               
 
 
        'Attachment = 101
        .Fields.Append tbl.CreateField("fldAttachment", 101) 'Вложение
    End With
 
 
' Фактическое добавление таблицы из объектной переменной описанной выше
    CurrentDb.TableDefs.Append tbl
    CurrentDb.TableDefs.Refresh
 
 
CreateTableAndFields_Bye:
    On Error Resume Next
    Set tbl = Nothing
    Set fld = Nothing
    Exit Sub
        
CreateTableAndFields_Err:
    MsgBox "Произошла ошибка при выполнении процедуры " & _
            "[CreateTable01] :" & vbCrLf & _
            Err.Description & vbCrLf & _
            "Номер ошибки = " & Err.Number, vbCritical
    Err.Clear
    Resume CreateTableAndFields_Bye
End Sub
2
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
23.05.2019, 19:49  [ТС]
Таблица "Table_Example" поле "Логический"(Логический) выглядит как "чекбокс".
Таблица "Table_Test" поле "fldBoolean"(Логический) выглядит как поле.

Можно что-нибудь сделать?

Сделал форму на основании таблицы "Table_Test", поле "fldBoolean"(Логический) тоже выглядит как поле, а не как чекбокс.
Миниатюры
Как создать таблицу со всеми допустимыми типами полей?   Как создать таблицу со всеми допустимыми типами полей?  
0
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
23.05.2019, 19:55  [ТС]
Eugene-LS,
см. сообщение "6"(предыдущее)
2. Где взять индексы (OLE = 11, ("fldHyperlink", 12))?

'OLE = 11
.Fields.Append tbl.CreateField("fldOLE", 11)

' Гиперссылка
Set fld = tbl.CreateField("fldHyperlink", 12)
0
Эксперт MS Access
 Аватар для Eugene-LS
12066 / 5849 / 1494
Регистрация: 05.10.2016
Сообщений: 16,440
24.05.2019, 01:51
Лучший ответ Сообщение было отмечено Soft17 как решение

Решение

Цитата Сообщение от Soft17 Посмотреть сообщение
см. сообщение "6"(предыдущее)
2. Где взять индексы (OLE = 11, ("fldHyperlink", 12))?
'OLE = 11
.Fields.Append tbl.CreateField("fldOLE", 11)
' Гиперссылка
Set fld = tbl.CreateField("fldHyperlink", 12)
Честно говоря не знаю ...
Интернет вам в помощь.

Про логический меняйте атрибуты поля.

Добавлено через 5 часов 7 минут
Цитата Сообщение от Soft17 Посмотреть сообщение
Где взять индексы (OLE = 11, ("fldHyperlink", 12))?
Нашел!
Ради спортивного интересу ...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
        'Гиперссылка
        Set fld = tbl.CreateField("fldHyperlink", dbMemo) ', 12
         With fld 'Определение свойств поля
            .Attributes = dbHyperlinkField
        End With
        .Fields.Append fld 'Добавление
        Debug.Print fld.Type
 
 
        'Attachment = 101 = dbAttachment
        .Fields.Append tbl.CreateField("fldAttachment", dbAttachment) 'Вложение
Добавлено через 5 минут
Soft17, справка от MS кратка, как всегда.
Хорошая статья:
http://allenbrowne.com/ser-49.html

Добавлено через 9 минут
Soft17, BTW - как я получал номера размерности:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public Sub esTableFieldsPrint(sTableName As String)
' Выводит в Immediate Window (Ctrl + G) список полей указанной в аргументе таблицы (с номерами)
' и кодами размерности полей
'--------------------------------------------------------------------
Dim dbs As Dao.Database
Dim objField As Dao.Field
Dim sTab As String
Dim s As String
Dim iNo%
'--------------------------------------------------------------------
On Error GoTo esTableFieldsPrint_Err
    Set dbs = CurrentDb
    s = "Таблица: " & sTableName & " - содержит поля:" & vbCrLf
    s = s & String(70, "-") & vbCrLf
    For Each objField In dbs.TableDefs(sTableName).Fields
        iNo = iNo + 1
        s = s & Format(iNo, "000") & " : " & objField.Name & " = " & objField.Type & vbCrLf
    Next
    Debug.Print s
 
esTableFieldsPrint_Bye:
    On Error Resume Next
    dbs.Close
    Exit Sub
 
esTableFieldsPrint_Err:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in procedure esTableFieldsPrint", vbCritical, "Error!"
    Resume esTableFieldsPrint_Bye
End Sub
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2019, 01:51
Помогаю со студенческими работами здесь

Выведите ряд квадратов, заштрихованных всеми типами штриховки по порядку
Выведите ряд квадратов, заштрихованных всеми типами штриховки по порядку: Скриншот во вложении

Операторы цикла (задание должно быть выполнено всеми тремя типами циклов)
Вычислить значение функции у=cosx+cosx²+…+cosx30... Операторы цикла (задание должно быть выполнено всеми тремя типами циклов)

Создать таблицу в Access с названиями полей из edit' ов
Привет всем! CREATE TABLE успеваемость (код AUTOINCREMENT(1, 1) PRIMARY KEY,'+EDIT1.Text+' text (20),'+EDIT2.Text+' text...

Как самому установить соответствие между типами API функции в MSDN и типами VB
Как самому установить соответствие между типами данных, приведенных на API функции в MSDN и типами VB ? Может , у кого имеются списки...

Как создать один список с двумя типами?
попогите


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru