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

ViktorV
Пн 29 ноя 2021 16:57
Форум: Universal Data Access Components
Тема: Ошибка UNION ALL + SmartFetch
Ответы: 12
Просмотры: 9529

Re: Ошибка UNION ALL + SmartFetch

В данный момент мы продолжаем исследование этого вопроса, но, к сожалению, пока не готовы предоставить никаких временных рамок.

Пока полного решения нет, вы можете воспользоваться временным решением. Для этого установите свойство FetchRows в большее значение, например 100 (этот параметр может быть меньше в зависимости от ваших условий).
ViktorV
Вт 02 ноя 2021 15:13
Форум: Universal Data Access Components
Тема: Ошибка UNION ALL + SmartFetch
Ответы: 12
Просмотры: 9529

Re: Ошибка UNION ALL + SmartFetch

Спасибо за информацию.
Мы воспроизвели указанное вами поведение и приступили к исследованию. Мы сообщим вам как только появиться любые результаты.
ViktorV
Пт 29 окт 2021 17:17
Форум: Universal Data Access Components
Тема: Ошибка UNION ALL + SmartFetch
Ответы: 12
Просмотры: 9529

Re: Ошибка UNION ALL + SmartFetch

Akella писал(а): Пт 29 окт 2021 13:27 Проблема не решена. Я получаю ошибку Record not found

Замените код на вот этот и вы получите ошибку:

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

procedure TForm1.Button2Click(Sender: TObject);
begin
  UniQuery1.SpecificOptions.Values['FetchAll'] := 'False';
  UniQuery1.FetchRows := 1;
  UniQuery1.SmartFetch.LiveBlock := True;
  UniQuery1.SmartFetch.Enabled   := True;

  UniQuery1.SmartFetch.Enabled := true;
  UniQuery1.ParamByName('PARAM1').AsString := '7451487';
  UniQuery1.Open;
end;
я так понимаю, проблема с FetchRows.

У меня используется таблица с пагинацитей.
Мы не можем воспроизвести указанное вами поведение, так как в присланном вами примере используются макросы. И в вашем примере запрос ничего не возвращает. Пожалуйста, укажите точный код, чтобы мы смогли воспроизвести данное поведение на вашем примере.
ViktorV
Пт 29 окт 2021 17:10
Форум: Universal Data Access Components
Тема: Ошибка UNION ALL + SmartFetch
Ответы: 12
Просмотры: 9529

Re: Ошибка UNION ALL + SmartFetch

Akella писал(а): Пт 29 окт 2021 12:21 Еще вопрос.
А зачем использовать JOIN, ведь в SQLGetKeyValues идет запрос только для A.ID.
Вы правы, мы привели данный пример для более простого представления указанной функциональности ))
ViktorV
Пт 29 окт 2021 17:08
Форум: Universal Data Access Components
Тема: Ошибка UNION ALL + SmartFetch
Ответы: 12
Просмотры: 9529

Re: Ошибка UNION ALL + SmartFetch

Akella писал(а): Чт 28 окт 2021 08:38 Еще вопрос.
Подскажите, а как быть с макросами?
Или в запросе в свойстве SQLGetKeyValues макросы тоже будут заменены?
Нет, макросы в свойстве SQLGetKeyValues заменяться не будут. Поэтому, там должен быть точный SQL запрос для получения полей, которые будут уникально идентифицировать запись.
ViktorV
Вт 26 окт 2021 15:44
Форум: Universal Data Access Components
Тема: Ошибка UNION ALL + SmartFetch
Ответы: 12
Просмотры: 9529

Re: Ошибка UNION ALL + SmartFetch

При использовании SmartFetch режима UniDAC, если свойство TUniQuery.SmartFetch.SQLGetKeyValues установлено в пустую строку, UniDAC пытается составить и выполнить запрос на чтение ключевых полей и полей указанных в свойстве PrefetchedFields.
Когда SQL запрос является сложным, как в вашем случае, автоматически сгенерированный запрос может быть некорректным. В таком случае вам следует в свойстве TUniQuery.SmartFetch.SQLGetKeyValues.Text указать запрос на получения полей, которые будут уникально идентифицировать запись. Например:

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

  SELECT  A.ID FROM UNLIST(:PARAM1) UL

  INNER JOIN PHONES P ON P.TEL = UL.RES
  INNER JOIN APART A ON A.ID = P.ID_APART
  LEFT JOIN OPERATION O ON O.ID = A.ID_OPERATION
  LEFT JOIN STREETS S ON S.ID = A.ID_STREET

  UNION ALL
  SELECT DISTINCT A.ID  FROM UNLIST(:PARAM1) UL

  INNER JOIN PHONES P ON P.TEL = UL.RES
  INNER JOIN ARENDA A ON A.ID = P.ID_ARENDA
  LEFT JOIN OPERATION O ON O.ID = A.ID_OPERATION
  LEFT JOIN STREETS S ON S.ID = A.ID_STREET

  UNION ALL
  SELECT DISTINCT A.ID FROM UNLIST(:PARAM1) UL

  INNER JOIN PHONES P ON P.TEL = UL.RES
  INNER JOIN OFFICES A ON A.ID = P.ID_OFF
  LEFT JOIN OPERATION O ON O.ID = A.ID_OPERATION
  LEFT JOIN STREETS S ON S.ID = A.ID_STREET


  UNION ALL
  SELECT DISTINCT A.ID FROM UNLIST(:PARAM1) UL

  INNER JOIN PHONES P ON P.TEL = UL.RES
  INNER JOIN MEDIATORS A ON A.ID = P.ID_MEDIATOR
ViktorV
Пт 13 авг 2021 12:17
Форум: MySQL Data Access Components
Тема: Ошибка в триггере
Ответы: 9
Просмотры: 9027

Re: Ошибка в триггере

Спасибо за ответ,

На современных системах данная задержка очень незначительная.
И данное незначительное уменьшение скорости работы нивелируется возможность корректно работать с любимы Unicode данными.

С уважением,
Виктор
ViktorV
Пт 13 авг 2021 11:16
Форум: MySQL Data Access Components
Тема: Ошибка в триггере
Ответы: 9
Просмотры: 9027

Re: Ошибка в триггере

Здравствуйте, Jane.

Рады слышать, что проблема решена.

Данное поведение связано со специфической функциональностью сервера MySQL, а не нашими компонентами. Например, если в вашем примере вы будете вместо кириллицы использовать латиницу, то ошибки не будет.
Например:

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

  ParamByName('p1').AsString := 'Shetinin'; 
Для этого и существуют подобные опции как у наших продуктов, так и у всех клиентов MySQL.
При включённом свойстве UseUnicode вы сможете корректно работать с любимы данными.

С уважением,
Виктор
ViktorV
Пт 13 авг 2021 09:37
Форум: MySQL Data Access Components
Тема: Ошибка в триггере
Ответы: 9
Просмотры: 9027

Re: Ошибка в триггере

Здравствуйте, Вад.

Для решения задачи, пожалуйста, установите свойство TMyConnection.Options.UseUnicode в True.
Например:

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

  MyConnection.Options.UseUnicode: = True;
Пожалуйста дайте знать если это не помогло.

С уважением,
Виктор
ViktorV
Чт 12 авг 2021 10:49
Форум: MySQL Data Access Components
Тема: Ошибка в триггере
Ответы: 9
Просмотры: 9027

Re: Ошибка в триггере

Добрый день.

Для более быстрого и точного ответа, пожалуйста, составьте и пришлите нам небольшой пример, демонстрирующий указанное вами поведение, включающий скрипты на создание и заполнения объектов БД с помощью контактной формы:
https://devart.com/company/contactform.html

С уважением,
Виктор
ViktorV
Чт 29 апр 2021 16:54
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19026

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

Спасибо за предоставленную информацию. Хотим сообщить, что мы уже исправили данное поведение и изменение касательно вашего вопроса войдет в следующий билд UniDAC.
ViktorV
Пт 05 мар 2021 09:00
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19026

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

Спасибо за интерес к нашим продуктам.
Обращайтесь к нам, если у вас возникнут вопросы по нашим продуктам.
ViktorV
Пт 05 мар 2021 08:00
Форум: Universal Data Access Components
Тема: Исключить COMPUTED BY поля для генератора запроса
Ответы: 22
Просмотры: 19026

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

Мы улучшили автоопределение computed полей при генерации update-запросов для датасета. Новый билд UniDAC 8.4.1, включающий данное улучшение, уже доступен для скачивания.
ViktorV
Чт 10 сен 2020 09:37
Форум: Universal Data Access Components
Тема: ROW_NUMBER() и селективная процедура
Ответы: 1
Просмотры: 10845

Re: ROW_NUMBER() и селективная процедура

Для решения вашей задачи вы можете попробовать использовать следующий код:

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

  sp.SpecificOptions.Values['DescribeParams'] := 'True';
  sp.PrepareSQL(True);// isQuery
  sp.SQL.Text := 'SELECT ID, ST, RESULT, ROW_NUMBER() OVER (ORDER BY ID) AS ROW_NUMBER FROM SP_TELEGRAM_FIND_BY_PARAMS(:TELEGRAM_ID)';
  sp.Params[0].AsLargeInt := user.ID;
  sp.Open;
ViktorV
Вт 03 мар 2020 15:42
Форум: Universal Data Access Components
Тема: Как ПРАВИЛЬНО работать с Conditions.Enable/Disable?
Ответы: 3
Просмотры: 8650

Re: Как ПРАВИЛЬНО работать с Conditions.Enable/Disable?

Akella писал(а): Сб 29 фев 2020 16:21 Ещё вопрос.
Нормально ли вызывать UniQuery.Conditions.Enable несколько раз подряд перед тем, как вызвать Open?

Почему такой вопрос.
Предыстория.
Есть код добавления условий с параметрами.

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

    if DateTimePicker1.DateTime <> 0 then
      qData.Conditions.Add('lcd_min','A.LCD >= :LCDMIN', True);
      
    if DateTimePicker2.DateTime <> 0 then
      qData.Conditions.Add('lcd_max','A.LCD <= :LCDMAX', True);
Как я понял, то в SQL-запрос датасета параметры попадают только после вызова UniQuery.Conditions.Enable.
Таким образом получается, что условие приходится добавлять как бы дважды. Первый раз добавляешь условие с параметром, а потом нужно ещё и параметр заполнить.

т.е. выполнить ещё одну проверку

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

    if Assigned(qData.Params.FindParam('LCDMIN')) then
      qData.ParamByName('LCDMIN').AsDateTime := DateTimePicker1.DateTime;
      
    if Assigned(qData.Params.FindParam('LCDMAX')) then
      qData.ParamByName('LCDMAX').AsDateTime := DateTimePicker2.DateTime;
я к тому, что было бы удобней так:

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

if DateTimePicker1.DateTime <> 0 then
begin
     qData.Conditions.Add('lcd_min','A.LCD >= :LCDMIN', True);
     qData.ParamByName('LCDMIN').AsDateTime := DateTimePicker.DateTime;
end;
Теперь возвращаемся к вопросу про множественный вызов метода Enable. А можно ли делать так:

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

qData.Close;

if DateTimePicker1.DateTime <> 0 then
begin
      qData.Conditions.Add('lcd_min','A.LCD >= :LCDMIN', True);
      UniQuery.Conditions.Enable;
     qData.ParamByName('LCDMIN').AsDateTime := DateTimePicker.DateTime;
end;

if DateTimePicker2.DateTime <> 0 then
begin
      qData.Conditions.Add('lcd_max','A.LCD <= :LCDMAX', True);
      UniQuery.Conditions.Enable;
      qData.ParamByName('LCDMAX').AsDateTime := DateTimePicker2.DateTime;     
end;      

UniQuery.Open;
Для корректной работе с параметрами используемых в TDACondition достаточно единожды вызвать метод TDAConditions.Enable. Обратите внимание, при вызове метода метод TDAConditions.Disable все предварительно установленные значения параметров используемых в TDACondition сбросятся.