как я могу добавить данные из двух запросов в одну таблицу? произошла ошибка времени выполнения: 3061 ожидаемое 2

#vba #ms-access

#vba #ms-access

Вопрос:

Я новичок в мире кода, и мне нужна ваша помощь. Я получаю сообщение «ошибка времени выполнения: ожидалось 3061 2».

Обратите внимание, что «QC_MonthlyAm4CuID_Tr» и «QC_YrlyAm4CuID_Tr» — это запросы с данными, недоступными для редактирования. И они зависят от выпадающего списка для выбора параметра.

Я перепробовал множество решений, найденных в Интернете, и потерпел неудачу. Я также пробовал другие варианты, кроме dbOpenDynaset, и также потерпел неудачу.

есть предложения?

 Dim db As Database
Dim rs As Recordset
Dim rsM As Recordset
Dim rsY As Recordset
Dim lngID As Long
Dim strCriteria As String

Set db = CurrentDb
Set rs = db.OpenRecordset("T_CrofServices", dbOpenDynaset)
Set rsM = db.OpenRecordset("QC_MonthlyAm4CuID_Tr", dbOpenDynaset)  `*here i get the error*`
Set rsY = db.OpenRecordset("QC_YrlyAm4CuID_Tr", dbOpenDynaset)
  

Комментарии:

1. Зачем вам добавлять данные из запроса в таблицу? Это пахнет плохим дизайном базы данных. Можете ли вы описать, какова ваша конечная цель?

2. @HackSlash Мне нужно сохранить данные, полученные из запросов, поскольку они различаются.

3. Но данные для запроса поступают из таблицы, поэтому они уже там. Вы никогда не должны повторять данные. Запрос всегда можно запустить снова. Вы можете объединять запросы в любом порядке. Вам действительно следует изучить дизайн базы данных, прежде чем слишком углубляться в то, что становится неподдерживаемым.

4. Возможно, вы столкнулись с проблемой XY. xyproblem.info Если вы сообщите нам, что вы делаете и почему, тогда мы, возможно, найдем ответ.

5. @HackSlash, хорошо, я объясню.

Ответ №1:

Вам необходимо установить значения параметров запросов:

 Dim db      As DAO.Database
Dim qdM     As DAO.QueryDef
Dim qdY     As DAO.QueryDef
Dim rs      As DAO.Recordset
Dim rsM     As DAO.Recordset
Dim rsY     As DAO.Recordset

Set db = CurrentDb

Set qdM = db.QueryDefs("QC_MonthlyAm4CuID_Tr")
Set qdY = db.QueryDefs("QC_YrlyAm4CuID_Tr")
qdM.Parameters(0).Value = <ValueFromYourFirstCombobox>
qdM.Parameters(1).Value = <ValueFromYourSecondCombobox>
qdY.Parameters(0).Value = <ValueFromYourThirdCombobox>
qdY.Parameters(1).Value = <ValueFromYourForthCombobox>

Set rs = db.OpenRecordset("T_CrofServices", dbOpenDynaset)
Set rsM = qdM.OpenRecordset()  `*here i get the error*`
Set rsY = qdY.OpenRecordset()
  

Комментарии:

1. спасибо, это сработало, но привело к другой проблеме .. теперь мой код работает без остановки! это добавило почти 999999 записей в таблицу и привело к сбою.. Я использую цикл для добавления записей, должен ли я использовать что-то еще?

2. Каким-то образом в вашем цикле отсутствует условие остановки. Если это отсутствует, оно будет вести себя так, как вы описываете.