Исключить COMPUTED BY поля для генератора запроса
Исключить COMPUTED BY поля для генератора запроса
Начало здесь.
viewtopic.php?f=26&t=26707&sid=b2a7ad1e ... 5c0827ae58
Проблема в том, что генератор запросов включает в SQL-запросы INSERT/UPDATE и некоторые COMPUTED BY поля. Вернее, в моем случае, пока только одно поле.
На картинке скрипт этого поля.
Кстати, и в design-time, в генераторе SQL это вычисляемое поле тоже попадает в SQL-запросы INSERT/UPDATE. Но в дизайне я могу с помощью клавиши Ctrl и мышки убрать выделение с этого поля.
В таблице много вычисляемых полей, но проблема только с этим.
Подскажите, по каким признакам генератор определяет, что поле - изменяемое или только для чтения?
Может перед генерацией запросов как-то пометить ненужные для INSERT/UPDATE поля?
viewtopic.php?f=26&t=26707&sid=b2a7ad1e ... 5c0827ae58
Проблема в том, что генератор запросов включает в SQL-запросы INSERT/UPDATE и некоторые COMPUTED BY поля. Вернее, в моем случае, пока только одно поле.
На картинке скрипт этого поля.
Кстати, и в design-time, в генераторе SQL это вычисляемое поле тоже попадает в SQL-запросы INSERT/UPDATE. Но в дизайне я могу с помощью клавиши Ctrl и мышки убрать выделение с этого поля.
В таблице много вычисляемых полей, но проблема только с этим.
Подскажите, по каким признакам генератор определяет, что поле - изменяемое или только для чтения?
Может перед генерацией запросов как-то пометить ненужные для INSERT/UPDATE поля?
- Вложения
-
- Screenshot_6.jpg (26.14 КБ) 11081 просмотр
Re: Исключить COMPUTED BY поля для генератора запроса
И вот еще одно поле. Оно вычисляемое и в Update/Insert оно не должно попадать
- Вложения
-
- Screenshot_9.jpg (45.26 КБ) 11077 просмотров
Re: Исключить COMPUTED BY поля для генератора запроса
тут есть кто-нибудь?
Re: Исключить COMPUTED BY поля для генератора запроса
Здравствуйте,
Спасибо за информацию. Мы исследуем данное поведение UniDAC и сообщим Вам результат.
wbr, Oleg
Devart Team
Спасибо за информацию. Мы исследуем данное поведение UniDAC и сообщим Вам результат.
wbr, Oleg
Devart Team
Re: Исключить COMPUTED BY поля для генератора запроса
Проблема так и не исправлена.
Вот, вычисляемое поле попадает в insert/update запрос, если нажать кнопку GenerateSQL в редакторе TuniQuery.
Вот, вычисляемое поле попадает в insert/update запрос, если нажать кнопку GenerateSQL в редакторе TuniQuery.
- Вложения
-
- Screenshot_19.jpg (22.29 КБ) 8328 просмотров
-
- Screenshot_20.jpg (13.63 КБ) 8328 просмотров
Re: Исключить COMPUTED BY поля для генератора запроса
Здравствуйте,
Мы работаем над проблемой, исправление будет включено в следующий релиз UniDAC
wbr, Oleg
Devart Team
Мы работаем над проблемой, исправление будет включено в следующий релиз UniDAC
wbr, Oleg
Devart Team
Re: Исключить COMPUTED BY поля для генератора запроса
А когда можно ожидать исправление проблемы?
Re: Исключить COMPUTED BY поля для генератора запроса
Мы улучшили автоопределение computed полей при генерации update-запросов для датасета. Новый билд UniDAC 8.4.1, включающий данное улучшение, уже доступен для скачивания.
Re: Исключить COMPUTED BY поля для генератора запроса
Хорошо. Попробую новую версию.
Спасибо большое.
Спасибо большое.
Re: Исключить COMPUTED BY поля для генератора запроса
Спасибо за интерес к нашим продуктам.
Обращайтесь к нам, если у вас возникнут вопросы по нашим продуктам.
Обращайтесь к нам, если у вас возникнут вопросы по нашим продуктам.
Re: Исключить COMPUTED BY поля для генератора запроса
uniDAC 8.4.1, Firebord 3.
Теперь появилась другая проблема.
Исходный запрос:
все три поля редактируемые
вот скрипт создания таблицы
а вот автоматически сгенерированный запрос:
отсутствует поле deleted
а вот со сгенерированным запросом update проблемы нет:
вот процедура автогенерации запросов (вот снимок, где виден входящий sql-запрос http://prntscr.com/10nxr0e )
Теперь появилась другая проблема.
Исходный запрос:
Код: Выделить всё
select id, name, deleted from OPERATION
вот скрипт создания таблицы
Код: Выделить всё
CREATE TABLE OPERATION (
ID INTEG NOT NULL /* INTEG = INTEGER */,
NAME STRING32 /* STRING32 = VARCHAR(32) */,
OPER_SUPER_TYPE STRING128 /* STRING128 = VARCHAR(128) */,
DELETED FIB$BOOLEAN /* FIB$BOOLEAN = SMALLINT DEFAULT 0 CHECK (VALUE IN (0,1,NULL)) */
);
Код: Выделить всё
INSERT INTO OPERATION
(ID, NAME)
VALUES
(:ID, :NAME)
а вот со сгенерированным запросом update проблемы нет:
Код: Выделить всё
UPDATE OPERATION
SET
ID = :ID, NAME = :NAME, DELETED = :DELETED
WHERE
ID = :Old_ID
вот процедура автогенерации запросов (вот снимок, где виден входящий sql-запрос http://prntscr.com/10nxr0e )
Код: Выделить всё
procedure GenSQL(const UniQuery: TUniQuery; const aSelectSql: string = '');
Var
DAParamsInfo: TDAParamsInfo;
begin
// если параметр aSelectSql пустой, значит запрос живет UniQuery.SQL и тогда его не меняем
if not aSelectSql.IsEmpty then
UniQuery.SQL.Text := aSelectSql;
UniQuery.KeyFields := 'id';
if not UniQuery.Active then
UniQuery.Open;
TDBAccessUtils.SQLGenerator(UniQuery).SubstituteParamName := False;// для генерирования запроса с именованными параметрами
DAParamsInfo := TDAParamsInfo.Create(TDAParamInfo);
UniQuery.SQLInsert.Text := TDBAccessUtils.SQLGenerator(UniQuery).GenerateSQL(DAParamsInfo, _stInsert, true);
DAParamsInfo.Free;
DAParamsInfo := TDAParamsInfo.Create(TDAParamInfo);
UniQuery.SQLUpdate.Text := TDBAccessUtils.SQLGenerator(UniQuery).GenerateSQL(DAParamsInfo, _stUpdate, False);// Для Update 3й параметр = False
DAParamsInfo.Free;
DAParamsInfo := TDAParamsInfo.Create(TDAParamInfo);
UniQuery.SQLDelete.Text := TDBAccessUtils.SQLGenerator(UniQuery).GenerateSQL(DAParamsInfo, _stDelete, true);
DAParamsInfo.Free;
DAParamsInfo := TDAParamsInfo.Create(TDAParamInfo);
UniQuery.SQLRefresh.Text := TDBAccessUtils.SQLGenerator(UniQuery).GenerateSQL(DAParamsInfo, _stRefresh, true);
DAParamsInfo.Free;
end;
Re: Исключить COMPUTED BY поля для генератора запроса
Когда я вызываю метод Insert, то появляется исключение:
Очень плохо, что uniDAC не показывает в какой SQL-секции произошло исключение и что именно за запрос вызвал это конкретное исключение.
откуда 113, если в запросе всего до 60 символов?Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 113
).
Очень плохо, что uniDAC не показывает в какой SQL-секции произошло исключение и что именно за запрос вызвал это конкретное исключение.
Re: Исключить COMPUTED BY поля для генератора запроса
Здравствуйте,
К сожалению, нам не удалось воспроизвести указанную вами проблему на основании предоставленных вами данных ни в Runtime, не в Designtime. Если у вас воспроизводится в Runtime то, пожалуйста, составьте небольшой пример, демонстрирующий проблему с генерацией SQL выражений в Runtime, а также воспроизводящий указанное исключение и включающий в себя DDL скрипт (или backup базы). Пример пришлите через форму: https://devart.com/company/contactform.html
Если в Designtime, то предлагаем снять видео. Видео залейте на наш FTP: ftp.devart.com Login public Password public
или на любой бесплатный хостинг и пришлите ссылку через указанную форму.
wbr, Oleg
Devart Team
К сожалению, нам не удалось воспроизвести указанную вами проблему на основании предоставленных вами данных ни в Runtime, не в Designtime. Если у вас воспроизводится в Runtime то, пожалуйста, составьте небольшой пример, демонстрирующий проблему с генерацией SQL выражений в Runtime, а также воспроизводящий указанное исключение и включающий в себя DDL скрипт (или backup базы). Пример пришлите через форму: https://devart.com/company/contactform.html
Если в Designtime, то предлагаем снять видео. Видео залейте на наш FTP: ftp.devart.com Login public Password public
или на любой бесплатный хостинг и пришлите ссылку через указанную форму.
wbr, Oleg
Devart Team
Re: Исключить COMPUTED BY поля для генератора запроса
Отправил.
Нажмите кнопку Button3, а потом Insert
Нажмите кнопку Button3, а потом Insert