Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
Всем привет!

Подскажите пожалуйста, каким образом сделать своё приложение не зависящее от локальных региональных настроек? У меня они сейчас в винде в формате dd.mm.yyyy и всё работает корректно с БД MySQL. Ну тут наверняка автоматически конвертит её FireDac для MySQL в формат yyyy-mm-dd, но это не важно, главное, что работает. Но у меня в программе так же заполняются ещё и контролы с датой и времени и вот в них и проблема, если поменять формат в региональных настройках. Команда не работает:

Application.UpdateFormatSettings := False;


Видимо в новой версии Delphi что-то поменялось в этом плане.

Сообщение было отредактировано: 7 ноя 20, 23:01
7 ноя 20, 23:06    [22228127]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
Евгений Стронг,

Поменял название темы, но админ видимо ещё не одобрил.
7 ноя 20, 23:13    [22228132]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
DimaBr
Member

Откуда:
Сообщений: 11910
Евгений Стронг
Но у меня в программе так же заполняются ещё и контролы с датой и времени и вот в них и проблема

Никому не говорите какие контролы ведут себя неправильно.
У всех есть Хрустальный Шар, и все должны и так это угадать
7 ноя 20, 23:38    [22228143]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
DimaBr
Евгений Стронг
Но у меня в программе так же заполняются ещё и контролы с датой и времени и вот в них и проблема

Никому не говорите какие контролы ведут себя неправильно.
У всех есть Хрустальный Шар, и все должны и так это угадать


А с чего вы взяли, что они ведут себя не правильно? Они перенимают региональные настройки пользователя. Мне же необходимо, чтобы приложение на них не реагировало и использовались свои внутренние. Можно конечно перед вставкой конвертировать дату в нужный формат, но вот чтобы не заниматься этим я и ищу способ выключить на это реакцию. А контрол любой, работающий с датой и временем.
8 ноя 20, 00:02    [22228146]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

Евгений Стронг
Мне же необходимо, чтобы приложение на них не реагировало

А пользователю, который эти настройки установил, они нужны именно такими. Если вашей
программе они не нравятся - это её проблемы, надо её исправлять.

Posted via ActualForum NNTP Server 1.5

8 ноя 20, 01:10    [22228166]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
Евгений Стронг,
вот тут есть разные переменные - http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/!!VARIABLES_SysUtils.html - меняй на здоровье!
8 ноя 20, 01:54    [22228186]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
Dimitry Sibiryakov

Евгений Стронг
Мне же необходимо, чтобы приложение на них не реагировало

А пользователю, который эти настройки установил, они нужны именно такими. Если вашей
программе они не нравятся - это её проблемы, надо её исправлять.


Тоже верно. У меня просто при запуске контролы заполняются:

frmMAIN.dtFromStat.Value := StrToDateTime(DateToStr(Now - 1) + '00:00:00');
frmMAIN.dtToStat.Value := StrToDateTime(DateToStr(Now) + '23:59:59');


И вот в момент заполнения ругается на формат, если его предварительно изменить в региональных настройках. У самого то контрола маска стоит - DD/MM/YYYY HH:NN:SS по умолчанию.

Тут тогда два варианта: 1. Вообще не заполнять его. 2. Узнавать формат даты+время, менять формат контрола и тогда присваивать. Может ещё какой-то есть совет? Поделись опытом плиз.
8 ноя 20, 01:58    [22228189]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
Dimitry Sibiryakov

Евгений Стронг
Мне же необходимо, чтобы приложение на них не реагировало

А пользователю, который эти настройки установил, они нужны именно такими. Если вашей
программе они не нравятся - это её проблемы, надо её исправлять.

Не. Пользователи, (э..."российские") которые что-то соображают в настройках даты, на 100% смогут работать, если дата будет всегда дд.мм.гггг. А те ламеры, у кого "вдруг сломались настройки" - просто будут офигевать от "гггг/мм/дд", и начнут доставать разработчиков, проверено миллион раз.

Форматы надо прибивать гвоздями. Конечно, если у тебя приложение не интернациональное.
8 ноя 20, 02:01    [22228190]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
Евгений Стронг
Всем привет!

Подскажите пожалуйста, каким образом сделать своё приложение не зависящее от локальных региональных настроек? У меня они сейчас в винде в формате dd.mm.yyyy и всё работает корректно с БД MySQL. Ну тут наверняка автоматически конвертит её FireDac для MySQL в формат yyyy-mm-dd, но это не важно, главное, что работает. Но у меня в программе так же заполняются ещё и контролы с датой и времени и вот в них и проблема, если поменять формат в региональных настройках. Команда не работает:

Application.UpdateFormatSettings := False;


Видимо в новой версии Delphi что-то поменялось в этом плане.


Application.UpdateFormatSettings и Application.UpdateMetricSettings надо в false ещё, вроде бы.
8 ноя 20, 02:07    [22228192]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
ъъъъъ
Евгений Стронг
Всем привет!

Подскажите пожалуйста, каким образом сделать своё приложение не зависящее от локальных региональных настроек? У меня они сейчас в винде в формате dd.mm.yyyy и всё работает корректно с БД MySQL. Ну тут наверняка автоматически конвертит её FireDac для MySQL в формат yyyy-mm-dd, но это не важно, главное, что работает. Но у меня в программе так же заполняются ещё и контролы с датой и времени и вот в них и проблема, если поменять формат в региональных настройках. Команда не работает:

Application.UpdateFormatSettings := False;


Видимо в новой версии Delphi что-то поменялось в этом плане.


Application.UpdateFormatSettings и Application.UpdateMetricSettings надо в false ещё, вроде бы.


Я тебя понял. Спасибо за подсказку. Я на сколько выяснил, ему не нравится, что я прибавляю время. Тогда формат получается некорректный. То есть вот так вполне работает с любым форматом:

  frmMAIN.dtFromStat.Value := StrToDateTime(DateToStr(Now - 1));
  frmMAIN.dtToStat.Value := StrToDateTime(DateToStr(Now));
8 ноя 20, 02:11    [22228196]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
Евгений Стронг,

у дев-экспр форматы хранятся в своих настройках, может, ты что-то там трогал? cxFormatController ...
8 ноя 20, 02:12    [22228197]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1085
Евгений Стронг
Можно конечно перед вставкой конвертировать дату в нужный формат, но вот чтобы не заниматься этим я и ищу способ выключить на это реакцию. А контрол любой, работающий с датой и временем.
Перед началом действий с данными (после коннекта к БД) надо выставлять локаль на сервере для конкретного соединения. Тогда MySQL будет отдавать результат с уже отформатированными данными, которые должны совпадать с форматом на клиенте.
8 ноя 20, 02:13    [22228199]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
Gluck99
Евгений Стронг
Можно конечно перед вставкой конвертировать дату в нужный формат, но вот чтобы не заниматься этим я и ищу способ выключить на это реакцию. А контрол любой, работающий с датой и временем.
Перед началом действий с данными (после коннекта к БД) надо выставлять локаль на сервере для конкретного соединения. Тогда MySQL будет отдавать результат с уже отформатированными данными, которые должны совпадать с форматом на клиенте.


Я использую Ehlib. Тут и TDBDateTimeEditEh и TDBGridEh всё красиво показывают, в зависимости от региональных настроек. Просто не стоит клеить так время, как я это делал. Ну или может как-то это делать по-другому.
8 ноя 20, 02:19    [22228200]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
rgreat
Member

Откуда:
Сообщений: 6312
ъъъъъ
Форматы надо прибивать гвоздями. Конечно, если у тебя приложение не интернациональное.
+1
8 ноя 20, 02:34    [22228203]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
alekcvp
Member

Откуда:
Сообщений: 2494
Евгений Стронг

  frmMAIN.dtFromStat.Value := StrToDateTime(DateToStr(Now - 1));
  frmMAIN.dtToStat.Value := StrToDateTime(DateToStr(Now));

А вот так оно не понимает?..
  frmMAIN.dtFromStat.Value := Date - 1;
  frmMAIN.dtToStat.Value := Date;

Или там Value не Variant? Может тогда есть свойство типа TDateTime?

Сообщение было отредактировано: 8 ноя 20, 12:37
8 ноя 20, 12:41    [22228294]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Евгений Стронг
конвертит её FireDac для MySQL в формат yyyy-mm-dd,


Я так понимаю, что проблема при сохранении данных в базу?
Я советую использовать параметры

Query1.FieldByName('DT').AsDateTime := dtDate1.Date;
или
Query1.ParamByName('DT').AsDateTime := dtDate1.Date;
8 ноя 20, 13:18    [22228303]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Евгений Стронг
И вот в момент заполнения ругается на формат,


И главное - никогда не сообщай текст ошибки.
Пусть форумчане все ломают голову
8 ноя 20, 13:19    [22228305]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Евгений Стронг
'00:00:00'


Евгений Стронг
'23:59:59'


1. Твоя проблема в том, что ты не знаешь, что дата и время - это не текст, а число с плавающей точкой, где дата до точки, а время поле точки. Почитай об этом.

2. Для конвертирования, указания, получения даты, времени и т.д. лучше использовать числа, а не текст. а еще лучше - исспользовать готовые функции из модуля DateUtils
http://docwiki.embarcadero.com/CodeExamples/Sydney/en/DateUtils_(Delphi)
http://delphibasics.ru/navdateutils.php
8 ноя 20, 13:23    [22228307]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

Евгений Стронг
У меня просто при запуске контролы заполняются:

Только последний нуб будет формировать дату-время через строку. Открой для себя функции
работы с датой-временем: http://www.delphibasics.co.uk/ByFunction.asp?Main=DatesAndTimes
frmMAIN.dtFromStat.Value := Yesterday();
frmMAIN.dtToStat.Value := IncSecond(Tomorrow(), -1);

Posted via ActualForum NNTP Server 1.5

8 ноя 20, 13:29    [22228309]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
X11
Евгений Стронг
конвертит её FireDac для MySQL в формат yyyy-mm-dd,


Я так понимаю, что проблема при сохранении данных в базу?
Я советую использовать параметры

Query1.FieldByName('DT').AsDateTime := dtDate1.Date;
или
Query1.ParamByName('DT').AsDateTime := dtDate1.Date;


Нет, в БД я передаю параметрами и там всё красиво. Тут просто смысл был в том, что на форме есть дата "с" и "по" и вот чтобы они не были пустыми по умолчанию и заполнены по принципу с сегодняшнего дня 00:00:00 и до завтрашнего 23:59:59. Для удобства использования и не более.

Спасибо.
8 ноя 20, 21:23    [22228454]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
Dimitry Sibiryakov

Евгений Стронг
У меня просто при запуске контролы заполняются:

Только последний нуб будет формировать дату-время через строку. Открой для себя функции
работы с датой-временем: http://www.delphibasics.co.uk/ByFunction.asp?Main=DatesAndTimes
frmMAIN.dtFromStat.Value := Yesterday();
frmMAIN.dtToStat.Value := IncSecond(Tomorrow(), -1);



Ничего себе нуб. Любой школьник функцию готовую может нагуглить. А ты попробуй сам сделай. Вот она - высшая школа. Ну а так спасибо конечно. Я их и и использовал ранее, до того, как поменял на компоненты TDBDateTimeEditEh. Компонент умеет сразу и дату, и время показывать и менять в одном поле. А когда до этого растаскивал по двум контролам дату и время, то пользовался функциями. Не знаю, почему тут так извращался. Но функция хорошо зашла, без проблем. Благодарю.
8 ноя 20, 21:27    [22228455]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

Евгений Стронг
А ты попробуй сам сделай. Вот она - высшая школа.

Да. И ты с этой школой полностью облажался. Поэтому не выпендривайся и в дальнейшем гугль
готовые функции.

Posted via ActualForum NNTP Server 1.5

8 ноя 20, 23:06    [22228477]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
rgreat
Member

Откуда:
Сообщений: 6312
IncSecond(Tomorrow(), -1)


А потом люди будут удивляться, почему у них данные за последнюю секунду дня пропадают.
8 ноя 20, 23:46    [22228485]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
sql2012
Member

Откуда: РФ
Сообщений: 770
Евгений Стронг
Dimitry Sibiryakov

пропущено...

А пользователю, который эти настройки установил, они нужны именно такими. Если вашей
программе они не нравятся - это её проблемы, надо её исправлять.


Тоже верно. У меня просто при запуске контролы заполняются:

frmMAIN.dtFromStat.Value := StrToDateTime(DateToStr(Now - 1) + '00:00:00');
frmMAIN.dtToStat.Value := StrToDateTime(DateToStr(Now) + '23:59:59');


И вот в момент заполнения ругается на формат, если его предварительно изменить в региональных настройках. У самого то контрола маска стоит - DD/MM/YYYY HH:NN:SS по умолчанию.

Тут тогда два варианта: 1. Вообще не заполнять его. 2. Узнавать формат даты+время, менять формат контрола и тогда присваивать. Может ещё какой-то есть совет? Поделись опытом плиз.


в маске контрола есть пробел, ты его не заметил, "программно формируя строку для Value" ?
9 ноя 20, 00:46    [22228507]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
rgreat
IncSecond(Tomorrow(), -1)


А потом люди будут удивляться, почему у них данные за последнюю секунду дня пропадают.


Пользователь видит ведь диапазон и поэтому берет уже на себя ответственность за вывод данных. Это сделано исключительно для того, чтобы не были пустые даты, и не более того. Там просто отчет по действиям пользователей. И поэтому подобный период более часто используемый будет.
10 ноя 20, 11:44    [22229410]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6656
Евгений Стронг,

учитывая, что пользователи моей программы немцы и я знаю, какой формат даты и времени они будут использовать, я поступил просто: для своего приложения установил особенный формат даты и времени, не зависящий от системного. Хоть они там английский Windows поставят, программа всегда будет вести себя одинаково

в своем приложении в INITIALIZATION-секции главного юнита делаю такой вызов:
UNIT ...
INTERFACE
   ....
IMPLEMENTATION
   ...
INITIALIZATION
   SetThreadLocale(MAKELCID(LANG_GERMAN, SORT_DEFAULT)); // попробуйте, может для вас подойдет константа LANG_RUSSIAN
END.


если в Delphi функцию MAKELCID до сих пор не завезли, то вот скопировал вам из JEDI VCL из "JclWin32.pas"
function MAKELCID(LangId, SortId: WORD): DWORD;
begin
  Result := (DWORD(SortId) shl 16) or DWORD(LangId);
end;


Сообщение было отредактировано: 10 ноя 20, 12:59
10 ноя 20, 12:58    [22229485]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 459
Героически создавать себе проблемы и с пафосом их превозмогать - это, видимо, какой-то особый вид программерских развлечений.
Странно, что МП сюда еще не подтянулся, вот уж ему раздолье всех расчехвостить
11 ноя 20, 13:22    [22230092]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 10.3 + FireDAC + MySQL  [new]
Евгений Стронг
Member

Откуда:
Сообщений: 307
Кроик Семён
Евгений Стронг,

учитывая, что пользователи моей программы немцы и я знаю, какой формат даты и времени они будут использовать, я поступил просто: для своего приложения установил особенный формат даты и времени, не зависящий от системного. Хоть они там английский Windows поставят, программа всегда будет вести себя одинаково

в своем приложении в INITIALIZATION-секции главного юнита делаю такой вызов:
UNIT ...
INTERFACE
   ....
IMPLEMENTATION
   ...
INITIALIZATION
   SetThreadLocale(MAKELCID(LANG_GERMAN, SORT_DEFAULT)); // попробуйте, может для вас подойдет константа LANG_RUSSIAN
END.


Спасибо большое за пример. Но тут есть нюанс, что навязываешь свой формат пользователю. А вдруг ему действительно удобнее работать в другом формате? Ну чисто зрительно.

если в Delphi функцию MAKELCID до сих пор не завезли, то вот скопировал вам из JEDI VCL из "JclWin32.pas"
function MAKELCID(LangId, SortId: WORD): DWORD;
begin
  Result := (DWORD(SortId) shl 16) or DWORD(LangId);
end;
11 ноя 20, 23:15    [22230490]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить