powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Отобаражение NUMERIC полей
30 сообщений из 30, показаны все 2 страниц
Отобаражение NUMERIC полей
    #39948203
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, что сейчас NUMERIC поля отображаются как Double. В результате для поля типа NUMERIC(3,1) я вижу значение типа 12.300000000002. Нельзя ли при выводе обрезать строку до стольки знаков, сколько указано в типе?


С уважением, Vasilisk
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39948246
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Я так понимаю, что сейчас NUMERIC поля отображаются как Double. В результате для поля типа NUMERIC(3,1) я вижу значение типа 12.300000000002. Нельзя ли при выводе обрезать строку до стольки знаков, сколько указано в типе?


Где видишь-то? В настройках форматирования данных указано "использовать масштаб поля"?
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39948297
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Где видишь-то?
Хороший вопрос. Вижу при переводе грида в режим редактирования (поле объявлено как NUMERIC(18,6))
IBExpert
В настройках форматирования данных указано "использовать масштаб поля"?
Да

И параллельный вопрос: нельзя ли в настройку вынести DecimalSeparator или хотя бы всегда использовать точку? Очень не удобно копировать значение поля в параметр запроса
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39948769
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Вижу при переводе грида в режим редактирования (поле объявлено как NUMERIC(18,6))


При редактировании формат с максимальной точностью используется. В данный момент я не уверен, что будет правильно это менять.


_Vasilisk_

И параллельный вопрос: нельзя ли в настройку вынести DecimalSeparator или хотя бы всегда использовать точку? Очень не удобно копировать значение поля в параметр запроса


В свежей версии выполни
Код: pascal
1.
ibec_SetGlobalVar('IBE$DECIMAL_SEPARATOR', '.');


в event block'е, например, который после старта эксперта выполняется.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39949306
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
В свежей версии выполни
Спасибо
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39949314
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
При редактировании формат с максимальной точностью используется. В данный момент я не уверен, что будет правильно это менять.
Как вариант, при начале редактирования отображать все же содержимое поля, но давать пользователю ввести значение любой точности. Ну нет в поле значения 12.300000000002, которое отображается изначально
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39949442
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
В свежей версии выполни
Код: pascal
1.
ibec_SetGlobalVar('IBE$DECIMAL_SEPARATOR', '.');

После запуска все замечательно. Но в какой-то момент настройка слетает и опять начинает отображаться системный разделитель
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39949449
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
После запуска все замечательно. Но в какой-то момент настройка слетает и опять начинает отображаться системный разделитель


Нужно попытаться определить, что это за момент, или хотя бы после чего. Иначе я до второго пришествия могу искать.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39949514
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Иначе я до второго пришествия могу искать
Да понятно. Но я же тоже специально не отслеживаю. В какой-то момент открыл таблицу, а там зяпятые
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39949591
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Но в какой-то момент настройка слетает
Опять проявилось. При этом
Код: sql
1.
ibec_GetGlobalVar('IBE$DECIMAL_SEPARATOR', '-')

по прежнему возвращает точку.

Может ты мне какую-нибудь Debug версию сделаешь с логами?
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39949838
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оставь сейчас эту переменную в покое. При ее установке просто изменяется SysUtils.DecimalSeparator.
И если потом кто-то где-то (включая сторонние компоненты) зачем-то меняет SysUtils.DecimalSeparator опять - на значении IBE$DECIMAL_SEPARATOR это никак не отразится.

Ну и, соответственно, протоколирование тут не поможет.

Вспоминай, что ты делал перед тем, как разделитель обратно к системному вернулся. Может, данные экспортировал. Может, еще что-то. Короче, нужен способ воспроизвести ситуацию.
Поиском по коду я уже проверил и ничего не нашел.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39950089
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Вспоминай, что ты делал перед тем, как разделитель обратно к системному вернулся
Сейчас все что делаю, так это активно модифицирую процедуры в базе
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39950201
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, я недавно точно такой же глюк в приложении из-за TJvAppEvents отловил. Ну, мало ли... :)
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39959046
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
И если потом кто-то где-то (включая сторонние компоненты) зачем-то меняет SysUtils.DecimalSeparator опять - на значении IBE$DECIMAL_SEPARATOR это никак не отразится.
А если добавить
Код: pascal
1.
Application.UpdateFormatSettings := False;

?

Такое ощущение, что разделитель меняется просто со временем
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39959226
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Application.UpdateFormatSettings := False;
[/src]?

Такое ощущение, что разделитель меняется просто со временем


Не понял, при чем тут Application.UpdateFormatSettings? Разделитель - это просто переменная в SysUtils.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39959342
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Не понял, при чем тут Application.UpdateFormatSettings? Разделитель - это просто переменная в SysUtils.
При том, что система может рассылать броадкастом WM_WININICHANGE, который приводит к переинициализации системных разделителей. А UpdateFormatSettings блокирует это обновление
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
procedure TApplication.WndProc(var Message: TMessage);
............
begin
    ..............
    CheckIniChange(Message);
    ..........
end;
..................
function TApplication.CheckIniChange(var Message: TMessage): Boolean;
begin
  Result := False;
  if (Cardinal(Message.Msg) = RM_TaskbarCreated) or
     (Cardinal(Message.Msg) = WM_WININICHANGE) then
  begin
    if UpdateFormatSettings then
    begin
      SetThreadLocale(LOCALE_USER_DEFAULT);
      GetFormatSettings;
    end;
    if UpdateMetricSettings then
      Screen.GetMetricSettings;
    ................
  end;
end;

procedure GetFormatSettings;
begin
  InitSysLocale;
  if SysLocale.FarEast then
    GetEraNamesAndYearOffsets;
  FormatSettings := TFormatSettings.Create('');
end;
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39959355
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,
Добавить, а если вдруг и после этого будут сбиваться, то проверять его значение. У меня как раз сторонняя компонента его обратно выставляла в True, после чего и слетали эти переменные на дефолтные.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39961315
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
При том, что система может рассылать броадкастом WM_WININICHANGE, который приводит к переинициализации системных разделителей.


Ну, ОК. Посмотрел я всю эту требуху. Запрещать UpdateFormatSettings я не буду - это неправильно. Тем более, что саму GetFormatSettings может дернуть кто угодно и когда угодно. Правильным решением было бы восстанавливать пользовательские разделители после каждого вызова GetFormatSettings, но я пока не придумал, как это сделать.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39961682
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Правильным решением
Ну, если честно, то правильным решением было бы использование TField.OnGetData/TField.OnSetData с вызовом внутри FormatFloat/ParseFloat с собственными разделителями. А глобальные переменные не трогать вообще
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39962233
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильным-то решением как раз было бы не использовать собственный разделитель от слова "вообще".
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #39963156
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Ну, если честно, то правильным решением было бы использование TField.OnGetData/TField.OnSetData с вызовом внутри FormatFloat/ParseFloat с собственными разделителями.


В твоем случае, когда запятую надо заменить на точку только для того, чтобы в текст запроса вставить без лишних правок, правильного решения, похоже, вообще нет.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Отобаражение NUMERIC полей
    #40117826
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подниму тему. В isql пишу
Код: sql
1.
SELECT CAST(999999999999 AS NUMERIC(18, 6)) FROM RDB$DATABASE;


Получаю
Код: plaintext
1.
2.
                 CAST
=====================
  999999999999.000000
Пишу этот же запрос в SQL Editor. Получаю999 999 999 999.000122.

А основная проблема в том, что я не могу отредактировать из-за этого запись в обновляемом представлении. У меня в исходной таблице число записано в строковом поле, в представлении я его преобразовываю в NUMERIC
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR ALTER VIEW VW_VEW1(
    VAL)
AS
SELECT
  CAST(cfg.IDENT AS NUMERIC(18, 6))
FROM
  mytable cgf
;


а потом BEFORE UPDATE триггер не может найти эту запись
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR ALTER TRIGGER TR_VW_VIEW1_BU0 FOR VW_VIEW1
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
  UPDATE mytable cfg SET
    cfg.IDENT = NEW.VAL
  WHERE
    cfg.IDENT = OLD.VAL
END



Ну и чтобы два раза не вставать. При отображении в гриде разряды разделяются пробелами. Это хорошо. А вот при редактировании ячейки раньше эти пробелы удалялись, а теперь остаются. В итоге запись невозможно отредактировать, пока не уберешь эти пробелы
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #40119833
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Подниму тему.


У меня есть альтернативная версия датасета, где подобные нумерики хранятся как int64, а не переводятся в double. Там таких проблем нет, но я не уверен, что не сломал в процессе переделки что-то еще. Починят сервер - выложу отдельно, наверное. Или обычный билд с ней соберу.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #40120475
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Попробуй свежую версию.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #40124286
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Попробуй свежую версию.
2021.12.22.1
_Vasilisk_
Пишу этот же запрос в SQL Editor. Получаю999 999 999 999.000122
Осталось
_Vasilisk_
а потом BEFORE UPDATE триггер не может найти эту запись
Поправилось.
_Vasilisk_
При отображении в гриде разряды разделяются пробелами. Это хорошо. А вот при редактировании ячейки раньше эти пробелы удалялись, а теперь остаются
Поправилось

Спасибо
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #40124381
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

_Vasilisk_
Пишу этот же запрос в SQL Editor. Получаюпропущено...
Осталось


Исправил.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #40124592
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Исправил.
Спасибо.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #40131204
dennis-r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю в тему. Numeric меньше единицы, с количеством знаков после запятой более 4 и нулями в первых разрядах после запятой отображается с сдвигом влево до первого ненулевого знака:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select 0.0001 from RDB$DATABASE

CONSTANT
0,0001

select  0.00010  from RDB$DATABASE

CONSTANT
 0,10000 

select 1.00010 from RDB$DATABASE

CONSTANT
1,00010

Проблема впервые выявлена на версии 2022.1.1.1. В последней скаченной 2022.1.30.1 также присутствует.

Сервер LI-V2.5.9.27139 Firebird 2.5
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #40131402
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dennis-r
Добавлю в тему. Numeric меньше единицы, с количеством знаков после запятой более 4 и нулями в первых разрядах после запятой отображается с сдвигом влево до первого ненулевого знака:


Исправил.
...
Рейтинг: 0 / 0
Отобаражение NUMERIC полей
    #40131427
dennis-r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

Спасибо!
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Отобаражение NUMERIC полей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (7): Анонимы (4), Yandex Bot, Google Bot 5 мин., Bing Bot 5 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]