Dim rt As DAO.Recordset
strSQL = "SELECT DISTINCT A.OBJ FROM "
strSQL = strSQL & "(SELECT VARBL AS OBJ FROM AGR_1252 WHERE AGR_NAME = '" _
& AGR & "') A LEFT JOIN "
strSQL = strSQL _
& "(SELECT DISTINCT CONF_USOBT_C_ORG.ORG_OBJECT AS OBJ FROM Role_Content, CONF_USOBT_C_ORG "
strSQL = strSQL & "WHERE Role_Content.AGR_NAME = '" _
& AGR & "' AND Role_Content.TCode = [CONF_USOBT_C_ORG].[Name] AND Role_Content.TCode <> '" & tc & "') B "
strSQL = strSQL & "ON A.OBJ = B.OBJ WHERE B.OBJ Is Null"
Set rt = CurrentDb.OpenRecordset(strSQL)
Do While Not rt.EOF
DoCmd.RunSQL "DELETE FROM AGR_1252 WHERE AGR_NAME = '" & AGR & "' AND VARBL = '" & rt("OBJ") & "'" ', False
rt.MoveNext
Loop
rt.Close
Set rt = Nothing
У меня есть код, указанный выше. Я не знаю, почему, но это дает мне ошибку во время цикла while. Я не знаю, если это из-за Recordset, но таблица блокируется после того, как он выберет firts Delete.Тайм-аут на Recordset со связанными столами
Существует другой способ выбора записей без использования RecordSet?
Заранее спасибо.
Что такое содержание strSQL? Вы должны иметь возможность сделать это с помощью одного оператора sql для удаления записей. – Fionnuala
Содержание strSQL: strSQL = «SELECT DISTINCT A.OBJ FROM» strSQL = strSQL & "(SELECT VARBL AS OBJ FROM AGR_1252 WHERE AGR_NAME = '" & AGR & "') LEFT JOIN" strSQL = strSQL & "(SELECT DISTINCT CONF_USOBT_C_ORG.ORG_OBJECT AS OBJ FROM Role_Content, CONF_USOBT_C_ORG" strSQL = strSQL & "WHERE Role_Content.AGR_NAME = '" & AGR & "' AND Role_Content.TCode = [CONF_USOBT_C_ORG]. [Name] AND Role_Content.TCode <> '' & tc & "') B" strSQL = strSQL & "ON A.OBJ = B.OBJ WHERE B.OBJ Is Null" – user1250171
Этот запрос работает для вас? Я заметил, что вы используете две строки с нулевой длиной ('WHERE Role_Content.AGR_NAME = '" '). Обычно получить ZLS в Access достаточно сложно, поэтому я ожидаю, что WHERE Role_Content.AGR_NAME is Null" – Fionnuala