Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
ankan
40 / 25 / 0
Регистрация: 28.09.2012
Сообщений: 754
1

Автоматическое создание таблиц из наименований таблиц, имен полей, типов полей

28.06.2016, 13:03. Просмотров 1130. Ответов 11
Метки нет (Все метки)

Форумчане, доброго времени суток!

Есть таблица в которую автоматом выгрузили имена всех таблиц, полей, их тип (и запросов на выборку) проекта.
Прошу помочь создать процедуру, которая будет делать обратное, т.е. воссоздавать (создавать вновь) все таблицы.

Во вложении:
TableName - имя таблицы
CjlumName - имя поля
Type - тип поля
0
Вложения
Тип файла: zip tbl_DateDictonery.zip (18.4 Кб, 6 просмотров)
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2016, 13:03
Ответы с готовыми решениями:

Автоматическое изменение значений полей при Выборе значения в поле со списком из связанных таблиц
Добрый день, бьюсь над проблемкой и не знаю как ее решить: Имеется несколько...

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

Сравнение полей таблиц
Всем доброго времени суток. Допустим , есть две таблицы: Table1:...

Сумма полей 4-х таблиц с условием
Как мне получить сумму этих полей? В условии находится поля месяц и код...

Произведение полей разных таблиц
Доброго времени суток, работаю над базой данных по оптовой реализации продукции...

11
shanemac51
Модератор
Эксперт MS Access
7806 / 3021 / 431
Регистрация: 07.08.2010
Сообщений: 8,223
Записей в блоге: 2
28.06.2016, 13:58 2
оригинальные типы полей
КодTableNameColumnNameType
6391tbl_TOiR_10_1_1_GryppИзделие 
6501tblCurrent_UserВыражение1 
6502tblCurrent_UserВыражение2 
    
6401tblAkt_Berc_PO_Bipyck_RAАктуальна_Ли_Версия_ПОYes/No
6413tblAkt_Berc_PO_Bipyck_RA_BceАктуальна_Ли_Версия_ПОYes/No
6467tblCklad_Dviz_Izdeliy_Avtom_PrixodПриходYes/No
6529tblNakleiki_PechatНа_ПечатьYes/No
6542tblOtborОтборYes/No
6551tblPrivyzka_Coctava_BremenОтмененоYes/No
6684tblИдентификатор_Изделия_ВременаяНа_ПечатьYes/No
1
ankan
40 / 25 / 0
Регистрация: 28.09.2012
Сообщений: 754
28.06.2016, 14:19  [ТС] 3
shanemac51, Если я правильно понял, Вы обращаете внимание на :Yes/No это тип логический (Да/Нет)
В трех полях не стоит их тип- это текстовые поля -Text
0
odbcsql
359 / 78 / 6
Регистрация: 14.08.2012
Сообщений: 223
28.06.2016, 16:18 4
Цитата Сообщение от ankan Посмотреть сообщение
Есть таблица в которую автоматом выгрузили имена всех таблиц, полей, их тип (и запросов на выборку) проекта.
Прошу помочь создать процедуру, которая будет делать обратное, т.е. воссоздавать (создавать вновь) все таблицы.
Во вложении:
TableName - имя таблицы
CjlumName - имя поля
Type - тип поля
Этого мало. Не отражено, что поле может быть счетчиком, что у таблиц/полей есть индексы и связи с другими таблицами. Если не ошибаюсь, мобайл где-то показывал как найти недостающие параметры. Ну а встроить их в создаваемые таблицы не так сложно. В запросе Create Table все это доступно.
1
ankan
40 / 25 / 0
Регистрация: 28.09.2012
Сообщений: 754
28.06.2016, 21:02  [ТС] 5
odbcsql, ВЫкладываю процедуру, которая отбирает все поля и т.д. Наверно ее можно изменить для того что-бы
Цитата Сообщение от odbcsql Посмотреть сообщение
Этого мало. Не отражено, что поле может быть счетчиком, что у таблиц/полей есть индексы и связи с другими таблицами. Если не ошибаюсь, мобайл где-то показывал как найти недостающие параметры
-кроме имен таблиц и имен полей, их типа отбирать и другие параметры (связи, информацию о ключевом поле , индексы, размеры полей и др.)
Процедура запускается открытием формы fDataDictionary
Соответственно, потом и восстановить таблицы с учетом Всех параметров.
0
Вложения
Тип файла: 7z На_Форум.7z (1.06 Мб, 9 просмотров)
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
29.06.2016, 10:37 6
ankan, а можете рассказать конечную цель этих танцев с бубнами?

