Форум: "Базы";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
ВнизADO+MSAccess+Update Найти похожие ветки
← →
msguns © (2004-10-06 13:44) [0]Не катит такой запрос:
UPDATE TblRes R
SET Key4=
(SELECT T1.Key4 FROM Tbl1 T1
WHERE (T1.Key1=R.Key1) AND
(T1.Key2=R.Key2) AND
(T1.Key3=R.Key3))
Говорит, что требуется запрос на обновление. Запускал и из Access, и из TADOCommand.
← →
Nikolay M. © (2004-10-06 14:03) [1]Попробуй. Под SQL Server работает.
UPDATE
TblRes
SET
Key4 = T1.Key4
FROM
TblRes R,
Tbl1 T1
WHERE
(T1.Key1=R.Key1) AND
(T1.Key2=R.Key2) AND
(T1.Key3=R.Key3)
← →
msguns © (2004-10-06 15:16) [2]>Nikolay M. © (06.10.04 14:03) [1]
Кричит, что FROM без SELECT не канает ;(
(запускаю из-под аксеса)
← →
sniknik © (2004-10-06 16:25) [3]вот так должон
UPDATE TblRes R
SET Key4=
(SELECT Max(T1.Key4) FROM Tbl1 T1
WHERE (T1.Key1=R.Key1) AND
(T1.Key2=R.Key2) AND
(T1.Key3=R.Key3))
← →
Nikolay M. © (2004-10-06 16:45) [4]
> sniknik © (06.10.04 16:25) [3]
У меня и твой тоже не работает. А почему должен сработать?
← →
sniknik © (2004-10-06 17:00) [5]> А почему должен сработать?
не знаю. но в током виде как был приведен идет присвоение еденичному полю массива значений (рекордсета), агрегатная функция гарантирует что запрос тоже выдаст еденичное значение.
> У меня и твой тоже не работает.
счас проверю. а что говорит?
скорее и подзапрос неверен, ну хотя бы потому что в нем ссылка на внешнюю (по отношению к нему) таблицу R, в этом случае просто внутри нужно обьеденение сделать.
← →
sniknik © (2004-10-06 17:03) [6]а вообще то не буду (проверять), т.к. по смыслу запрос бредовый, не может быть чтобы именно этого хотели.
← →
sniknik © (2004-10-06 17:20) [7]вот так еще смысл есть
UPDATE TblRes R
INNER JOIN Tbl1 T1 ON
R.Key1 = T1.Key1 AND
R.Key2 = T1.Key2 AND
R.Key3 = T1.Key3
SET R.Key4 = T1.Key4
(обновить все Key4 в таблице, а в оригинале неизвестно какой и значением из списка)
← →
Nikolay M. © (2004-10-06 17:21) [8]Может, он данные просто переносит?
Говорит, что хочет Updateable query.
← →
msguns © (2004-10-06 17:34) [9]Запрос вообще-то не бредовый. По крайней мере в IB все тип-топ.
А смысл простой:
Есть 2 схожие по стуктуре таблицы с полями
ID AutoInc
Key1 - поле логического ключа 1
...
KeyN - поле логического ключа N
Data1 - поле данных 1
...
DataN - поле данных N
Есть 3-я таблица такой же структуры, которая должна "объединить" данные 2-х первых
Делаю раз - удаление из Т3 всех записей
Делаю два - вставляю в Т3 все записи Т1
Делаю три - вставляю в Т3 все записи Т2, логические ключи которой отсутствуют в Т1
Делаю чертыре - в записях Т3, логические ключи в которой совпадают с лог.ключами Т2, замену полей данных
Вообще-то реальный пример, конечно, существенно сложнее, но смысл я передал достаточно точно. Что-то вроде репликации, а точнее объединение 2-х баз с разных компов в одну итоговую.
Раньше с IB подобная задачка для меня не представляла проблем, но вот пришлось иметь дело с ADO+Access, который я не знаю. Выкачал с sql.ru документацию, проутюжил ее всю, но там с UPDATE совсем куцые примеры :((
← →
sniknik © (2004-10-06 17:39) [10]ну так всетаки всю таблицу а не одно поле в неизвестном месте (аксес понимает именно так, судя по ошибке в [0]), попробуй запрос в [7].
← →
msguns © (2004-10-06 17:45) [11]>sniknik © (06.10.04 17:20) [7]
Все отработало ! Все дело в том, что комбинации логических ключей в каждой из исходных таблиц являются уникальными в пределах этих таблиц. Можно, конечно, создать индекс по этим полям и сделать его уникальным, но дело в том, что в реальных БД (а перед запуском объединеняющего приложения БД просто копируются с компов узеров) таких индексов нет. Соответственно и я не могу их туда добавить.
← →
msguns © (2004-10-06 17:54) [12]Спасибо всем, а особенно sniknik © !
Буду использовать новый (для меня) прием на реальных таблицах.
← →
Nikolay M. © (2004-10-06 17:55) [13]
> sniknik © (06.10.04 17:20) [7]
Хм, практически такой же вариант я в [1] предлагал, не знал такой формы для аксеса.
← →
msguns © (2004-10-07 12:14) [14]А вот это что:
Проходит ->UPDATE TblRes AS R
INNER JOIN Tbl1 AS T1
ON (R.Key1=T1.Key1) AND (R.Key2=T1.Key2) AND (R.Key3=T1.Key3)
SET R.Key4 = T1.Key4, R.Data1 = T1.Data1, R.Data2 = T1.Data2, R.Data3 = T1.Data3;
Не проходит (вопит, что неверная конструкция UPDATE)->UPDATE FONDSR AS R
INNER JOIN Fonds IN "e:\DMsArch\FondsCmp\AlexDB\Data.mdb" AS TA
ON (R.Letter=TA.Letter) AND (R.FondNumber=TA.FondNumber) AND
(R.FondType=TA.FondType) AND (R.Category=TA.Category)
SET R.AFID = TA.FID, R.AArcID = TA.ArcID;
Она, что IN для джоинов не хавает ?
← →
Nikolay M. © (2004-10-07 12:17) [15]Думаю, аксесу не нравится внешняя база и я его понимаю.
← →
msguns © (2004-10-07 12:23) [16]>Nikolay M. © (07.10.04 12:17) [15]
>Думаю, аксесу не нравится внешняя база и я его понимаю.
А вот это проскакивает на-ура:INSERT INTO FONDSR ( FLT, FLA, Letter, FondNumber, FondType, Category, TFID, TArcId, TCountry, TSDate, TEDate, TFSize, TQDI, TQMF, TQS, TAvl, TPassT, TPassL, TPassN, TJoinL, TJoinN, TUtil, TLossId, TLossDt, TLossDc )
SELECT 1, 0, Letter, FondNumber, FondType, Category, FID, ArcId, Country, StartDate, EndDate, FondSize, DontInvent, Microfished, Secret, Availability, PassTo, PassLetter, PassNumber, JoinLetter, JoinNumber, UtilDate, LossCauseId, LossDate, LossDoc
FROM Fonds IN "e:\DMsArch\FondsCmp\TatDB\Data.mdb";
Наверное, поэтому я асксес и не понимаю.
Чего и вылазию сюда :(
← →
Nikolay M. © (2004-10-07 12:26) [17]Я имел ввиду, что ему не нравится это в апдейте.
Вылазий лучше сюда
http://www.sql.ru/forum/actualtopics.aspx?bid=4
там спецы есть серьезные, а тут только sniknik © :)
← →
sniknik © (2004-10-07 12:27) [18]http://delphimaster.net/view/3-1096621509/
приведена конструкция синоним IN, попробуй поменять.
← →
msguns © (2004-10-07 12:59) [19]>Nikolay M. © (07.10.04 12:26) [17]
Был там. Даже зарегился. Но послать сабж в форум не дает - орет, что произошла ошибка сервера (N раз подряд да и сегодня та же картина)
>sniknik © (07.10.04 12:27) [18]
Списибо за помощь, но придется все же брать лопату ;((
← →
Nikolay M. © (2004-10-07 13:15) [20]
> Но послать сабж в форум не дает - орет, что произошла ошибка
> сервера
Сегодня пару ответов запостил в МС СКЛ-ном форуме - без проблем :(
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.035 c