Additional
dbCAP
AnyDAC
ThinDAC
NCOCI8
Topic: Проблема при вставки записи -с вычисляемыми полями
[1 2 |Next ]
Проблема при вставки записи -с вычисляемыми полями
Posted: 2008/03/12 23:45
 
Здравствуйте!

Подскажите пожалуйста в чем проблема.

В ADQuery задан следующий запрос (SQL):

SELECT D.[ID],
D.[DESCRIPTION],
D.[LENGHT],
D.[WIDTH],
D.[HEIGHT],
D.[WEIGHT],
(D.[LENGHT]*D.[WIDTH]*D.[HEIGHT]) AS VOLUME
FROM [dbo].[dirTYPE_PLACE_STORAGE] D

Поле "VOLUME" является вычисляемым полем, соответственно оно только для чтения. Что и говорит вкладка "Structure" компонента ADQuery.

VOLUME | DOUBLE(53,0) | Searchable; ReadOnly | VOLUME

В компоненте ADUpdate (он связан с ADQuery.UpdateObject) заданы следующие запросы:

--------------
"INSERT":
--------------
INSERT INTO DBO.DIRTYPE_PLACE_STORAGE
([ID],
[DESCRIPTION],
[LENGHT],
[WIDTH],
[HEIGHT],
[WEIGHT])
VALUES
(:NEW_ID,
:NEW_DESCRIPTION,
:NEW_LENGHT,
:NEW_WIDTH,
:NEW_HEIGHT,
:NEW_WEIGHT);

SELECT [DESCRIPTION],
[LENGHT],
[WIDTH],
[HEIGHT],
[WEIGHT],
([LENGHT]*[WIDTH]*[HEIGHT]) AS VOLUME
FROM DBO.DIRTYPE_PLACE_STORAGE
WHERE [ID] = :NEW_ID

--------------
"MODIFY":
--------------
UPDATE DBO.DIRTYPE_PLACE_STORAGE
SET [ID] = :NEW_ID,
[DESCRIPTION] = :NEW_DESCRIPTION,
[LENGHT] = :NEW_LENGHT,
[WIDTH] = :NEW_WIDTH,
[HEIGHT] = :NEW_HEIGHT,
[WEIGHT] = :NEW_WEIGHT
WHERE [ID] = :OLD_ID;

SELECT [DESCRIPTION],
[LENGHT],
[WIDTH],
[HEIGHT],
[WEIGHT],
([LENGHT]*[WIDTH]*[HEIGHT]) AS VOLUME
FROM DBO.DIRTYPE_PLACE_STORAGE
WHERE [ID] = :NEW_ID

--------------
"DELETE":
--------------
DELETE FROM DBO.DIRTYPE_PLACE_STORAGE
WHERE [ID] = :OLD_ID

---------------------
"FETCHROW":
---------------------
SELECT [ID], [DESCRIPTION], [LENGHT], [WIDTH], [HEIGHT], [WEIGHT], ([LENGHT]*[WIDTH]*[HEIGHT]) AS VOLUME
FROM DBO.DIRTYPE_PLACE_STORAGE
WHERE [ID] = :OLD_ID

=================
При добавлении записи в DataGrid выдается ошибка:

class EADException with message '[AnyDAC][DatS]-14. Column [VOLUME] value must be not null'
=================
Подскажите как быть, в таком случае?

Post edited by: Neutral, at: 2008/03/13 04:04
Re:Проблема при вставки записи -с вычисляемыми полями
Posted: 2008/03/13 01:15
 
Привет

Попробуй установить FieldByName('VOLUME').Required = False.
Re:Проблема при вставки записи -с вычисляемыми пол
Posted: 2008/03/13 03:22
 
Да! Ошибка не возникает.

Но, тогда после добавление или обновления записи, вычисляемое поле "VOLUME" в DataGrid не отображает свое истинное значение, в случае с Insert поле "VOLUME" остается пустым (не вычисляется), Update поле "VOLUME" (не обновляется - не вычисляется заново). Хотя запрос построен верно (См. выше).

Получается добиться, чтобы поле "VOLUME" получала свое новое значение средствами назначения события AfterPost в ADQuery:

ADQuery.Refresh;

Если сделать ADQuery.RefreshRecord, то выдается сообщение:
class EMSSQLNativeException with message '[AnyDAC][Phys][ODBC][Microsoft][SQL Native Client][SQL Server]Invalid column name 'VOLUME'.'.

Что в этом случае делать?

Post edited by: Neutral, at: 2008/03/13 03:33

Post edited by: Neutral, at: 2008/03/13 04:06
Re:Проблема при вставки записи -с вычисляемыми пол
Posted: 2008/03/13 03:33
 
Речь идет про anydac 2.0 или 1.12 ?
Re:Проблема при вставки записи -с вычисляемыми пол
Posted: 2008/03/13 03:35
 
Diman wrote:
Речь идет про anydac 2.0 или 1.12 ?

Пробую на AnyDAC 2.0, но 1-ый случай также наблюдается и в 1.12 тоже.
Re:Проблема при вставки записи -с вычисляемыми пол
Posted: 2008/03/13 04:44
 
Пробую на AnyDAC 2.0,
Какой буилд согласно history.txt ?
Re:Проблема при вставки записи -с вычисляемыми пол
Posted: 2008/03/13 05:29
 
Diman wrote:
Пробую на AnyDAC 2.0,
Какой буилд согласно history.txt ?


v 2.0.1.285 (06.03.08)
Re:Проблема при вставки записи -с вычисляемыми пол
Posted: 2008/03/13 05:46
 
Ok. У меня работает без проблем. Надо найти в чем разница:
1) Нужен DLL тблицы
2) Желательно нужна форма с ADQuery и ADUpdateSQL.
Re:Проблема при вставки записи -с вычисляемыми пол
Posted: 2008/03/13 06:23
 
Diman wrote:
Ok. У меня работает без проблем. Надо найти в чем разница:
1) Нужен DLL тблицы
2) Желательно нужна форма с ADQuery и ADUpdateSQL.


OK! В прикрепленном файле (в архиве) тестовый пример на Delphi 7 и DDL таблицы (без данных).
File Attachment:
File name: CalcField.rar
File size:9734 bytes


Хотелось бы еще проиграть эту проблему с AnyDAC 1.12.
Re:Проблема при вставки записи -с вычисляемыми пол
Posted: 2008/03/13 07:22
 
Нашел две проблемы:
1) ADQuery1.UpdateObject должен быть установлен в ADUpdateSQL1.
2) ADQuery1.UpdateOptions.RefreshMode должно быть rmOnDemand, т.е. по умолчанию.

После исправления - работает как часы.
[1 2 |Next ]