Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Диапазон для цикла из поля таблицы / 16 сообщений из 16, страница 1 из 1
29.03.2020, 16:39
    #39942035
WalkManX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
Добрый день! Помогите разобраться как сделать цикл для блока
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0101"
     trg![MOANVALUE] = rst![PAR0101]
     trg.Update



Границы диапазона должны задаваться из таблицы T_MOParam, поле MOPACODE в котором данные сохраняются в виде
T_MOParam
MOPACODEPAR0101...PAR0205PAR0250...PAR0360
Данные в MOPACODE уникальны

Весь код
Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
Option Compare Database
Option Explicit
Function Add_to_T_MOANAL(strAnmosaCode As Variant) As Boolean
  'On Error GoTo ErrorHandler
  
  Dim dBase As DAO.Database, rst As DAO.Recordset, trg As DAO.Recordset
  Dim MOANDAY As Integer, MOANMONTH As Integer, MOANYEAR As Integer, MOANDATE As Date
  Dim DelMOSACODE As String
    
  MOANDAY = Day(Forms![frm_Main_Input]![MOSADATE])
  MOANMONTH = Month(Forms![frm_Main_Input]![MOSADATE])
  MOANYEAR = Year(Forms![frm_Main_Input]![MOSADATE])
  MOANDATE = Forms![frm_Main_Input]![MOSADATE]
  DelMOSACODE = Forms![frm_Main_Input]![MOSACODE]
  
  Application.SetOption "Confirm Action Queries", False
                    Dim strS As String
                            strS = "DELETE T_MOANAL.*, T_MOANAL.ANMOSACODE " & vbCrLf & _
                                     "FROM T_MOANAL " & vbCrLf & _
                                     "WHERE (((T_MOANAL.ANMOSACODE)= " & DelMOSACODE & " ));"
         CurrentDb.Execute (strS)
        
        
  'DoCmd.OpenQuery "del_T_MOANAL"
  Application.SetOption "Confirm Action Queries", True
  
  Add_to_T_MOANAL = True
  
  Set dBase = CurrentDb
  Set rst = dBase.OpenRecordset("PARAMETR", dbOpenTable)
  Set trg = dBase.OpenRecordset("T_MOANAL", dbOpenTable)
  
  rst.Index = "PrimaryKey"
      
  rst.Seek "=", strAnmosaCode
  If Not rst.NoMatch Then
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0101"
     trg![MOANVALUE] = rst![PAR0101]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0102"
     trg![MOANVALUE] = rst![PAR0102]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0103"
     trg![MOANVALUE] = rst![PAR0103]
     trg.Update
  
       trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0104"
     trg![MOANVALUE] = rst![PAR0104]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0105"
     trg![MOANVALUE] = rst![PAR0105]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0106"
     trg![MOANVALUE] = rst![PAR0106]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0107"
     trg![MOANVALUE] = rst![PAR0107]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0108"
     trg![MOANVALUE] = rst![PAR0108]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0109"
     trg![MOANVALUE] = rst![PAR0109]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0110"
     trg![MOANVALUE] = rst![PAR0110]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0111"
     trg![MOANVALUE] = rst![PAR0111]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0212"
     trg![MOANVALUE] = rst![PAR0212]
     trg.Update
  
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR0213"
     trg![MOANVALUE] = rst![PAR0213]
     trg.Update
  
    ...

   End If
  
exit_fn:
  rst.Close
  trg.Close
  Set rst = Nothing
  Set trg = Nothing
  Set dBase = Nothing
  Exit Function
  
ErrorHandler:
  Add_to_T_MOANAL = False
  MsgBox "Eroare # " & str(Err.Number) & " in Add_to_T_MOANAL " _
            & Err.Source & Chr(13) & Err.Description
  Resume exit_fn
End Function



P.S. заранее благодарю
...
Рейтинг: 0 / 0
29.03.2020, 17:05
    #39942037
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
WalkManX,
Ничё не понял: откуда(структура таблицы) и что(по каким параметрам производится отбор,куда они вводятся)? Вы хотите добавить-куда(структура таблицы)?
...
Рейтинг: 0 / 0
29.03.2020, 17:09
    #39942038
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
А еще лучше фрагмент БД с описанием "хотелки" и Вашими наработками
...
Рейтинг: 0 / 0
29.03.2020, 17:45
    #39942046
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
WalkManX,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
For i = 1 To 13
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = "PAR01" & Format(i, "00")
     trg![MOANVALUE] = rst("PAR01" & Format(i, "00"))
     trg.Update
