Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обновление данных UPDATE'ом 
V
    Опции темы
AlexB
Дата 16.2.2011, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.2.2011

Репутация: нет
Всего: нет



Добрый день!
Вопрос заключается в следующем: можно ли при выполнении команды UPDATE передавать с параметром SET не константу, а ссылку на ячейку, её содержащую?
Если "да", тогда что неправильно в команде 
UPDATE RS2009 SET [RS2009]![1] = [Importer]![1] WHERE [RS2009]![Time] = [Importer]![Time], 
которая по моей задумке должна обновить записи поля "1" таблицы RS2009 значениями из поля "1" таблицы Importer при совпадении связанного ключвого поля "Time"
Если "нет", как реализовать задуманное?

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

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  test.rar 28,47 Kb
PM MAIL   Вверх
Akina
Дата 16.2.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(AlexB @  16.2.2011,  12:01 Найти цитируемый пост)
можно ли при выполнении команды UPDATE передавать с параметром SET не константу, а ссылку на ячейку, её содержащую?

Что тут было названо "ячейкой"? Это не Эксель, в Аксессе такого термина НЕТ.
Цитата(AlexB @  16.2.2011,  12:01 Найти цитируемый пост)
что неправильно в команде 
Код

UPDATE RS2009 SET [RS2009]![1] = [Importer]![1] WHERE [RS2009]![Time] = [Importer]![Time]

Всё. Абсолютно всё. Начиная от синтаксиса, и кончая ссылками.
1) Прочтите ВНИМАТЕЛЬНО справку по синтаксису многотабличного UPDATE и исправьте синтаксис запроса.
2) Разберитесь, чем разделитель "!" отличается от разделителя ".", и исправьте синтаксис ссылок.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
AlexB
Дата 16.2.2011, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.2.2011

Репутация: нет
Всего: нет



Цитата(Akina @ 16.2.2011,  11:36)
Что тут было названо "ячейкой"? Это не Эксель, в Аксессе такого термина НЕТ.
1) Прочтите ВНИМАТЕЛЬНО справку по синтаксису многотабличного UPDATE и исправьте синтаксис запроса.
2) Разберитесь, чем разделитель "!" отличается от разделителя ".", и исправьте синтаксис ссылок.

Спасибо за критику. Однако кроме критики я ожидал немного конструктива:

При чтении Вашего сообщения, я понял, что вы поняли, что под термином "ячейка" я имел ввиду "поле записи".  Не могли бы Вы всё-таки ответить на вопрос? Ожидалось как минимум "да" или "нет". Наличие примера сняло бы дальнейшие вопросы и сэкономило Вам (да и мне) время. 

Вы пишете "неправильный синтаксис". Хорошо, пусть так. Тем не менее, в приложении есть файл, в которм сохранён запрос построенный мастером в Access, который синтаксически правилен. Он тоже не работает. Соответственно ошибка носит принципиальный характер. Задачу я описал, и сам решить её не смог. 
Что-нибудь более конкретное чем RTFM посоветуете?

Спасибо.


PM MAIL   Вверх
Akina
Дата 16.2.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(AlexB @  16.2.2011,  14:26 Найти цитируемый пост)
Ожидалось как минимум "да" или "нет"

Да нет, наверное, хотя...
Более определённо сказать не могу.

Цитата(AlexB @  16.2.2011,  14:26 Найти цитируемый пост)
я понял, что вы поняли, что под термином "ячейка" я имел ввиду "поле записи".

У нас тут технический форум. И потому ожидается грамотное и правильное применение технических терминов. Иной раз неплохо и в справку залезть... как ты собираешься понимать ответы, не зная терминологии?

Цитата(AlexB @  16.2.2011,  14:26 Найти цитируемый пост)
Наличие примера сняло бы дальнейшие вопросы и сэкономило Вам (да и мне) время. 

А у меня нет задачи экономить тут время. Моя задача - заставить человека самостоятельно работать и мыслить, лишь пытаясь указать ему направление для самообразования. Готовые решения "без понимания" просят в разделе "Помощь студентам".



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
AlexB
Дата 16.2.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.2.2011

