Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2018, 17:32   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
сломал глаза, не вижу
прикалуешься?
Код:
for i:=2 to Level+1 do begin
для Level=1 означает, что цикл выполнится один раз. s1 обновится при этом, s2 нет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.03.2018, 21:51   #12
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Тестировал на 5 наборах данных - работает.
Код:
Option Explicit

Sub MAKE_ME_HAPPY()
    Dim SQL As String
    SQL = "delete [TableOut].* FROM [TableOut]"
    DoCmd.SetWarnings False
    DoCmd.RunSQL SQL
    DoCmd.SetWarnings True
    Creater (0)
End Sub

Private Sub Creater(Level As Integer)
    Dim s1 As String
    Dim s2 As String
    Dim i As Integer
    Dim SQL As String
    Dim RS As Recordset

    If Level = 0 Then
        SQL = "INSERT INTO [TableOut] ([Sku], [Lvl1]) SELECT [Виріб], [Індекс складника] FROM [Норми в основних одиницях]"
        DoCmd.SetWarnings False
        DoCmd.RunSQL SQL
        DoCmd.SetWarnings True
    Else
        SQL = "SELECT T1.Lvl" & CStr(Level) & " AS SKU, T2.Lvl1 AS Lv" & _
            " FROM [TableOut] T1 INNER JOIN [TableOut] T2 ON T1.Lvl" & Level & "=T2.SKU" & _
            " GROUP BY T1.Lvl" & Level & ",T2.Lvl1"
        Set RS = CurrentDb.OpenRecordset(SQL)
        If RS.RecordCount = 0 Then Exit Sub

        SQL = "UPDATE TableOut INNER JOIN TableOut AS T2 ON" & _
            " TableOut.Lvl" & Level & " = T2.Sku SET TableOut.Lvl" & (Level + 1) & " = [T2].[Lvl1];"

        DoCmd.SetWarnings False
        DoCmd.RunSQL SQL
        DoCmd.SetWarnings True
        
        s1 = "": s2 = ""
        For i = 1 To Level
            s1 = s1 + ",Lvl" & i + 1
            If i < Level Then s2 = s2 + ",T1.Lvl" & i + 1
        Next i
        
        SQL = "INSERT INTO TableOut (Sku, Lvl1" & s1 & ")" & _
                " SELECT T1.Sku, T1.Lvl1" & s2 & ",T2.Lvl1" & _
                " FROM TableOut T1 INNER JOIN TableOut T2 ON T1.Lvl" & Level & "=T2.Sku AND " & _
                " T1.Lvl" & (Level + 1) & "<>T2.Lvl1"
        
        DoCmd.SetWarnings False
        DoCmd.RunSQL SQL
        DoCmd.SetWarnings True
    End If
    Creater (Level + 1)
End Sub



Цитата:
Сообщение от Аватар Посмотреть сообщение
для Level=1 означает, что цикл выполнится один раз. s1 обновится при этом, s2 нет
Че реально? Шок. Думал, только Repeat..Until минимум 1 раз выполниться. Попытался на http://rextester.com/l/pascal_online_compiler провернуть такое, но "з того роя не получилось ні...чого"
Код:
program HelloWorld;
var Level : integer;
    i     : integer;
begin
    Level := 1;
    For i:=2 to Level-1 do
        writeln(i);
end.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 06.03.2018, 22:13   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ёлы-палы )) Ну где там было Level-1 ? +1, +1, ++++1.. Да, смотрю в книгу - вижу фигу ))
Ну сработало и хорошо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.03.2018 в 22:20.
Аватар вне форума Ответить с цитированием
Старый 06.03.2018, 22:51   #14
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Да, смотрю в книгу - вижу фигу ))
К тому же, даже курсором выделял и вголос проговаривал каждый символ. Еще думал: во загнул - цикл до Level-1, а і сравнивается с Level+1.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 07.03.2018, 07:49   #15
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Цитата:
SQL = "INSERT INTO [TableOut] ([Sku], [Lvl1])
SELECT [Виріб], [Індекс складника] FROM [Норми в основних одиницях]"
я конечно не знаю ваших потребностей, но обычно состав изделий подразумевает пересчет входимости детали в сборку и получение комплектации детали/сборки в изделии

из таб СОСТАВ СБОРОК (код, кодКуда,кодЧто, сколько) надо получить СОСТАВ ИЗДЕЛИЙ(код, кодИзделия, кодДетали, комплектация)

причем некая деталь может входить в несколько сборок,подсборок,узлов и для получения комплектации промежуточные входимости перемножаются и группируются по изделие+деталь
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 07.03.2018, 13:31   #16
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

shanemac51,
так с (кодЧто, кодКуда) и получаю состав изделий.

Можете на данных этого топика привести пример каким должен быть результат с Вашей точки зрения?

Код:
кодЧто     кодКуда
0	1
1	5
1	6
0	2
2	3
3	4
0	3
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 07.03.2018, 13:42   #17
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

сейчас нет времени, вечером посмотрю

исхожу из того
--у машины 4 колеса
--не каждое колесо 4 гайки, а на заднее может быть и 6
--значит на изделие надо 2*4+2*6=20 гаек

причем количество может быть и дробное(особенно упаковка) --например в наборе 4 батарейки

значит на 1 батарейку приходится 0,25 упаковки

это условные примеры --в реалии вариантов много больше
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите пожалуйста (Организовать таблицу как хэш – таблицу) Владимир123321 C# (си шарп) 0 23.09.2013 14:44
Преобразовать таблицу SlimFIT Microsoft Office Excel 2 17.10.2012 14:47
Преобразовать в локальную таблицу GES Microsoft Office Access 3 07.09.2012 10:09
Преобразовать таблицу(Вопрос от новичка) Citizen^K Microsoft Office Excel 3 10.02.2010 11:53
VBA Преобразовать в диапазон таблицу king13 Microsoft Office Excel 4 16.10.2009 11:08