![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Пишу запрос такого типа:
Код:
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
|
||||
|
||||
|
|
|
#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
|
||||
|
||||
|
Ну это уже поконкретнее.
Как раз надо сейчас смотреть на запрос. Это означает, что данные из какого-то поля получены с ошибкой. Идентификатор какого типа поле? |
|
#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'; |