powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Диапазон для цикла из поля таблицы
16 сообщений из 16, страница 1 из 1
Диапазон для цикла из поля таблицы
    #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
Диапазон для цикла из поля таблицы
    #39942037
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WalkManX,
Ничё не понял: откуда(структура таблицы) и что(по каким параметрам производится отбор,куда они вводятся)? Вы хотите добавить-куда(структура таблицы)?
...
Рейтинг: 0 / 0
Диапазон для цикла из поля таблицы
    #39942038
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше фрагмент БД с описанием "хотелки" и Вашими наработками
...
Рейтинг: 0 / 0
Диапазон для цикла из поля таблицы
    #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
Диапазон для цикла из поля таблицы
    #39942049
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WalkManX, а что за загадочная таблица "PARAMETR" и сколько в ней полей?
...
Рейтинг: 0 / 0
Диапазон для цикла из поля таблицы
    #39942050
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle
Код: vbnet
1.
     trg![MOANVALUE] = rst("PAR01" & Format(i, "00"))

а не настораживает PAR0360 ?
...
Рейтинг: 0 / 0
Диапазон для цикла из поля таблицы
    #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
Диапазон для цикла из поля таблицы
    #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
Диапазон для цикла из поля таблицы
    #39942065
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WalkManX
Таблица "PARAMETR" служит источником записей для формы через которую добавляются данные в БД, когда создавалась БД было не много, примерно 15 и не предполагалась добавление новых, сейчас их около 100
переделай пока не поздно (надеюсь) с "широкой" на "длинную" таблицу и пользуйся запросом
...
Рейтинг: 0 / 0
Диапазон для цикла из поля таблицы
    #39942068
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
...
Рейтинг: 0 / 0
Диапазон для цикла из поля таблицы
    #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
Диапазон для цикла из поля таблицы
    #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
Диапазон для цикла из поля таблицы
    #39942080
WalkManX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург
WalkManX
Таблица "PARAMETR" служит источником записей для формы через которую добавляются данные в БД, когда создавалась БД было не много, примерно 15 и не предполагалась добавление новых, сейчас их около 100
переделай пока не поздно (надеюсь) с "широкой" на "длинную" таблицу и пользуйся запросом


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

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

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


как задать для "имя поля" переменную, как правильно составить строку кода ?
...
Рейтинг: 0 / 0
Диапазон для цикла из поля таблицы
    #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
Диапазон для цикла из поля таблицы
    #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
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Диапазон для цикла из поля таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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