Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];

Вниз

Jet SQL, UPDATE и SELECT   Найти похожие ветки 

 
Wasp   (2002-04-12 11:01) [0]

Уважаемые мастера, помогите, пожалуйста, с проблемкой.
Есть БД Access, ADOQuery и такой запрос

UPDATE Ust
SET Дата =
(
SELECT MAX(Дата)
FROM Costs
)
WHERE Ust.Num=100


выдает ошибку "В операции должен использоваться обновляемый запрос"


 
roottim   (2002-04-12 12:23) [1]

Метод EcxecSql;
если не то.. то попробуй через ADOCommand чего там выдаст?


 
Kuusiniemi   (2002-04-12 12:37) [2]

ADO не может у Вас отличить записи одну от другой. Вот что имелось в виду. У Вас должен быть ключ в таблице или уникальный индекс.


 
Wasp   (2002-04-12 12:39) [3]

>roottim попробуй через ADOCommand чего там выдаст?

Да то же самое и выдает. Может такой формы записи UPDATE нет в Jet SQL? Хотя в Local SQL есть, это точно.


 
Johnmen   (2002-04-12 12:46) [4]

>Wasp : Уточни - в каком месте выдается ошибка (с кодом) !


 
roottim   (2002-04-12 12:49) [5]

у меня на эти русские буквы блин сомнения!
попробуй одной строчкой... чем черт не шутит
и
UPDATE Ust
SET Ust."Дата" =
(
SELECT MAX(Costs."Дата")
FROM Costs
)
WHERE Ust.Num=100

это на всякий пожарный!... а то что в кавычка должно полностью соответствовать названию поля... даже регистром


 
Wasp   (2002-04-12 12:57) [6]

>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 13:01) [7]

2Kuusiniemi © (12.04.02 12:37)
причем тут PK апдейт обновит в этом сл 2 строки.. а из скл видно что там и PK есть поле Num.. и тп..

уточнение
и нсчет "".. этоя для оракл нормально... чего то помнится в аксесе что-то типа [].. скорее всего оле провайдер к джету так и пропустит


 
Johnmen   (2002-04-12 13:03) [8]

>>>Add("update Ust as U"); <--- отсутствует пробел после U


 
roottim   (2002-04-12 13:05) [9]

2Wasp (12.04.02 12:57)
а чего ты по руски пишеш тогда ?
прогоние его через сам аксес..там ошибка эта тебе более подробно опишется самой субд

сори за 2 стр... в см там больше 8-)


 
Johnmen   (2002-04-12 13:07) [10]

>Johnmen © : Чего сказал-то, сам понял ?!


 
Kuusiniemi   (2002-04-12 13:17) [11]

2 roottim

"причем тут PK апдейт обновит в этом сл 2 строки.. а из скл видно что там и PK есть поле Num.."
Да что Вы?? И где это из текста
UPDATE Ust
SET Дата =
(
SELECT MAX(Дата)
FROM Costs
)
WHERE Ust.Num=100

видно что здесь Primary Key?????????? Вы, извините, экстрасенс??






 
Johnmen   (2002-04-12 13:35) [12]

Попробуй без излишков :
Add("update Ust set Cost=(select max(Cost) from Costs) where Number=100");
Если не работает, то скорее всего функциональность не поддерживается....


 
Wasp   (2002-04-12 13:53) [13]

>Johnmen ©

Попробовал, результат тот же. Значит нельзя в UPDATE использовать вложенный SELECT в инструкции SET. А жаль.


 
Johnmen   (2002-04-12 13:58) [14]

Спецификация SQL этого не запрещает, видимо дело в ADO+ODBC...


 
roottim   (2002-04-12 14:06) [15]

2Kuusiniemi © (12.04.02 13:17)
:-) за экстрасенса спасибо!...
да я не к тому что num это праймери...(что скорее всего) а ктому что апдейт должен обновить лиш одну строку, как вы высказались:
>ADO не может у Вас отличить записи одну от другой
зачем ему отличать .. он обновит все дубликаты... единственное что - это то что если имеются уникальные индексы.. то возможно этот запрос нарушает их уникальность
2Wasp
зайдите всеэе в субд акскс.. и сформируйте там запрос... ваша ошибка проявится с более корректным ответом от субд.. может быть дойдет почему..

запрос сделан нормально.. только бы я убрал as... хотя я знаю что аксесу это по барабану...



 
Wasp   (2002-04-12 14:20) [16]

>roottim

Где я только не пробовал, везде одна и та же ошибка (и в Access"е тоже). Кстати насчет индексов: изначально их не было. После того, как я добавил уникальный индекс (поле счетчик), ситуация не изменилась никак.


 
sniknik   (2002-04-12 14:47) [17]

попробуй в MSSQL вот так работает
update CashSail set CashNumber=(select max(CheckNumbe) from CashSail)
переходите все на MSSQL! ;-)


 
Johnmen   (2002-04-12 14:54) [18]

>sniknik © : Если будешь здесь разводить рекламную кампанию за MSSQL - давай отстегивай в фонд программистов других SQL серверов !!!!!!!!!!!!!!!!!!!1


 
roottim   (2002-04-12 14:57) [19]

не! на оракл :))!.. ладно долгий спор!
неполенился залес в этот долбанный аксес.. и действительно байда!
причем аксес держит конструкцию update типа
update t1, t2
set t1.field = t2.field
where t1.id= t2....

убить гея билтса давно пора!... похрен ему на стандарты блин :))


 
sniknik   (2002-04-12 15:01) [20]

это не реклама это факт.
кстати пробовал в mdb от офиса XP (не знаю номер) сказал следующее
2 EOleException : В операции должен использоваться обновляемый запрос
(индексов хочет? было такое) но все поля проиндексированы. счас еще попробую из другой товлици вставлять.


 
Johnmen   (2002-04-12 15:09) [21]

>sniknik © : У каждого свои факты, правды и резоны !


 
Wasp   (2002-04-12 15:18) [22]

Да рад бы перейти на MSSQL и стандартам я не противник, но начальник сказал Access, значит будем грызть Access.


 
sniknik   (2002-04-12 15:28) [23]

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

в Access тоже есть плюсы (по сравнению с локал SQl например, поклонники не пинаться!)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.005 c
1-17610
sssa
2002-04-22 19:10
2002.05.06
Как добавить свой курсор?


4-17726
mrvovik
2002-02-27 12:39
2002.05.06
Господа, как обрубить запуск exe-шника


1-17574
SaperXL
2002-04-22 09:38
2002.05.06
PaintBox


1-17575
s
2002-04-22 12:41
2002.05.06
Проблемы с принтерам!


3-17498
B_A_V
2002-04-12 15:38
2002.05.06
Можно ли программно скопировать таблицу, находящуюся в БД MS SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский