Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.06;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.011 c
1-17573
Чужой
2002-04-22 12:58
2002.05.06
Исходник чтения/записи текстового файла


4-17739
cok
2002-03-03 09:39
2002.05.06
error (xxx.dcu) + 139 порт


1-17549
Катерина
2002-04-23 14:25
2002.05.06
Опять про Chart


1-17615
Сергей Чурсин
2002-04-20 19:31
2002.05.06
В OnMouseMove не срабатывает Form.Cursor:=... ?


4-17750
mikki
2002-03-03 12:28
2002.05.06
Послать сообщение от неактивного окна.