powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
8 сообщений из 8, страница 1 из 1
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
    #40004821
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, у кого есть процедурки "конструктора" таблиц на DDL для имеющихся таблиц, что бы не удалять записи в таблицах, а удалять сами таблицы, а потом создавать, что быстрее, однако.
Код: sql
1.
DROP TABLE T1


============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
    #40004930
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь косяк - вычисляемые поля копируются текстовым типом... А надо бы полностью со всеми свойствами. Извиняюсь за такой DDL ))
Код: vbnet
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.
Public Sub copyTable(t_name As String, Optional t2_name As String = "copy_") 'копирование пустой таблицы с полями
Dim db As Database, tbl As TableDef, tbl2 As TableDef, fld As Field, prp As Property, prp2 As Property

On Error GoTo err1

Set db = CurrentDb
Set tbl = db.TableDefs(t_name)
Set tbl2 = db.CreateTableDef(t2_name & t_name)

For Each fld In tbl.Fields
  tbl2.Fields.Append tbl2.CreateField(fld.Name, fld.Type, fld.Size)
Next fld

db.TableDefs.Append tbl2

On Error Resume Next

With tbl2.Fields(fld.Name)

  For Each fld In tbl.Fields
    For Each prp In fld.Properties
      .Properties.Append .Properties(prp.Name)
      .Properties(prp.Name).Value = prp.Value
      .Properties(prp.Name).Type = prp.Type
      For Each prp2 In prp.Properties
        .Properties(prp.Name).Properties.Append .Properties(prp.Name).Properties(prp2.Name)
        .Properties(prp.Name).Properties(prp2.Name).Type = prp.Properties(prp.Name).Type
        .Properties(prp.Name).Properties(prp2.Name).Value = prp.Properties(prp.Name).Value
      Next prp2
    Next prp
  Next fld

End With

Exit Sub

err1:
If Err.Number = 3010 Then Resume Next

MsgBox Err.Number & vbLf & Err.Description, vbCritical, "Копирование пустой таблицы"

End Sub
...
Рейтинг: 0 / 0
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
    #40005021
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2,

такая метода
dab2
что бы не удалять записи в таблицах, а удалять сами таблицы, а потом создавать, что быстрее, однако

дурно пахнет, причем абсолютно со всех сторон
...
Рейтинг: 0 / 0
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
    #40005040
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это полезно при создании временных таблиц.
Фанатам аналитики, олап кубов и проч.
Действительно, при удалении огромного количества строк, если использовать конструкцию delete from table, а потом снова наполнять, то работает очень долго. Правильней дропнуть таблицу, и потом создать пустую.
Для mysql и ms sql есть отдельная команда, очень короткая, которая выполняет вышеуказанную процедуру очень быстро:

Код: plsql
1.
TRUNCATE TABLE  мояТаблица;



В аксессе не подвезли.
В vba примере чёт с наскоку не нашёл ошибок в коде.
...
Рейтинг: 0 / 0
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
    #40005045
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag

дурно пахнет, причем абсолютно со всех сторон
и не только в этом,но и в предыдущем топике-да и вообще манера ведения диалога с полным игнорированием вопросов от пытающегося помочь меня "восхищает".
dab2
что бы не удалять записи в таблицах, а удалять сами таблицы, а потом создавать, что быстрее, однако.
А ведь БД в которой постоянно удаляются и создаются новые таблицы место разве что на помойке.В связи с этим риторический вопрос: А ЗАЧЕМ ЭТО?
На этапе разработки более чем достаточно штатных средств,если же это будет при работе,то выше сказано где место такой БД
...
Рейтинг: 0 / 0
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
    #40005046
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dab2,

Я не эксперт, но народ в англоязычном интернете говорит про DoCmd.TransferDatabase с параметром StructureOnly=1

https://stackoverflow.com/questions/43538373/trying-to-create-table-from-existing-table-structure-only
...
Рейтинг: 0 / 0
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
    #40005076
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
dab2,

Я не эксперт, но народ в англоязычном интернете говорит про DoCmd.TransferDatabase с параметром StructureOnly=1

https://stackoverflow.com/questions/43538373/trying-to-create-table-from-existing-table-structure-only
+1

оформить в виде функции и "банкувать"
Код: vbnet
1.
2.
3.
4.
5.
Sub MyTruncate(TabName As String)
    DoCmd.Rename TabName & "_del", acTable, TabName
    DoCmd.TransferDatabase acImport, "Microsoft Access", CurrentProject.FullName, acTable, TabName & "_del", TabName, True
    DoCmd.DeleteObject acTable, TabName & "_del"
End Sub


"пересоздаёт" таблицу со всем "прицепом" в виде вычисляемых полей, индексов и ПК
НО, только если на таблице нет ФК (кстате, в МС СКЛ, Truncate тоже не сработает, в таком случае)
...
Рейтинг: 0 / 0
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
    #40005080
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
НО, только если на таблице нет ФК (кстате, в МС СКЛ, Truncate тоже не сработает, в таком случае)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub MyTruncate(TabName As String)
    Dim db As DAO.Database
    Dim idxLoop As DAO.Index
    
    Set db = CurrentDb
    For Each idxLoop In db.TableDefs(TabName).Indexes
        If idxLoop.Foreign Then
            MsgBox "Alarm !", vbCritical
            Exit Sub
        End If
    Next

    DoCmd.Rename TabName & "_del", acTable, TabName
    DoCmd.TransferDatabase acImport, "Microsoft Access", CurrentProject.FullName, acTable, TabName & "_del", TabName, True
    DoCmd.DeleteObject acTable, TabName & "_del"
End Sub
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]