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


============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
02.10.2020, 16:04
    #40004930
dab2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
Здесь косяк - вычисляемые поля копируются текстовым типом... А надо бы полностью со всеми свойствами. Извиняюсь за такой 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
02.10.2020, 20:57
    #40005021
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
dab2,

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

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

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



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

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

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

https://stackoverflow.com/questions/43538373/trying-to-create-table-from-existing-table-structure-only
...
Рейтинг: 0 / 0
03.10.2020, 08:40
    #40005076
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
Неофит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
03.10.2020, 09:08
    #40005080
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедурки "конструктора" таблиц на DDL для имеющихся таблиц
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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Процедурки "конструктора" таблиц на DDL для имеющихся таблиц / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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