Next
...
Рейтинг: 0 / 0
29.03.2020, 18:02
    #39942049
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
WalkManX, а что за загадочная таблица "PARAMETR" и сколько в ней полей?
...
Рейтинг: 0 / 0
29.03.2020, 18:03
    #39942050
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
__Michelle
Код: vbnet
1.
     trg![MOANVALUE] = rst("PAR01" & Format(i, "00"))

а не настораживает PAR0360 ?
...
Рейтинг: 0 / 0
29.03.2020, 19:21
    #39942059
WalkManX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
__Michelle,

Ваш вариант я уже пробовал, код запинается на записи
Код: vbnet
1.
 trg![MOANVALUE] = rst("PAR01" & Format(i, "00"))


в случаи если в таблице "PARAMETR" нет нужного поля.

Панург,
Таблица "PARAMETR" служит источником записей для формы через которую добавляются данные в БД, когда создавалась БД было не много, примерно 15 и не предполагалась добавление новых, сейчас их около 100 (знаю что не правильно так делать) и правильнее надо сделать источником для формы рекордсет из которого и добавлялись данные в таблицу "T_MOANAL", а не как сейчас из формы в "PARAMETR" и потом в "T_MOANAL", со временем буду исправлять.
Пока что мне нужен цикл с учетом значений из T_MOParam
...
Рейтинг: 0 / 0
29.03.2020, 19:37
    #39942064
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
WalkManX
мне нужен цикл с учетом значений из T_MOParam

Примерно так.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
...
Set rstMOParam = dBase.OpenRecordset("T_MOParam", dbOpenTable)
...
   Do until rstMOParam.EOF
      trg.AddNew
      trg![ANMOSACODE] = strAnmosaCode
      trg![MOANDAY] = MOANDAY
      trg![MOANMONTH] = MOANMONTH
      trg![MOANYEAR] = MOANYEAR
      trg![MOANDATE] = MOANDATE
      trg![ANMOPACODE] = rstMOParam.Fields("MOPACODE")
      trg![MOANVALUE] = rst.Fields(rstMOParam.Fields("MOPACODE"))
      trg.Update
      rstMOParam.Movenext
   Loop
... 
...
Рейтинг: 0 / 0
29.03.2020, 19:39
    #39942065
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
WalkManX
Таблица "PARAMETR" служит источником записей для формы через которую добавляются данные в БД, когда создавалась БД было не много, примерно 15 и не предполагалась добавление новых, сейчас их около 100
переделай пока не поздно (надеюсь) с "широкой" на "длинную" таблицу и пользуйся запросом
...
Рейтинг: 0 / 0
29.03.2020, 19:49
    #39942068
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
...
...
Рейтинг: 0 / 0
29.03.2020, 19:51
    #39942070
Диапазон для цикла из поля таблицы
Возможно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
    Set rsParam = dBase.OpenRecordset("T_MOParam")
Do Until rsParam.EOF
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = rsParam![MOPACODE]
     trg![MOANVALUE] = rst.Fields(rsParam![MOPACODE])
     trg.Update
 
     rsParam.MoveNext   
Loop

Несколько замечаний к вашему коду:
1. Если в таблице есть поле с датой, то совершенно излишне и даже вредно хранить отдельно ее производные. Их всегда можно получить на лету.

2. Метод Execute по умолчанию выполняется молча (даже при ошибках), поэтому
Application.SetOption "Confirm Action Queries" - лишнее.

3. Метод Seek конечно быстрый, но он годится только в режиме dbOpenTable и только для родных таблиц (в этом же файле). Если придет время выделить таблицы в отдельный файл - всё придется переделывать, поэтому с dbOpenTable лучше не баловаться.
А в вашем случае проще открыть rst на SELECT * FROM PARAMETR с отбором по strAnmosaCode.
...
Рейтинг: 0 / 0
29.03.2020, 20:19
    #39942079
WalkManX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
Кривцов Анатолий
Возможно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
    Set rsParam = dBase.OpenRecordset("T_MOParam")
Do Until rsParam.EOF
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = rsParam![MOPACODE]
           trg![MOANVALUE] = rst.Fields(rsParam![MOPACODE])
     trg.Update
 
     rsParam.MoveNext   
Loop

Несколько замечаний к вашему коду:
1. Если в таблице есть поле с датой, то совершенно излишне и даже вредно хранить отдельно ее производные. Их всегда можно получить на лету.

2. Метод Execute по умолчанию выполняется молча (даже при ошибках), поэтому
Application.SetOption "Confirm Action Queries" - лишнее.

3. Метод Seek конечно быстрый, но он годится только в режиме dbOpenTable и только для родных таблиц (в этом же файле). Если придет время выделить таблицы в отдельный файл - всё придется переделывать, поэтому с dbOpenTable лучше не баловаться.
А в вашем случае проще открыть rst на SELECT * FROM PARAMETR с отбором по strAnmosaCode.


Ругается на строке отмеченным красным "Элемент не обнаружен в данном семействе" как я понимаю он не нашел нужного поля в таблице?

За замечания спасибо,
1 Структуру базы не я создавал, мне она такой досталась.

2 там раньше была команда выполнения запроса
Код: vbnet
1.
  'DoCmd.OpenQuery "del_T_MOANAL"


я добавил
Код: vbnet
1.
2.
3.
4.
Dim strS As String
                            strS = "DELETE T_MOANAL.*, T_MOANAL.ANMOSACODE " & vbCrLf & _
                                     "FROM T_MOANAL " & vbCrLf & _
                                     "WHERE (((T_MOANAL.ANMOSACODE)= " & DelMOSACODE & " ));"


удалил запрос и забыл их закоментировать)

3 Разделения БД не предпологается 100%, хотя кто знает)
...
Рейтинг: 0 / 0
29.03.2020, 20:23
    #39942080
WalkManX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
Панург
WalkManX
Таблица "PARAMETR" служит источником записей для формы через которую добавляются данные в БД, когда создавалась БД было не много, примерно 15 и не предполагалась добавление новых, сейчас их около 100
переделай пока не поздно (надеюсь) с "широкой" на "длинную" таблицу и пользуйся запросом


В данный момент можно считать таблицу "PARAMETR" временной, так как после ввода данных в форму по кнопке "Сохранить" данные добавляются в T_MOANAL (правильную узкую) таблицу, а из "PARAMETR" (не правильную широкую) удаляются.
...
Рейтинг: 0 / 0
29.03.2020, 22:10
    #39942099
WalkManX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
Спасибо всем за помощь, все заработало.

Что бы не плодить темы спрошу здесь,
Код: vbnet
1.
2.
3.
4.
переменная
st = "нужное поле"

Forms![frm_Main_Input]![zPARAMETR].[Form]![имя поля]


как задать для "имя поля" переменную, как правильно составить строку кода ?
...
Рейтинг: 0 / 0
30.03.2020, 10:13
    #39942154
Диапазон для цикла из поля таблицы
WalkManX

Код: vbnet
1.
2.
3.
переменная
st = "нужное поле"
Forms![frm_Main_Input]![zPARAMETR].[Form]![имя поля]


как задать для "имя поля" переменную, как правильно составить строку кода ?

Если это в процедуре (не в запросе).
Если контрол на форме:
Forms![frm_Main_Input]![zPARAMETR].[Form].Controls(st)
Если поле только в источнике формы (впрочем, годится и для первого случая):
Forms![frm_Main_Input]![zPARAMETR].[Form].Recordset.Fields(st)
...
Рейтинг: 0 / 0
30.03.2020, 21:19
    #39942360
WalkManX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диапазон для цикла из поля таблицы
Кривцов Анатолий,

Спасибо вам большое еще раз!

Так как имена контролов в форме для ввода дынных, совпадают с записями в таблице "T_MOParam" то теперь если поменять в цикле пару строк то данные будут считываться сразу из формы и таблица "PARAMETR" уже и не нужна, минус еще не много мусора из БД)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
...
    Set rsParam = dBase.OpenRecordset("T_MOParam")
Do Until rsParam.EOF
+    st = rsParam![MOPACODE]
     trg.AddNew
     trg![ANMOSACODE] = strAnmosaCode
     trg![MOANDAY] = MOANDAY
     trg![MOANMONTH] = MOANMONTH
     trg![MOANYEAR] = MOANYEAR
     trg![MOANDATE] = MOANDATE
     trg![ANMOPACODE] = rsParam![MOPACODE]
-    trg![MOANVALUE] = rst.Fields(rsParam![MOPACODE])
+     trg![MOANVALUE] = Forms![frm_Main_Input]![zPARAMETR].[Form].Controls(st)
     trg.Update 
     rsParam.MoveNext   
Loop
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Диапазон для цикла из поля таблицы / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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