У меня возникла проблема при открытии формы в базе данных доступа, которую я разрабатываю. Запрос выполняется без остановки. Я должен вручную остановить его (так что действие, описанное ниже, не выполняется). На открытии форма должна выполнить эту часть кода:sql-запрос при открытии формы в базе данных доступа
Private Sub Form_Load()
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE Table1 SET Field1 = Null WHERE EXISTS(SELECT * FROM Query2 WHERE Query2.Field2 = Table1.Field2 AND Query2.Field3 = 0 AND Query2.Field1 = Table1.Field1)"
DoCmd.SetWarnings True
End sub
Другими словами, мне нужно проверить в Query2, в котором записывает field3 = 0 и среди этих записей, какие из них имеют Field1 соответствие Field1 из Table1 и Поле 2 соответствует полю 2 таблицы 1. Когда эти записи идентифицированы, я хочу установить значение записей Field1 в таблице 1 равным Null.
For example (i put in "code" aspect to have this part more readable, but it's not code, only an example)
Table1.Field1 | Table1.Field2
ABC 12345
DEF 67891
Query2.Field1 | Query2.Field2 | Query2.Field3
ABC 12345 5 --> this record is not selected
DEF 12345 0 --> this record is not selected
DEF 67891 0 --> this record is selected and value of DEF in Table1 is deleted (Null)
Вы видите ошибки? Вы видите какой-либо способ сделать это? я не знаю много о sql. Я надеюсь, что это достаточно ясно ...
Спасибо, Диана
Сколько строк в этих таблицах (примерно)? –
Похоже, это проблема с производительностью. Попробуйте сделать то же самое на таблицах с небольшим количеством строк, если он работает, прежде всего проверьте, индексированы ли все поля таблицы, используемые в 'WHERE' и' JOIN' во всех запросах. –
Спасибо за ваш ответ. У меня есть 2000 записей в каждом. Я проверил индекс, одно поле не было проиндексировано. Я пробовал несколько записей, он работает. есть ли лучший способ сделать это? – Diane