Репутация: нет
Всего: нет



Попробую ещё раз:

Пытался обновить записи поля "1" таблицы RS2009 значениями из поля "1" таблицы Importer при совпадении связанного ключвого поля "Time", для чего соорудил с помощью мастера Access следующее: 
UPDATE RB2009 SET RB2009.[1] = [Importer]![1], RB2009.[2] = [Impoter]![2] WHERE (((RB2009.Time)=[Impoter]![Time])).  
Однако, вместо ожидаемого обновления Access начинает запрашивать значения Importer!1, Importer!2 etc.  
Значит ли это, что при выполнении команды UPDATE нельзя передавать с параметром SET вместо константы, ссылку на поле записи, её содержащую? 
 
Что поправить, чтобы заработало? 
Спасибо. 

PM MAIL   Вверх
Akina
Дата 16.2.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(AlexB @  16.2.2011,  14:54 Найти цитируемый пост)
Значит ли это, что при выполнении команды UPDATE нельзя передавать с параметром SET вместо константы, ссылку на поле записи, её содержащую? 

Нет.
Это значит, что Вы так и не прочитали справку по многотабличному UPDATE.

Цитата(AlexB @  16.2.2011,  14:54 Найти цитируемый пост)
Access начинает запрашивать значения Importer!1, Importer!2 etc.  

Правильно. Из текста запроса (только !!! запроса, а не всей БД) совершенно неясно, что это за хрень такая - Importer. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
AlexB
Дата 16.2.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.2.2011

Репутация: нет
Всего: нет



Спасибо. 
Ваш высокий профессонализм поражает.
Надеюсь, Вам никогда не придётся срочно искать информацию вне Вашей компетенции.

Это сообщение отредактировал(а) AlexB - 16.2.2011, 14:29
PM MAIL   Вверх
Akina
Дата 16.2.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(AlexB @  16.2.2011,  15:07 Найти цитируемый пост)
Надеюсь, Вам никогда не придётся срочно искать информацию вне Вашей компетенции.

Сплошь и рядом. Я часто стараюсь отвечать на вопросы за пределами своей компетенции, перекапывая кучу вроде ненужной мне документации. И порой у меня это даже получается. Плюс остаются полученные знания.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
AlexB
Дата 16.2.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.2.2011

Репутация: нет
Всего: нет



Большинство многотабличных запросов приводится в форме
Код
 UPDATE items, month SET items.price=month.price WHERE items.id=month.id; 

где отсутствуют специфические для Access разделители. В чистом виде этот код не работает - и здесь точно ошибка синтаксиса.
Если вы знаете, ПОЖАЛУЙСТА, напишите пример кода, или дайте ссылку на страницу, где такие придурки как я могут это узнать.

PM MAIL   Вверх
Akina
Дата 16.2.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(AlexB @  16.2.2011,  15:49 Найти цитируемый пост)
В чистом виде этот код не работает - и здесь точно ошибка синтаксиса.

Вот хоть и был убеждён, что ты написАл хрень, но не поленился - создал 2 указанные таблицы с указанными полями, заполнил, скопипастил текст и запустил на выполнение. Обновление выполнено, причём ровно так, как должно быть выполнено.

Цитата(AlexB @  16.2.2011,  15:49 Найти цитируемый пост)
отсутствуют специфические для Access разделители

Они и не нужны.

Цитата(AlexB @  16.2.2011,  15:49 Найти цитируемый пост)
Большинство многотабличных запросов приводится в форме

Совершенно правильная форма. В отличие от твоей, где в секции использованных таблиц перечислены не все таблицы, используемые в запросе, а только одна - обновляемая. Потому Аксесс и не может понять, что есть Importer. Удали из своего последнего запроса ссылку на необновляемую таблицу, как в запросе из первого поста:
Код

UPDATE items SET items.price=month.price WHERE items.id=month.id; 

и немедленно получишь то сообщение, которое огребаешь по исходному посту.

Цитата(AlexB @  16.2.2011,  15:49 Найти цитируемый пост)
дайте ссылку на страницу, где такие придурки как я могут это узнать.

См. закреплённую тему форума.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
AlexB
Дата 16.2.2011, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.2.2011

Репутация: нет
Всего: нет



В моём случае код
Код
UPDATE RB2009, Importer SET RB2009.1 = Importer.1, RB2009.2 = Importer.2 WHERE RB2009.Time=Importer.Time

приводит к ошибке: Недопустимое использование '.', '!' или '()'. В выражении запроса 'Importer'. '.
А у Вас, как я понял, срабатывает. Исчерпывающе.

Код (с присвоением цен), который был приведён выше я нагуглил после первого же совета про синтаксис многотабличного UPDATE...


Это сообщение отредактировал(а) AlexB - 16.2.2011, 15:47
PM MAIL   Вверх
Akina
Дата 16.2.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



На сей раз Ваша ошибка - несоблюдение правил присвоения имён полям таблиц. Но уж коли использованы недопустимые имена - следует сообщить Аксессу, что это имена полей, а не что-то иное.
Код

UPDATE RB2009, Importer 
SET RB2009.[1] = Importer.[1], RB2009.[2] = Importer.[2] 
WHERE RB2009.[Time] = Importer.[Time]


Добавлено через 2 минуты и 12 секунд
Цитата(AlexB @  16.2.2011,  16:44 Найти цитируемый пост)
А у Вас, как я понял, срабатывает. Исчерпывающе.

Да.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
AlexB
Дата 16.2.2011, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.2.2011

Репутация: нет
Всего: нет



Спасибо, разобрались.
Последний вопрос: в обеих таблицах ключевое поле Time в формате "полный формат даты", однако запрос на выборку или обновление возвращает 0 совпадений. Здесь-то что не так?
PM MAIL   Вверх
Akina
Дата 16.2.2011, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(AlexB @  16.2.2011,  17:19 Найти цитируемый пост)
ключевое поле Time 

Это ужасно.
Цитата(AlexB @  16.2.2011,  17:19 Найти цитируемый пост)
в формате "полный формат даты"

Это - формат ОТОБРАЖЕНИЯ, а не хранения. Хранится - с секундочками... потому сравнение и не срабатывает...




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
AlexB
Дата 18.2.2011, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.2.2011

Репутация: нет
Всего: нет



Цитата(Akina @ 16.2.2011,  17:15)
Это - формат ОТОБРАЖЕНИЯ, а не хранения. Хранится - с секундочками... потому сравнение и не срабатывает...

Как выглядит формат переменной типа "дата/время" в Access я не знаю. Кстати, я пытался заставить Access показывать в таблице "ноль часов, ноль минут", но не преуспел (отсюда сентенция про "полный формат"). Я понимаю, что формат отображения не сильно влияет на сравнение двух переменных. Но я пытался сравнивать именно записи, имеющие одинаковый тип: "дата/время". 
Одно из сравниваемых полей формата "дата-время" было получено импортом из Excel'a; значение другого поля того же типа  - сгенерировано с помощью простенького цикла на VBA 
Код

Private Const cTimeZero As Date = "01.01.2009 00:00:00"
Private Const cTimeOut As Date = "01.01.2010 00:00:00"
Private Const cTimeShift As Date = #12:05:00 AM#
...
Dim dTimeShift As Date
...
For dTimeShift = cTimeZero To cTimeOut Step cTimeShift

    rsRB.AddNew
    rsRB.Fields(0) = dTimeShift
    rsRB.Update

Next

Результат был визуально неотличим, однако выборка по совпадению поля возвращалась нулевая. Почему - не знаю.
Будучи ограниченным во времени и имея короткую базу ~100 тыс. записей решил задачу "в лоб" - создал в обеих таблицах функцией CStr копию даты в текстовом формате и сравнивал по ней.

Ещё раз спасибо. Постараюсь с идиотскими вопросами больше приставать.

Это сообщение отредактировал(а) AlexB - 18.2.2011, 11:30
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0809 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.