2012-03-05 4 views
0
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?

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

+0

Что такое содержание strSQL? Вы должны иметь возможность сделать это с помощью одного оператора sql для удаления записей. – Fionnuala

+0

Содержание 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

+0

Этот запрос работает для вас? Я заметил, что вы используете две строки с нулевой длиной ('WHERE Role_Content.AGR_NAME = '" '). Обычно получить ZLS в Access достаточно сложно, поэтому я ожидаю, что WHERE Role_Content.AGR_NAME is Null" – Fionnuala

ответ

0

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

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) 
+0

Thaks, но запрос работает отлично, потому что она удаляет флирт записи, но когда она пытается удалить вторую запись дает время. Запрос, который вы опубликовали, работает одинаково = | Я думаю, что recordSet блокирует таблицу. Существует другой способ выбора данных без использования RecordSet? – user1250171

+0

Пример, который я опубликовал, должен запускаться в окне дизайна запроса. Он не удаляет одну запись за раз, но все записи сразу. Было бы небезопасно проверять реальные данные. – Fionnuala

Смежные вопросы