Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обновить данные из связанной таблицы в Access? [D6, Access]


Anatoliy ©   (2002-12-11 13:53:00) 

ACCESS

В общем есть две таблицы "Ценник" и "Наличие основной". "Наличие основной" - связанная таблица (внешняя) - текстовый файл. Ценник - основная. Нужно обновить поле "Количество" в "Ценник" из "Наличие основной".

Пишу нормальный запрос:
UPDATE Ценник INNER JOIN [Наличие основной] ON Ценник.Код = [Наличие основной].Код SET Ценник.Основной = [Наличие основной].Количество;
- ошибка: нельзя изменять связанные таблицы (!я же не изменяю связанную!)

Пишу тоже вроде нормальный запрос:
UPDATE Ценник SET Ценник.Основной = [Наличие основной].Количество
FROM [Наличие основной]
WHERE (((Ценник.Код)=[Наличие основной].Код));

- ошибка: нельзя писать FROM в UPDATE !!!

Операция до тупости простая, но как в Access это сделать?


sniknik   (2002-12-11 18:18:00) [1]

> почему не получается такой вариант.
а черт его знает вернее микрософт... :о). можно поискать у них на сайте.


Anatoliy   (2002-12-11 17:53:00) [2]

Извиняюсь за неточность. Я очень хотел обойтись без временных таблиц и добавления данных в БД. Очень она разростается после этого.
Спасибо.
А можно узнать причину, почему не получается такой вариант. Вроде все по честному!


sniknik   (2002-12-11 17:42:00) [3]

> неправильно выразился

да ты вообще молчал об этом, как партизан ей богу. со связаной точно не выйдет. перегоняй во временную.

> идет через ODBC

нет это сам Jet. Переброс из текста.
SELECT * INTO [Наличие основной] FROM [Наличие основной#Txt] IN "D:\" "Text;"


Anatoliy   (2002-12-11 17:24:00) [4]


> связанная таблица (внешняя)

Может я неправильно выразился. Таблица [Наличие основной] на самом деле текстовый файл, присоединенный к БД через мастер присоединенных таблиц.


Anatoliy   (2002-12-11 17:17:00) [5]


> UPDATE Ценник INNER JOIN [Наличие основной] ON Ценник.Код
> = [Наличие основной].Код SET Ценник.Основной = [Наличие
> основной].Количество;

В этом варианте была аналогичная ошибка.
Я еще попробовал
UPDATE Ценник SET Ценник.Основной = (SELECT [Наличие основной].Количество FROM [Наличие основной] WHERE (Ценник.Код=[Наличие основной].Код));
теперь ругается "Operation must be use an updatable query."

До Delphi я еще не дошел. Все тестировал прямо в Access.

Среда аналогичная Jet 4.00.6019.00 MDAC 2.7

Я думаю проблема в связанной таблице.

устанавливаемый драйвер ISAM
Специально задаваемый драйвер, который позволяет получить доступ к внешним базам данных в таких форматах как dBASE, Microsoft® Excel и Paradox. ISAM является сокращением от Indexed Sequential Access Method. Ядро базы данных Microsoft Jet устанавливает (загружает) эти драйверы ISAM, когда на них ссылается конкретное приложение. Расположение этих драйверов регистрируется в реестре Microsoft Windows®.

Я думал доступ к текстовому файлу (связаная таблица) идет через ODBC?


sniknik   (2002-12-11 17:07:00) [6]

Дико извиняюсь, первый вариант (с INNER JOIN) у меня тоже работает, а я не проверил :((. (но ты зря положил вольный перевод ошибки вместо оригинала, может быть и обратил внимание)


sniknik   (2002-12-11 16:57:00) [7]

Не скажи эффект другой. То была ошибка синтаксиса, и связанные таблици, а теперь "конструкция не поддерживается Исамом".

Подходим к вопросу чем пользуешся? я работаю через Jet 4.0 сервис пак 6, соответствено Mdac 2.7, подключаюсь через ADO.(можно и BDE но алиас ODBC должен все одно "смотреть" в Jet).

короче ставь Udate Jet-у.


Anatoliy   (2002-12-11 16:44:00) [8]

Тот же эффект "Updating data in a linked table is not supported by this ISAM". Хотя во всех вариантах нигде не указывается изменение внешней таблицы.


sniknik   (2002-12-11 15:01:00) [9]

говорил же примерно. не понимает Аксесс From.

UPDATE Ценник t, [Наличие основной] s SET t.Основной = s.Количество WHERE t.Код = s.Код

так должно


Anatoliy   (2002-12-11 14:32:00) [10]


> как же не изменяеш связанную join то делаеш, что это если
> не связь?



> SET Ценник.Основной = [Наличие основной].Количество;

Я изменяю только таблицу Ценник. [Наличие основной] проходит только как источник данных.


Anatoliy   (2002-12-11 14:29:00) [11]

Так тоже пробовал. При запуске спрашивает значение переменной [Наличие основной].Количество Хотя это поле!


sniknik   (2002-12-11 14:26:00) [12]

как же не изменяеш связанную join то делаеш, что это если не связь?

во втором, тоже правильно ругается, надо так примерно
UPDATE [Наличие основной] SET Ценник.Основной = [Наличие основной].Количество WHERE (((Ценник.Код)=[Наличие основной].Код))


Наверх

Титульная страница Поиск, карта сайта Написать письмо