Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086

Можно ли создать таблицу в Базе, имея ее описание в другой таблице, средствами VBA?

13.05.2017, 21:01. Показов 3070. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста, можно ли создать таблицу в Базе, имея ее описание в другой таблице?
Например там описаны Название поля, Тип поля и ее длина (Прикрепляю изображение) и порядком полей, которые указаны в поле N_order.

З.Ы прошу прощения за названия, БД не мое
Миниатюры
Можно ли создать таблицу в Базе, имея ее описание в другой таблице, средствами VBA?  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2017, 21:01
Ответы с готовыми решениями:

Можно ли создать подобие формулы в документе Word средствами VBA?
На скрине пример документа, где всегда значения в тексте должны быть равны значениям в таблице. Приходится руками приравнивать значения. А...

Можно ли программно (VBA) создать подтаблицу в таблице?
Допустим, имеется 2 БД, которые имеют идентичные структуры, но их отличие в том, что в одной есть подтаблицы, а в другой нет. Задача:...

Можно ли в VBA скопировать в вставить запрос или таблицу из одного файла Access в другой файл Access
Вопрос такой можно ли скопировать и вставить запрос, таблицу или другой объект базы данных Access в другой файл Access средствами VBA?

17
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
13.05.2017, 21:18
Можно ее просто импортировать.
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
13.05.2017, 21:25  [ТС]
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Можно ее просто импортировать.
Извините, не совсем понял как это, разве там не импортируются существующие таблицы?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,934
Записей в блоге: 4
13.05.2017, 21:31
почитайте в хельпе про CreateTableDef, там и пример есть
да и на форуме неоднократно были примеры

Visual Basic
1
expression.CreateTableDef(Name, Attributes, SourceTableName, Connect)
expression A variable that represents a Database object.

Parameters

Name Required/Optional Data Type Description

Name Optional Variant A Variant (String subtype) that uniquely names the new TableDef object. See the Name property for details on valid TableDef names.

Attributes Optional Variant A constant or combination of constants that indicates one or more characteristics of the new TableDef object. See the Attributes property for more information.

SourceTableName Optional Variant A Variant (String subtype) containing the name of a table in an external database that is the original source of the data. The source string becomes the SourceTableName property setting of the new TableDef object.

Connect Optional Variant A Variant (String subtype) containing information about the source of an open database, a database used in a pass-through query (pass-through query: An SQL-specific query you use to send commands directly to an ODBC database server. By using pass-through queries, you work directly with the tables on the server instead of the data being processed by the Access database engine.), or a linked table (linked table: A table stored in a file outside the open database from which Access can access records. You can add, delete, and edit records in a linked table, but you cannot change its structure.). See the Connect property for more information about valid connection strings (connection string: A string expression that is used to open an external database.).

Expression Переменная, представляющая объект Database.

параметры

Имя Обязательно / Дополнительный Тип данных Описание

Имя Дополнительный вариант Вариант A (String subtype), который уникальным образом определяет новый объект TableDef. Подробное описание допустимых имен TableDef см. В описании свойства Name.

Атрибуты Необязательный вариант Константа или комбинация констант, которая указывает одну или несколько характеристик нового объекта TableDef. Для получения дополнительной информации см. Свойство Attributes.

SourceTableName Необязательный вариант Variant A Variant (String subtype), содержащий имя таблицы во внешней базе данных, которая является исходным источником данных. Исходная строка становится значением свойства SourceTableName нового объекта TableDef.

Подключить необязательный вариант варианта A (String subtype), содержащий информацию об источнике открытой базы данных, базе данных, используемой в сквозном запросе (сквозной запрос: SQL-специфичный запрос, используемый для отправки команд непосредственно на сервер базы данных ODBC При использовании сквозных запросов вы работаете напрямую с таблицами на сервере, а не с данными, обрабатываемыми механизмом базы данных Access.) Или связанная таблица (связанная таблица. Таблица, хранящаяся в файле вне открытой базы данных из Доступ к которым можно получить доступ к записям. Вы можете добавлять, удалять и редактировать записи в связанной таблице, но вы не можете изменить ее структуру.). См. Свойство Connect для получения дополнительной информации о допустимых строках подключения (строка подключения: строковое выражение, которое используется для открытия внешней базы данных.)..
1
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
13.05.2017, 21:36
Тогда изучайте методы CreateTableDef, CreateField, TableDefs.Append, ... . В справке есть примеры ... .
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,934
Записей в блоге: 4
13.05.2017, 21:37
вариант 2 --через sql и CREATE TABLE
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub CreateTableX1()
 
    Dim dbs As Database
 
    ' Modify this line to include the path to Northwind
    ' on your computer.
    Set dbs = OpenDatabase("Northwind.mdb")
 
    ' Create a table with two text fields.
    dbs.Execute "CREATE TABLE ThisTable " _
        & "(FirstName CHAR, LastName CHAR);"
 
    dbs.Close
 
End Sub
1
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
13.05.2017, 21:41
Как я понимаю, надо взять таблицу Opisanie шаблоном для создания таблицы. Тогда такая процедура создания таблицы tblOpisanie:
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
Sub CreateOpisanie()
  dim db as dao.database, rst as dao.recordset
  dim s, r, f
  
  Set db=currentdb
  set rst=db.openrecordset("select * from Opisanie") 'создаем рекордсет по Opisanie
  r="create table tblOpisanie ("   'начальная строка sql-выражения 
  do until rst.eof                 'цикл по записям с анализом записей и созданием строки sql
    f=""
    if rst!C_tipdannih="string" 
       if isnull(rst!N_dlinastroki) then
         f="memo"
       else
         f="text ("  & rst!N_dlinastroki & ")"
       end if
    else 
       f=rst!C_tipdannih
    end if
    f=rst!C_nameyacheiki & " " & f 
    s=s & "," & f
    rst.movenext
  loop
  s=r & mid(s,2) & ")"  'сборка конечной строки
  db.execute s          'выполнить созданный запрос на создание таблицы
ebd sub
Писалось "на коленке", могут быть ошибки
1
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
14.05.2017, 19:57  [ТС]
mobile, Простите за долгий ответ, выходит ошибка синтаксиса при определении поля.
Получается вот такой вот запрос:
SQL
1
CREATE TABLE tblOpisanie ([Наименование] text(50),[Автор] text(40),[Характеристики книги] ,[Жанр] text(20),[Год издания] INTEGER,[Издательство] text(40))


upd: Моя невнимательность, почему-то не работает условие для поля memo, когда тип и длина не указаны...
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
14.05.2017, 20:07
Цитата Сообщение от FloppyDisc Посмотреть сообщение
почему-то не работает условие для поля memo, когда тип и длина не указаны...
Тип поля обязательный параметр. Поле не может просто "Поле", оно всегда должно иметь какой-то тип. Это переменные и функции в вба могут быть Variant, а поле таблицы должно, обязано иметь определенный тип. И разумеется я не закладывался на пустую строку типа поля. Какой-то тип непременно должен быть.
1
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
14.05.2017, 20:38  [ТС]
mobile, можно еще вопрос. По этой же таблице Opisanie нужно вывести что-то типа отчета, который формируется за счет поля F_opisanie ( в моем БД f_description ). Т.е в этом поле указаны поля к кому они принадлежат, например на прикрепленном изображении видно, что "Жанр" и "Год издания" принадлежат полю "Характеристики книги" и в поле стоят ссылки на ключ к полю "Характеристики книги" - 3.

Так вот, возможно ли сформировать такую таблицу используя данных из таблицы описания? Формировать можно где угодно, где удобно

Прикрепляю свое БД, на всякий

З.Ы почему, когда хочу задать параметр процедуре CreateOpisanie() - VBA перестает ее видеть? Хотел, чтобы название таблицы можно было водить: CreateOpisanie(tblName As String)
Миниатюры
Можно ли создать таблицу в Базе, имея ее описание в другой таблице, средствами VBA?  
Вложения
Тип файла: rar bd.rar (33.2 Кб, 3 просмотров)
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
14.05.2017, 21:01  [ТС]
Есть маленькое дополнение - это поле статус (status)(создавать или не создавать поле), ведь поле "Характеристики книги" - это лишь условность (только для отчета), то он не должен существовать в БД.

И примерно сделал что-то такое:
Visual Basic
1
2
3
4
If rst!status = 1 Then
        f = "[" & rst!field_name & "]" & " " & f
    s = s & "," & f
End If
Вложения
Тип файла: rar bd.rar (32.7 Кб, 3 просмотров)
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
14.05.2017, 21:16
Лучший ответ Сообщение было отмечено FloppyDisc как решение

Решение

Цитата Сообщение от FloppyDisc Посмотреть сообщение
на прикрепленном изображении видно, что "Жанр" и "Год издания" принадлежат полю "Характеристики книги" и в поле стоят ссылки на ключ к полю "Характеристики книги" - 3.
Так вот, возможно ли сформировать такую таблицу используя данных из таблицы описания? Формировать можно где угодно, где удобно
Это немалая работа программно формировать сложный заголовок. Я бы рекомендовал Вам под любым предлогом избавиться от нее и перейти к созданию шаблонов отчета вручную или мастером. Или в екселе.

Цитата Сообщение от FloppyDisc Посмотреть сообщение
почему, когда хочу задать параметр процедуре CreateOpisanie() - VBA перестает ее видеть? Хотел, чтобы название таблицы можно было водить: CreateOpisanie(tblName As String)
Изменил программу, в том числе объявление процедуры. Введены 2 параметра: имя таблицы описания структуры и имя создаваемой таблицы. Также предусмотрен обход ошибки с сообщением.
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
Sub CreateOpisanie(tblDescription As String, tblCreation As String)
'tblDescription - имя таблицы с описанием структуры
'tblCreation    - имя создаваемой таблицы
 
  Dim db As dao.Database, rst As dao.Recordset
  Dim s, r, f
  
  On Error GoTo isErr
  
  Set db = CurrentDb
  Set rst = db.OpenRecordset("SELECT * FROM [" & tblDescription & "]")
  r = "CREATE TABLE [" & tblCreation & "] ("
  Do Until rst.EOF
    f = ""
    If rst!field_type = "string" Then
       If IsNull(rst!lengths) Then
         f = "memo"
       Else
         f = "text(" & rst!lengths & ")"
       End If
    Else
       f = rst!field_type
    End If
    f = "[" & rst!field_name & "]" & " " & f
    s = s & "," & f
    rst.MoveNext
  Loop
  s = r & Mid(s, 2) & ")"
  
  If ifTableExists(tblCreation) Then
  
    db.Execute "DROP TABLE [" & tblCreation & "]"
    
  End If
  
  db.Execute s
  'Debug.Print (s)
errNo:
  Exit Sub
isErr:
  MsgBox "Ошибка создания таблицы: " & Err & " " & Err.Description
  Resume errNo
End Sub
1
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
14.05.2017, 21:33  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Это немалая работа программно формировать сложный заголовок
Да я все понимаю, но что поделать, дали такое задание...

Добавлено через 5 минут
mobile, и все-таки, если запускать непосредственно с модуля (Run Sub) так что делать нельзя? Почему VBA их не видит?(
Именно процедуры с параметрами
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
14.05.2017, 23:26  [ТС]
Не подскажите, почему не выводятся названия полей?
Не ругайте за excel там тоже VBA)
Вложения
Тип файла: rar excel.rar (20.4 Кб, 4 просмотров)
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
14.05.2017, 23:56
Цитата Сообщение от FloppyDisc Посмотреть сообщение
почему не выводятся названия полей?
Потому что Вы их не заполняете. Нужен блочок для имен (код в Вашем стиле)
Visual Basic
1
2
3
4
5
6
7
8
    Set Location = [A1]
    Rw = Location.Row
    col = Location.Column
    c = col
    Dim i As Long
    For i = 0 To Rs.Fields.Count - 1
        Cells(Rw, i + 1) = Rs(i).Name
    Next
Для Ts то же самое, только заменить имя каталога (аналог рекордсета) и расположение строки заголовка
1
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
15.05.2017, 10:07  [ТС]
mobile, добрый день, а возможно ли сформировать вот такие вот таблицы?
Миниатюры
Можно ли создать таблицу в Базе, имея ее описание в другой таблице, средствами VBA?  
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
15.05.2017, 14:34  [ТС]
Excel или Word или даже в самом Access
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
15.05.2017, 14:54
Цитата Сообщение от FloppyDisc Посмотреть сообщение
а возможно ли сформировать вот такие вот таблицы?
Наверное возможно... Но я не понимаю принципов создания. Показанные скрины это что? Это таблица свойств для создания новой таблицы? Или это уже поля новой таблицы? Если таблица свойств, как Opisanie, то почему 2 скрина? И почему несколько полей разных типов вместо одного поля типов и поля размера? Словом, мне неясна сама задача. Постарайтесь ее описать точнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2017, 14:54
Помогаю со студенческими работами здесь

Подключение к внешей Базе Данных автоматически средствами VBA
В папке C:\Program Files (x86)\Common Files\ODBC\Data Sources лежат файлы подключений к БД с содержанием типа: DRIVER=SQL Server ...

Переход фокуса формы на запись в таблице средствами VBA
Здравствуйте уважаемые формумчане. Нужна помощь в составлении скрипта который бы сам переводил фокус формы (простой формы) на нужную...

Как средствами VBA записывать значения в таблицу (объект TableDef)?
У меня есть несколько запросов, результаты которых я хочу вносить в одну большую таблицу. То есть я их считываю, например, в...

Можно ли осуществить WEB-запрос средствами VBA
Доброго времени суток, уважаемые! Столкнулся с проблемой, написал вэб запрос на сайт, он к нему обращается. Но нужно чтобы он копировал...

Можно ли прописывать формулу в именах средствами VBA?
Добрый День. Вопрос по сути очень прост. Private Sub CommandButton3_Click() Dim str str = "=ЕСЛИ(1+1=2;1;0)" ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru