Найдено 217 результатов

Akella
Пн 12 июл 2021 09:46
Форум: Universal Data Access Components
Тема: Не генерируется запрос _stUpdate (GenerateSQL)
Ответы: 28
Просмотры: 17859

Re: Не генерируется запрос _stUpdate (GenerateSQL)

Хм... странно, я вообще убрал из кода свою процедуру, которая генерирует тексты update-запросов для этой компоненты uniQuery1.
Ошибка исчезла. Но...
Но все равно данные в базу через этот же самый uniQuery1 добавляются и редактируются.
Получается, что без моего ведома компонента uniQuery1 сама создает update-запросы автоматически? Или это регулируется каким-то свойством?
Akella
Чт 08 июл 2021 08:22
Форум: Universal Data Access Components
Тема: Не генерируется запрос _stUpdate (GenerateSQL)
Ответы: 28
Просмотры: 17859

Re: Не генерируется запрос _stUpdate (GenerateSQL)

Добрый день. Еще маленькая проблема.
Если датасет пустой, т.е. данных в таблице нет, то вываливает AV

Код: Выделить всё

  DAParamsInfo := TDAParamsInfo.Create(TDAParamInfo);
  try
    try
    
на этой строке ->>      UniQuery.SQLInsert.Text  := TDBAccessUtils.SQLGenerator(UniQuery).GenerateSQL(DAParamsInfo, _stInsert, true);
Akella
Вт 27 апр 2021 13:51
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19234

Re: Исключить COMPUTED BY поля для генератора запроса

Проблема не решена.

Версия компонент 8.4.3
Такое впечатление, что в версии 8.4.3 все вернули обратно и проблема снова проявилась.
Снимок http://prntscr.com/1259838
Еще снимок http://prntscr.com/1259hn6
Akella
Пн 22 мар 2021 18:49
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19234

Re: Исключить COMPUTED BY поля для генератора запроса

Спасибо, увидел.
Поверхностно пока что проверил - вроде работает.
Akella
Пт 19 мар 2021 14:27
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19234

Re: Исключить COMPUTED BY поля для генератора запроса

Добрый день.
Спасибо, что удалось обнаружить и исправить проблему.
Жду с нетерпением, т.к. проекты в разработке...
Akella
Чт 18 мар 2021 17:48
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19234

Re: Исключить COMPUTED BY поля для генератора запроса

Отправил.
Нажмите кнопку Button3, а потом Insert
Akella
Чт 18 мар 2021 17:25
Форум: Universal Data Access Components
Тема: Генератор SQL и псевдонимы полей
Ответы: 3
Просмотры: 5064

Re: Генератор SQL и псевдонимы полей

я думал, что вот так правильно

Код: Выделить всё

INSERT INTO STREETS
  (ID, NAME, DELETED)
VALUES
  (:ID, :NAME, :DELETED)
разве нет?
Akella
Чт 18 мар 2021 10:07
Форум: Universal Data Access Components
Тема: UniQuery-FetchRows и пагинация
Ответы: 10
Просмотры: 11047

Re: UniQuery-FetchRows и пагинация

Как работает технология smartfetch + liveblock - это я понял.
Я не понял, нужно ли включать при этом включать
UniQuery1->SpecificOptions->Values["FetchAll"] = "True";

или нет?
Akella
Ср 17 мар 2021 18:53
Форум: Universal Data Access Components
Тема: UniQuery-FetchRows и пагинация
Ответы: 10
Просмотры: 11047

Re: UniQuery-FetchRows и пагинация

Я еще раз переспрошу и уточню по этим трем параметрам.
Т.е. если включены SmartFetch и LiveBlock, то нужно включать еще и третий спец. параметр "FetchAll"? Правильно я понимаю?
Akella
Ср 17 мар 2021 11:09
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19234

Re: Исключить COMPUTED BY поля для генератора запроса

Когда я вызываю метод Insert, то появляется исключение:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 113
).
откуда 113, если в запросе всего до 60 символов?

Очень плохо, что uniDAC не показывает в какой SQL-секции произошло исключение и что именно за запрос вызвал это конкретное исключение.
Akella
Ср 17 мар 2021 09:34
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19234

Re: Исключить COMPUTED BY поля для генератора запроса

uniDAC 8.4.1, Firebord 3.
Теперь появилась другая проблема.

Исходный запрос:

Код: Выделить всё

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)
отсутствует поле deleted

а вот со сгенерированным запросом 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;
Akella
Ср 17 мар 2021 09:09
Форум: Universal Data Access Components
Тема: Генератор SQL и псевдонимы полей
Ответы: 3
Просмотры: 5064

Генератор SQL и псевдонимы полей

Добрый день.
SQLGenerator некорректно генерирует insert/update запросы, если используются всевдонимы
Firebird 3.

Вот пример запроса:

Код: Выделить всё

select id, name "имя", deleted "архив" from table1
вот так сгенерированные запросы выглядят после генерации:

Код: Выделить всё

INSERT INTO STREETS
  (ID, NAME, DELETED)
VALUES
  (:ID, :"имя", :"архив")
и

Код: Выделить всё

UPDATE STREETS
SET
  ID = :ID, NAME = :"имя", DELETED = :"архив"
WHERE
  ID = :Old_ID
по идее, псевдонимы не должны участвовать в insert/update?
Akella
Вт 16 мар 2021 18:05
Форум: Universal Data Access Components
Тема: Data type mapping
Ответы: 3
Просмотры: 5079

Re: Data type mapping

Спасибо.
Буду знать.

Но... Если вопрос касается производительности, то тогда другое дело.
Тогда вопрос вдогонку. Может у вас какая-то статистика, информация или рекомендации?
Может мне действительно переделать persistent-поля в smallint? Просто стоит ли на это тратить время? Как понять, как определить?
Например, почувствую ли я разницу на таблице в 1000 записей, в 100 тыс или только если записей будет более миллиона?
Akella
Вт 16 мар 2021 14:34
Форум: Universal Data Access Components
Тема: Data type mapping
Ответы: 3
Просмотры: 5079

Data type mapping

В новой версии uniDAC (8.4.1) теперь ошибка, если в базе (firebird) поле smallint, но оно считается, как boolean.
И посыпалось куча ошибок. И теперь много переделывать.
Могли бы оставить обратную совместимость :(
Можно было бы в колонку Database type (http://prntscr.com/10n9dvh ) добавить не только типы, но и название доменов.
Например, если домен содержит в имени "boolean", то это автоматически приравнивается к boolean даже если поле типа smallint.

И еще неудобство. В выпадающих списка нет контекстного поиска и сортировки. Полей в таблице много и пока найдешь нужное, то в глазах уже, извините, рябит.

Старая версия uniDAC насоздавала persistent-полей типа TBooleanField. А новая версия теперь ругается и выдает ошибки о несовместимости типов то в том месте программы, то в этом.