![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Jet SQL, UPDATE и SELECT [D6, Access 97]
Wasp © (2002-04-12 11:01:00)Уважаемые мастера, помогите, пожалуйста, с проблемкой.
Есть БД Access, ADOQuery и такой запрос
UPDATE Ust
SET Дата =
(
SELECT MAX(Дата)
FROM Costs
)
WHERE Ust.Num=100
выдает ошибку "В операции должен использоваться обновляемый запрос"
sniknik (2002-04-12 15:28:00) [1]тогда выход разделить апдате на две операции (по крайней мере пока, а там может выход найдется), кстати ведь он не говорит что ошибочная операция он явно индексы хочет (причем по моему уникальные).
в Access тоже есть плюсы (по сравнению с локал SQl например, поклонники не пинаться!)
Wasp (2002-04-12 15:18:00) [2]Да рад бы перейти на MSSQL и стандартам я не противник, но начальник сказал Access, значит будем грызть Access.
Johnmen (2002-04-12 15:09:00) [3]>sniknik © : У каждого свои факты, правды и резоны !
sniknik (2002-04-12 15:01:00) [4]это не реклама это факт.
кстати пробовал в mdb от офиса XP (не знаю номер) сказал следующее
2 EOleException : В операции должен использоваться обновляемый запрос
(индексов хочет? было такое) но все поля проиндексированы. счас еще попробую из другой товлици вставлять.
roottim (2002-04-12 14:57:00) [5]не! на оракл :))!.. ладно долгий спор!
неполенился залес в этот долбанный аксес.. и действительно байда!
причем аксес держит конструкцию update типа
update t1, t2
set t1.field = t2.field
where t1.id= t2....
убить гея билтса давно пора!... похрен ему на стандарты блин :))
Johnmen (2002-04-12 14:54:00) [6]>sniknik © : Если будешь здесь разводить рекламную кампанию за MSSQL - давай отстегивай в фонд программистов других SQL серверов !!!!!!!!!!!!!!!!!!!1
sniknik (2002-04-12 14:47:00) [7]попробуй в MSSQL вот так работает
update CashSail set CashNumber=(select max(CheckNumbe) from CashSail)
переходите все на MSSQL! ;-)
Wasp (2002-04-12 14:20:00) [8]>roottim
Где я только не пробовал, везде одна и та же ошибка (и в Access"е тоже). Кстати насчет индексов: изначально их не было. После того, как я добавил уникальный индекс (поле счетчик), ситуация не изменилась никак.
roottim (2002-04-12 14:06:00) [9]2Kuusiniemi © (12.04.02 13:17)
:-) за экстрасенса спасибо!...
да я не к тому что num это праймери...(что скорее всего) а ктому что апдейт должен обновить лиш одну строку, как вы высказались:
>ADO не может у Вас отличить записи одну от другой
зачем ему отличать .. он обновит все дубликаты... единственное что - это то что если имеются уникальные индексы.. то возможно этот запрос нарушает их уникальность
2Wasp
зайдите всеэе в субд акскс.. и сформируйте там запрос... ваша ошибка проявится с более корректным ответом от субд.. может быть дойдет почему..
запрос сделан нормально.. только бы я убрал as... хотя я знаю что аксесу это по барабану...
Johnmen (2002-04-12 13:58:00) [10]Спецификация SQL этого не запрещает, видимо дело в ADO+ODBC...
Wasp (2002-04-12 13:53:00) [11]>Johnmen ©
Попробовал, результат тот же. Значит нельзя в UPDATE использовать вложенный SELECT в инструкции SET. А жаль.
Johnmen (2002-04-12 13:35:00) [12]Попробуй без излишков :
Add("update Ust set Cost=(select max(Cost) from Costs) where Number=100");
Если не работает, то скорее всего функциональность не поддерживается....
Kuusiniemi (2002-04-12 13:17:00) [13]2 roottim
"причем тут PK апдейт обновит в этом сл 2 строки.. а из скл видно что там и PK есть поле Num.."
Да что Вы?? И где это из текста
UPDATE Ust
SET Дата =
(
SELECT MAX(Дата)
FROM Costs
)
WHERE Ust.Num=100
видно что здесь Primary Key?????????? Вы, извините, экстрасенс??
Johnmen (2002-04-12 13:07:00) [14]>Johnmen © : Чего сказал-то, сам понял ?!
roottim (2002-04-12 13:05:00) [15]2Wasp (12.04.02 12:57)
а чего ты по руски пишеш тогда ?
прогоние его через сам аксес..там ошибка эта тебе более подробно опишется самой субд
сори за 2 стр... в см там больше 8-)
Johnmen (2002-04-12 13:03:00) [16]>>>Add("update Ust as U"); <--- отсутствует пробел после U
roottim (2002-04-12 13:01:00) [17]2Kuusiniemi © (12.04.02 12:37)
причем тут PK апдейт обновит в этом сл 2 строки.. а из скл видно что там и PK есть поле Num.. и тп..
уточнение
и нсчет "".. этоя для оракл нормально... чего то помнится в аксесе что-то типа [].. скорее всего оле провайдер к джету так и пропустит
Wasp (2002-04-12 12:57:00) [18]>Johnmen ©
Вот кусок кода, немного измененный.
with ADOQuery1,SQL do
begin
Close;
Clear;
Add("update Ust as U");
Add("set U.Cost=");
Add("(");
Add(" select max(C.Cost)");
Add(" from Costs as C");
Add(")");
Add("where U.Number=100");
ExecSQL;
end;
Вот после ExecSQL и выдается
>Kuusiniemi ©
Скорее всего Вы правы. Потому что насчет нарушения индекса тоже говорилось.
roottim (2002-04-12 12:49:00) [19]у меня на эти русские буквы блин сомнения!
попробуй одной строчкой... чем черт не шутит
и
UPDATE Ust
SET Ust."Дата" =
(
SELECT MAX(Costs."Дата")
FROM Costs
)
WHERE Ust.Num=100
это на всякий пожарный!... а то что в кавычка должно полностью соответствовать названию поля... даже регистром
Johnmen (2002-04-12 12:46:00) [20]>Wasp : Уточни - в каком месте выдается ошибка (с кодом) !