проблема с Update

 
0
 
Delphi, Kylix and Pascal
ava
psyco | 22.04.2010, 22:49
Добрый вечер! Проблема состоит в том, что запрос с использованием Insert работает идеально для меня, а тот самый запрос с Update физически не делает ничего и ошибки не показывает, гад. В моем же случае нужно как раз обновлять данные.
Вот рабочий пример запроса с Insert:
ADOQuery1.SQL.Text:='INSERT INTO Статистика_картриджей (Код,Название_картриджа,'+
'Приблизительная_операция,Приблизительная_дата_операции,Необходимые_запчасти,Обьемы_тонера) VALUES '+
'("'+DBGridDBFirm.Columns[0].Field.AsString+'","'+DBGridDBFirm.Columns[1].Field.AsString+'",'+
'"'+Column[i]+'","'+DateToStr(ODate.DateResult(StrToDate(DateTS[i]),StrToDate(DateTS[j])))+'",'+
'"'+Parts+'","'+DBGridDBFirm.Columns[5].Field.AsString+'")';

Некоторые столбцы я записываю из переменных, некоторые из грида. Таблица при этом заполняется так, как мне надо и все вроде бы отлично, да вот проблема: если я буду постоянно его использовать, все данные будут накапливатся в этой таблице. И потому мне и нужно запросы с UPDATE. Вот я переписал вышеуказанный пример на UPDATE вариант:
ADOQuery1.SQL.Text:='UPDATE Статистика_картриджей '+
'SET Код="'+DBGridDBFirm.Columns[0].Field.AsString+'",'+
'Название_картриджа="'+DBGridDBFirm.Columns[1].Field.AsString+'",'+
'Приблизительная_операция="'+Column[i]+'",'+
'Приблизительная_дата_операции="'+DateToStr(ODate.DateResult(StrToDate(DateTS[i]),StrToDate(DateTS[j])))+'",'+
'Необходимые_запчасти="'+Parts+'",'+
'Обьемы_тонера="'+DBGridDBFirm.Columns[5].Field.AsString+'"';

При выполнении такого запроса, с таблицей ничего не происходит(по крайней мере я этого не вижу). Может быть дело в том, что я не использую предложение WHERE?Помогите, пожалуйста, буду очень благодарен!
Ответы (4)
ava
DarkProg | 22.04.2010, 22:04 #
Цитата (psyco @ 22.4.2010, 21:49 findReferencedText)
Может быть дело в том, что я не использую предложение WHERE?Помогите, пожалуйста, буду очень благодарен!

Ну а собственно вы же сами ответили на свой вопрос у вас должно обязано быть where ведь запрос с Update можно интерпретировать так
"Обновить таблицу1 установить значения для поля1=значение1 где поле2=значение2 "

ПРосто запрос не знает что ему обновить, ведь должно быть указание на то что обновляем, какую стороку или строки с каким условием.

Добавите where будет работать
ava
psyco | 22.04.2010, 22:11 #
Цитата


Добавите where будет работать


Ну хоть выяснил в чем дело,спасибо Вам! А в случае если у меня пустая таблица и Update исполняет роль Insert? Т.е. какое можно задать значение(пустое или всегда true'шное), чтобы Update заполнял все поля таблицы?Заранее спасибо!
ava
DarkProg | 22.04.2010, 22:28 #
Цитата (psyco @ 22.4.2010, 22:11 findReferencedText)
А в случае если у меня пустая таблица и Update исполняет роль Insert? Т.е. какое можно задать значение(пустое или всегда true'шное), чтобы Update заполнял все поля таблицы?

Update никогда не выполняет роль Insert'a.
Если у вас пустая таблица, то тогда у вас Update сработает но не найдя условия при котором выполнится Where поле=значени, ничего обновлять не будет.
Проверку на пустоту легко сделать
выполнив следующее действие

...Sql.add('Select * from table1.db');
if query.recordcount=0 then showmessage('таблица пустая')

после этого вы легко можете в зависимости от того пустая у вас таблица или нет выполнять Insert или Update.
ava
Vas | 23.04.2010, 07:28 #
UPDATE без where обновление всех записей таблицы. Нихрена он ничего не ищет, а тупо всем записям присвоит значение указанное в запросе и все.
БД какая? Компоненты доступа какие? Как смотрите что запрос не выполняется? После выполнения запроса обновление данных делаете? Транзакции используете?
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
ava  Vas   psyco ava  DarkProg
advanced
Отправить