|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Не выполняется UPDATE
Пишу запрос такого типа:
Код:
ClientDataSet.CommandText:='UPDATE [Таблица 1] SET [Количество]='+ '(SELECT SUM([Количество]) FROM [Таблица 2] WHERE [Идентификатор]=:Id),'+ '[Сумма]=(SELECT SUM([Сумма]) FROM [Таблица 2] WHERE [Идентификатор]=:Id) '+ 'WHERE [Идентификатор]=:Id'; ClientDataSet.Params.ParamByName('Id').AsString:= ClientDataSet.FieldByName('Идентификатор').AsString; ClientDataSet.Execute; Какой запрос ему нужен? Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому |
#2
|
||||
|
||||
Google в помощь |
#3
|
||||
|
||||
Цитата:
При описанных здесь проблемах, как я понял, UPDATE не выполняется вообще. У меня же, простые запросы типа "UPDATE Таблица SET [Поле]=Значение WHERE [№]=3" выполняются без проблем. Проблема появилась именно тогда, когда я попытался применить вложенные запросы. Сейчас я написал так: Код:
ClientDataSet.CommandText:='UPDATE [Таблица1] SET [Количество]='+ '(SELECT SUM([Количество]) FROM [Таблица2] WHERE [Идентификатор]=:Id),'+ '[Сумма]=(SELECT SUM([Сумма]) FROM [Таблица2] WHERE [Идентификатор]=:Id) '+ 'WHERE [Идентификатор]=:Id'; ClientDataSet.Params.Clear; ClientDataSet.Params.Add; ClientDataSet.Params[0].DataType:=ftWideString; ClientDataSet.Params[0].Name:='Id'; ClientDataSet.Params[0].ParamType:=ptInputOutput; ClientDataSet.Params[0].Size:=50; ClientDataSet.Params.ParamByName('Id').AsString:= ClientDataSet.FieldByName('Идентификатор').AsString; ClientDataSet.Execute; Теперь он мне другую ошибку выдаёт: "Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена." Если я правильно понимаю, структура запроса его больше не волнует. Что же теперь не так? Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому |
#4
|
||||
|
||||
Ну это уже поконкретнее.
Как раз надо сейчас смотреть на запрос. Это означает, что данные из какого-то поля получены с ошибкой. Идентификатор какого типа поле? Google в помощь |
#5
|
||||
|
||||
Идентификатор - поле строкового типа.
Генерируется процедурой из случайного набора символов и времени создания записи с точностью до миллисекунды, например: VЧFУMAhQbINкxInа16052012235953271. Я проверял, в обеих таблицах значение идентификатора верное. Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому Последний раз редактировалось Klassenas, 17.05.2012 в 21:01. |
#6
|
||||
|
||||
Может проблема в том, что надо явно задать имя для подзапроса?
Код:
ClientDataSet.CommandText:='UPDATE [Таблица1] SET [Количество]='+ '(SELECT SUM([Количество]) FROM [Таблица2] WHERE [Идентификатор]=:Id) as Tmp1,'+ '[Сумма]=(SELECT SUM([Сумма]) FROM [Таблица2] WHERE [Идентификатор]=:Id) as Tmp2'+ 'WHERE [Идентификатор]=:Id'; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |