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

ViktorV
Пт 13 авг 2021 12:17
Форум: MySQL Data Access Components
Тема: Ошибка в триггере
Ответы: 9
Просмотры: 330

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добрый день.

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

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

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

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

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

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

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

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

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
Просмотры: 5228

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 сбросятся.
ViktorV
Вт 03 мар 2020 15:41
Форум: Universal Data Access Components
Тема: Как ПРАВИЛЬНО работать с Conditions.Enable/Disable?
Ответы: 3
Просмотры: 5228

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

Akella писал(а): Сб 29 фев 2020 16:06 Не смог найти в справке и в документации некоторые ответы на мои вопрос. Например, как правильно использовать UniQuery.Conditions.Enable/Disable у функционала условий.

Не до конца понятно: если несколько раз добавляешь условия, то нужно ли перед этим вызывать Disable?

Достаточно ли просто того, что я вызову UniQuery.Conditions.Enable перед UniQuery.Open? Или обязательно/желательно выполнить такую проверку:
UniQuery.Conditions.Count > 0 then
UniQuery.Conditions.Enable;
UniQuery.Conditions.Enable нужно вызывать только после построения всех условий и перед Open или Conditions.Enable нужно/можно вызывать перед началом добавления условий?
Вы можете вызвать метод TUniQuery.Conditions.Enable без указанной вами проверки.
ViktorV
Вт 03 мар 2020 15:39
Форум: Universal Data Access Components
Тема: пропадает значение параметра после Conditions.Add
Ответы: 5
Просмотры: 5607

Re: пропадает значение параметра после Conditions.Add

Akella писал(а): Чт 27 фев 2020 14:29 Delphi Tokyo, UniDAC 8.0.1.
В UniQuery добавлено 2 условия и 2 параметра. Потом нужно закрыть датасет, добавить ещё одно условие (без параметров) и снова открыть. Проблема в том, что сразу после добавления нового условия, т.е. после "UniQuery1.Conditions.Add" пропадает значение одного параметров, при этом имена параметров/условий не пересекаются (т.е. разные).

сделал такой пример.

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

procedure SetCondVal(uniQuery: TuniQuery; const Name, Val: string);
Var
  Cond: TDACondition;
  q: integer;
  n, v: string;
begin
  Cond := uniQuery.Conditions.Find(Name);
  
// здесь значение параметра (LCDMIN) ещё на месте
  for q := 0 to pred(uniQuery.ParamCount) do
  begin
    n := uniQuery.Params[q].Name;
    v := uniQuery.Params[q].AsString;
    v := v;// для бряки
  end;

  if Assigned(Cond) then
  begin
    Cond.Value := Val;
    Cond.Enable;
  end
  else
    uniQuery.Conditions.Add(Name, Val, True);// это условие выполняется

// здесь значение параметра (LCDMIN) уже потерялось
  for q := 0 to pred(uniQuery.ParamCount) do
  begin
    n := uniQuery.Params[q].Name;
    v := uniQuery.Params[q].AsString;
    v := v;// для бряки
  end;
end;
вот 4 снимка, на них видна хронология
http://prntscr.com/r8hrbx
http://prntscr.com/r8hs9s

http://prntscr.com/r8hskj
http://prntscr.com/r8hstg

Может это поможет решить проблему.
Параметр "TYPESIDS" добавлен с помощью макроса, а проблемный параметр "LCDMIN" добавлен с помощью Conditions.Add().

Я не выполняю ни Conditions.Disable, ни Conditions.Clear, просто сразу добавляю новое условие.
По идее, параметр не должен терять свое значение. Сам параметр же не теряется.
Спасибо за информацию мы воcпроизвели проблему со сбросом значения параметра, используемого в TDACondition при добавлении нового TDACondition, и постараемся исправить его в следующем билде. Как временное решение вы можете использовать следующие рекомендации:
- добавить все TDACondition;
- вызвать метод TDAConditions.Enable для возможности установить значения параметров используемых в TDACondition;
- установить значения для всех параметров;
- вызвать метод TUniQuery.Open.
ViktorV
Пн 02 мар 2020 14:58
Форум: Universal Data Access Components
Тема: пропадает значение параметра после Conditions.Add
Ответы: 5
Просмотры: 5607

Re: пропадает значение параметра после Conditions.Add

Akella писал(а): Сб 29 фев 2020 08:54 Пока создавал тестовый проект, появилась ещё одна проблема после того, как я заменил текст макроса.
И эта ошибка происходит, если включено свойство SmartFetch.
Project raised exception class EIBCError with message 'Dynamic SQL Error
SQL error code = -204
Ambiguous field name between table TYPES and table TABLE1
ID'.

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

procedure TForm1.Button1Click(Sender: TObject);
Var
 i: integer;
begin
  UniConnection1.Connect;

  UniQuery1.close;
  UniQuery1.Conditions.Clear;

  UniQuery1.MacroByName('TYPES').Value := 'LEFT JOIN TYPES T ON T.ID = A.ID_TYPE AND T.USERNAME = :USERNAME';
  UniQuery1.ParamByName('USERNAME').AsString := 'user';


  UniQuery1.open;<<< ошибка при открытии


  UniQuery1.close;

  UniQuery1.Conditions.Add('tname', 'T.NAME = :TNAME', True);
  UniQuery1.Conditions.Enable;
  UniQuery1.ParamByName('TNAME').AsString := 'qqqq';

  UniQuery1.Conditions.Add('tname', 'T.ID > 10', True);
  Memo1.Lines.Add(UniQuery1.FinalSQL);
  UniQuery1.open;

  Memo1.Lines.Add(UniQuery1.FinalSQL);


  Memo1.Lines.Add('');
  Memo1.Lines.Add('params');
  for I := 0 to pred(UniQuery1.Params.Count) do
    Memo1.Lines.Add(UniQuery1.Params[i].Name + ' = ' + UniQuery1.Params[i].AsString);

end;
Тестовый проект я отправлю со страницы ContactForm.

Я забыл добавить, что база для Firebird 3 (UTF8).

Запрос, который выдает FinalSQL, вполне нормальный и в IBExpert ID он выполняется без ошибок

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

SELECT
  A.ID,
  A.NAME NAME_USER,
  A.REMARK

  FROM TABLE1 A
  LEFT JOIN TYPES T ON T.ID = A.ID_TYPE AND T.USERNAME = :USERNAME
При открытии таблицы в режиме SmartFetch, считываются только значения ключевых полей и полей указанных в свойстве PrefetchedFields для всех записей, возвращаемых запросом. После открытия таблицы, происходит чтение полей для количества строк, указанных в свойстве FetchRows. Остальные поля будут прочтены непосредственно при обращении к ним.
Эффективность работы SmartFetch при извлечении любых данных таблицы зависит от используемых в этой таблице типов полей.
Наибольший прирост производительности наблюдается при использовании SmartFetch для типов данных с большими значениями, таких как long string, BLOB, и т.д.
При использовании SmartFetch режима UniDAC, если свойство TUniQuery.SmartFetch.SQLGetKeyValues установлено в пустую строку, UniDAC пытается составить и выполнить запрос на чтение ключевых полей и полей указанных в свойстве PrefetchedFields.
Когда SQL запрос является сложным, как в вашем случае, автоматически сгенерированный запрос может быть некорректным. В таком случае вам следует в свойстве TUniQuery.SmartFetch.SQLGetKeyValues.Text указать запрос на получения полей, которые будут уникально идентифицировать запись. Например:

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

SELECT
  A.ID
  FROM TABLE1 A
  LEFT JOIN TYPES T ON T.ID = A.ID_TYPE AND T.USERNAME = :USERNAME
ViktorV
Пт 28 фев 2020 12:54
Форум: Universal Data Access Components
Тема: пропадает значение параметра после Conditions.Add
Ответы: 5
Просмотры: 5607

Re: пропадает значение параметра после Conditions.Add

Для более быстрого и полного ответа, пожалуйста, составьте и вышлите нам, с помощью контактной формы https://www.devart.com/company/contactform.html, небольшой пример демонстрирующий указаное вами поведение, включающий необходимые скрапты на создание объектов БдД и укажите точную версию вашего MySQL сервера.
ViktorV
Чт 26 сен 2019 12:17
Форум: Oracle Data Access Components
Тема: ODAC 11.0.1 and TOraSession TimeZone +2:00 forced
Ответы: 5
Просмотры: 8326

Re: ODAC 11.0.1 and TOraSession TimeZone +2:00 forced

При установки TIME_ZONE не учитывается отсутствие перехода на летнее\зимнее время в Direct режиме для данной TIME_ZONE. Мы исправили данное поведение ODAC, данное исправление войдет в следующий билд ODAC.
ViktorV
Ср 25 сен 2019 12:46
Форум: Oracle Data Access Components
Тема: ODAC 11.0.1 and TOraSession TimeZone +2:00 forced
Ответы: 5
Просмотры: 8326

Re: ODAC 11.0.1 and TOraSession TimeZone +2:00 forced

Спасибо за информацию. Мы исследуем данное поведение ODAC и сообщим вам о результате. Пожалуйста, укажите TIME_ZONE установленную на клиенте.