| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Access > Синтаксис вложений в UPDATE |
| Автор: c00per 2.2.2011, 20:52 | ||
| Пишу прогу на Delphi, использую БД access'а. Не могу выполнить запрос на обновление. есть одна главная таблица и 6 дочерних. Связь везде один ко многим. Другими словами главная таблица и 6 справочников. В запросе на обновление присутствие SELECT не возможно. Использую INNER JOIN. Никак не могу разобраться в синтаксисе. Подскажите как правильно связать эти таблицы? вот пример как пишу запрос из двух таблиц
|
| Автор: Akina 2.2.2011, 23:18 |
Запустите Аксесс. Создайте или откройте базу данных. Перейдите на вкладку Запросы. Выберите создание запроса в режиме конструктора. Переведите вид в режим SQL. Наберите слово UPDATE. Нажмите F1. Читайте. |
| Автор: c00per 3.2.2011, 10:29 | ||
За совет спасибо конечно, но я уже облазил справку вдоль и поперек. Делаю вот такой запрос
в таблице sistembloki существует запись с индексом 222, но почему то он ее не обновляет. Пишет "Будет обновлено 0 записей" |
| Автор: Akina 3.2.2011, 10:36 |
Отлично... в MS Access запрос на обновление можно открывать в режиме запроса на выборку - и соответственно смотреть. какие записибудут обновлены. Вот и проделайте это. Если показывается "запись с индексом 222", но не обновляется - это и правда косяк. А если не показывается - значит, она отсекается условиями связывания. |
| Автор: c00per 3.2.2011, 23:32 | ||||
Может стоить изменить в запросе?
на это
|
| Автор: Akina 4.2.2011, 09:08 |
| c00per, переделайте запрос полностью. Замените все джойны на декартово произведение и условия отбора. |
| Автор: c00per 4.2.2011, 11:46 | ||||
Это что то типа этого:
Я не очень то силен в sql. Разъясни, пожалуйста |
| Автор: Akina 4.2.2011, 12:03 | ||
C другой стороны запрос - бредовый... Смотри. У тебя условие отбора (ну или в исходном запросе - свяывания) WHERE cpu.id_cpu = sistembloki.id_cpu Т.е. УЖЕ равно. В то же время ты обновляешь SET sistembloki.id_cpu = cpu.id_cpu Т.е. пишешь что-то типа If 10=X Then X=10... Поневоле хочется спросить - нахрена??? |
| Автор: c00per 4.2.2011, 14:02 |
| в первом посте пример из двух таблиц работает без проблем. я по нему же делаю с несколькими таблицами. Ваш этот тоже отвечает "Будет обновлено 0 записей" я уже совсем запутался |
| Автор: Akina 4.2.2011, 14:44 |
Несомненно... я тебе сказал выше - у тебя ХРЕНЬ. И отсутствие логики. Ты намерен изменить поля записей, в которых УЖЕ лежит то значение, кторое ты намерен туда поместить - неудивительно, что ноль записей, ибо ты ЕЩЁ ПОКА значения туда НЕ ПОМЕСТИЛ... |
| Автор: c00per 4.2.2011, 15:23 | ||||
Видимо до вас не дошли фразы
и
Вы мне мой же пример выдаете и осуждаете! |
| Автор: Akina 4.2.2011, 15:57 |
Ваш пример приведён в каноническую форму - просто в качестве образца. Что же до осуждения - я, кажется, внятно говорю, что ВЫ пока что просто НЕ ПОНИМАЕТЕ того, что хотите сделать. Я тем более не понимаю. Более того - я не смогу понять - потому что не знаю ни предметной области, в которой происходит действо, ни постановки задачи, ни имеющихся уже структур и наполнений... по бутылке бензина я не смогу сказать, почему машина, которую я в глаза не видел и про которую ничего не слышал, не едет, и тут то же самое. |
| Автор: c00per 4.2.2011, 21:46 | ||
ну уж если это не машина что не едет, тогда вот... в приложенном файле расположены таблицы, поля и связи; и форма на которой происходит редактирование. Данные в комбобоксах берутся из справочников. эдиты заполняются из главной таблицы. Вот я и не могу создать запрос на обновление исходя из этих данных и таблиц |
| Автор: Akina 4.2.2011, 22:30 |
Вот http://forum.vingrad.ru/forum/topic-260944.html почитайте... |
| Автор: c00per 5.2.2011, 09:44 |
| прикройте тему, судя по всему здесь только модераторы отвечают на вопросы, а хотелось бы и услышать тех пользователей кто сталкивался с такой же проблемой как и у меня... за рекоммендации спасибо |
| Автор: bopoha 8.2.2011, 22:16 | ||
Концептуально не верно. Один UPDATE должен обновлять одну таблицу. Выполняйте 6 разных запросов. Если взять более серьезные СУБД, например, Informix, там такой возможности нет в принципе. |