Методов решения есть больше, чем один (я вижу как миниму два - либо генерить тексты запросов на создание таблиц, и выполнять их, либо добавлять объекты в коллекцию TableDefs), но мне кажется малоосмысленной сама задача. Если у вас уже есть эталонные таблицы - что мешает вам просто скопировать их без содержимого?
1
ankan
40 / 25 / 0
Регистрация: 28.09.2012
Сообщений: 754
29.06.2016, 13:00  [ТС] 7
texnik-san,
Цитата Сообщение от texnik-san Посмотреть сообщение
Если у вас уже есть эталонные таблицы
эталонных таблиц нет. Их создание и есть конечная цель (конечная цель этапа работы)
т.е. после изменения имен таблиц, имен полей на нужные в таблице DataDictionary - создание новых таблиц с новыми именами полей.
Потом в них отдельными запросами будут скопированы данные .
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
29.06.2016, 16:01 8
Т.е. метод Rename вас чем-то не устроил. Ясно. Тогда нате функцию, допиливайте под свои нужды (нужно расширить/подкорректировать список вариантов Select Case для не описанных мной типов данных, + вам таки понадобятся индекы и другие свойства)

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
Public Function TDCreator(strTableName As String) As Boolean
Dim db As DAO.Database, tdfNewDef As DAO.TableDef, fldNewField As DAO.Field
Dim rstSource As DAO.Recordset
On Error GoTo ErrHandler
    
    Set db = CurrentDb()
    Set rstSource = db.OpenRecordset("Select * From DataDictionary Where TableName='" & strTableName & "'")
    If rstSource.EOF Then Exit Function
    
    Set tdfNewDef = db.CreateTableDef(strTableName)
    While Not rstSource.EOF
        Select Case rstSource!Type
          Case "Integer"
            Set fldNewField = tdfNewDef.CreateField("" & rstSource!ColumnName, dbInteger)
          Case "Long Integer"
            Set fldNewField = tdfNewDef.CreateField("" & rstSource!ColumnName, dbLong)
          Case "Text"
            Set fldNewField = tdfNewDef.CreateField("" & rstSource!ColumnName, dbText)
          Case "Memo"
            Set fldNewField = tdfNewDef.CreateField("" & rstSource!ColumnName, dbMemo)
        End Select
        tdfNewDef.Fields.Append fldNewField
        rstSource.MoveNext
    Wend
    db.TableDefs.Append tdfNewDef
    
    rstSource.Close
    Set db = Nothing
    TDCreator = True
    Exit Function
 
ErrHandler:
   Select Case Err
      Case 3010
        DoCmd.DeleteObject acTable, strTableName
        Resume
      Case Else
         MsgBox CStr(Err) & " " & Err.Description
   End Select
   TDCreator = False
End Function
Добавлено через 1 минуту
Вот только я продолжаю недоумевать, зачем вам создадавать структуру снова в аксес. Насколько я помню, она вам в конечном итоге в MySQL нужна.
2
ankan
40 / 25 / 0
Регистрация: 28.09.2012
Сообщений: 754
29.06.2016, 18:20  [ТС] 9
texnik-san,
Цитата Сообщение от texnik-san Посмотреть сообщение
Вот только я продолжаю недоумевать, зачем вам создадавать структуру снова в аксес. Насколько я помню, она вам в конечном итоге в MySQL нужна.
после переименования нужно будеть обкатать все процедуры заново, восстановить сломанные и т.д. Если создать новую структуру сразу в MySQL то разобраться почему что-то не работает будет очень сложно ( это не все переименовано корректно или особенности работы MySQL ?)
0
ankan
40 / 25 / 0
Регистрация: 28.09.2012
Сообщений: 754
08.07.2016, 17:37  [ТС] 10
texnik-san, Пробую запустить Вашу процедуру- не запускается.
Я создал пустую БД, скопировал в нее ЗАПОЛНЕННУЮ таблицу DataDictionary , загрузил в модуль Ваш код, открыл его, поставил курсор на код и нажал F5.
Думал- сейчас создадутся таблицы- но таблицы не создались (появилось окошко для ввода ? макроса).
Что я не так сделал?
0
Вложения
Тип файла: rar tbl_DateDictonery.rar (23.2 Кб, 3 просмотров)
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
08.07.2016, 17:46 11
ankan, а я писала процедуру для создания многих таблиц? Или, может быть, я где-то сказала "нате вам готовое средство"?

Я написала функцию, которой нужно передать параетром имя одной талицы, и ясно русским по белому написала, что это образец и его нужно допиливать. Самостоятельно.
1
Tan4ek
0 / 0 / 1
Регистрация: 17.07.2018
Сообщений: 1
18.07.2018, 13:08 12
Лучший ответ Сообщение было отмечено alexpro1979 как решение

Решение

Цитата Сообщение от texnik-san Посмотреть сообщение
Тогда нате функцию, допиливайте под свои нужды (нужно расширить/подкорректировать список вариантов Select Case для не описанных мной типов данных, + вам таки понадобятся индекы и другие свойства)
Спасибо!!!
0
18.07.2018, 13:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2018, 13:08

Отпределить связь таблиц и их полей
Отпределить связь таблиц и их полей

Слияние полей из двух таблиц
Доброго времени суток. Имеем две таблицы: A с единственным полем C и B с...

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


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

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

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