Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2012, 14:45   #1
Arega
 
Регистрация: 04.07.2012
Сообщений: 4
По умолчанию Ошибка 3021

У меня две таблицы - «sh» и «h» . В обе таблицах есть поле h_kod. Нужно удалить те записи из таблицы «h» , значения поля h_kod которых не имеется в таблице «sh». Я написала код, но при запуске дает ошибку 3021.

Подскажите пожалуйста в чем ошибка.

Set rstDao_sh = CurrentDb.OpenRecordset("sh")
Set rstDao_h = CurrentDb.OpenRecordset("h")
Do Until rstDao_h.EOF
rstDao_sh.MoveFirst
Do Until ((rstDao_sh.EOF) And (rstDao_h.Fields("h_kod").Value <> rstDao_sh.Fields("h_kod").Value))
rstDao_sh.MoveNext
Loop
If rstDao_sh.EOF Then
rstDao_h.Delete
rstDao_h.MovePrev
End If
rstDao_h.MoveNext
Loop
rstDao_sh.close
rstDao_h.close
Set rstDao_sh = Nothing
Set rstDao_h = Nothing
Arega вне форума Ответить с цитированием
Старый 04.07.2012, 16:16   #2
Arega
 
Регистрация: 04.07.2012
Сообщений: 4
По умолчанию спасибо, уже нашла...

Set rstDao_sh = CurrentDb.OpenRecordset("sh")
Set rstDao_h = CurrentDb.OpenRecordset("h")

Dim test As Boolean

Do Until rstDao_h.EOF

rstDao_sh.MoveFirst
test = True

Do Until rstDao_sh.EOF Or test = False

If rstDao_sh!h_kod = rstDao_h!h_kod Then
test = False
End If

rstDao_sh.MoveNext

Loop

If test = True Then
rstDao_h.Delete
End If

rstDao_h.MoveNext

Loop

rstDao_sh.Close
rstDao_h.Close

Set rstDao_h = Nothing
Set rstDao_sh = Nothing
Arega вне форума Ответить с цитированием
Старый 04.07.2012, 19:04   #3
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Arega.
если Ваша задача состоит именно в "кодописании" то возможно и оправдано выполнение подобных упражнений.
Хотя для удобочитаемости выкладываемый код необходимо заключайте в тэги [соde] ... [/соde]
(для этого на панели инструментов и расположена кнопка - #)
допускаю, Вы впервые на форуме и могли этого не знать, но занятие "много-строчным кодингом" и разбор
его ошибок, если задача решается одной строкой, считаю не только неправильным, но и бесполезным занятием.
Но это только моё мнение, Ваше право поступать как считаете нужным, а конструкция может быть такой:
Код:
CurrentDb.Execute("DELETE FROM h WHERE h_kod NOT IN(SELECT h_kod FROM sh)")
Успехов Вам.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 09.07.2012, 15:30   #4
Arega
 
Регистрация: 04.07.2012
Сообщений: 4
По умолчанию

Надо же... всего одна строка... и результат такой же...

Спасибо за помощь, Евгений

Вы правы, я впервые на форуме... Спасибо за советы, буду учесть их !
Arega вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nero - ошибка драйвера DMA. ошибка CRC NecRoMat Софт 5 09.05.2012 01:29
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка run-time Error 1004 общая ошибка ODBC kaval88 Microsoft Office Excel 0 27.02.2011 20:20
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26