Тайм-аут на Recordset со связанными таблицами - PullRequest
0 голосов
/ 05 марта 2012
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, но таблица блокируется после того, как он делает первый Удалить.

Есть еще один способ выбора записей без использования RecordSet?

Заранее спасибо.

1 Ответ

0 голосов
/ 05 марта 2012

Я думаю, что вы можете искать что-то вроде:

DELETE FROM AGR_1252 
WHERE AGR_NAME = Agr
AND Varbl Not In (
  SELECT c.ORG_OBJECT 
  FROM Role_Content r 
  INNER JOIN CONF_USOBT_C_ORG c 
  ON r.TCode =c.[Name]
  WHERE r.AGR_NAME Is Null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...