powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi 10.3 + FireDAC + MySQL
28 сообщений из 28, показаны все 2 страниц
Delphi 10.3 + FireDAC + MySQL
    #40016260
Всем привет!

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

Код: pascal
1.
Application.UpdateFormatSettings := False;



Видимо в новой версии Delphi что-то поменялось в этом плане.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016261
Евгений Стронг,

Поменял название темы, но админ видимо ещё не одобрил.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016264
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
Но у меня в программе так же заполняются ещё и контролы с датой и времени и вот в них и проблема

Никому не говорите какие контролы ведут себя неправильно.
У всех есть Хрустальный Шар, и все должны и так это угадать
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016267
DimaBr
Евгений Стронг
Но у меня в программе так же заполняются ещё и контролы с датой и времени и вот в них и проблема

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


А с чего вы взяли, что они ведут себя не правильно? Они перенимают региональные настройки пользователя. Мне же необходимо, чтобы приложение на них не реагировало и использовались свои внутренние. Можно конечно перед вставкой конвертировать дату в нужный формат, но вот чтобы не заниматься этим я и ищу способ выключить на это реакцию. А контрол любой, работающий с датой и временем.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016269
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений СтронгМне же необходимо, чтобы приложение на них не реагировало

А пользователю, который эти настройки установил, они нужны именно такими. Если вашей
программе они не нравятся - это её проблемы, надо её исправлять.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016277
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Стронг,
вот тут есть разные переменные - http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/!!VARIABLES_SysUtils.html - меняй на здоровье!
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016280
Dimitry Sibiryakov

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

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


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

Код: pascal
1.
2.
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. Узнавать формат даты+время, менять формат контрола и тогда присваивать. Может ещё какой-то есть совет? Поделись опытом плиз.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016281
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

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

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

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

Форматы надо прибивать гвоздями. Конечно, если у тебя приложение не интернациональное.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016282
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Стронг
Всем привет!

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

Код: pascal
1.
Application.UpdateFormatSettings := False;



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


Application.UpdateFormatSettings и Application.UpdateMetricSettings надо в false ещё, вроде бы.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016283
ъъъъъ
Евгений Стронг
Всем привет!

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

Код: pascal
1.
Application.UpdateFormatSettings := False;



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


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


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

Код: pascal
1.
2.
  frmMAIN.dtFromStat.Value := StrToDateTime(DateToStr(Now - 1));
  frmMAIN.dtToStat.Value := StrToDateTime(DateToStr(Now));
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016284
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Стронг,

у дев-экспр форматы хранятся в своих настройках, может, ты что-то там трогал? cxFormatController ...
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016285
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
Можно конечно перед вставкой конвертировать дату в нужный формат, но вот чтобы не заниматься этим я и ищу способ выключить на это реакцию. А контрол любой, работающий с датой и временем.
Перед началом действий с данными (после коннекта к БД) надо выставлять локаль на сервере для конкретного соединения. Тогда MySQL будет отдавать результат с уже отформатированными данными, которые должны совпадать с форматом на клиенте.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016286
Gluck99
Евгений Стронг
Можно конечно перед вставкой конвертировать дату в нужный формат, но вот чтобы не заниматься этим я и ищу способ выключить на это реакцию. А контрол любой, работающий с датой и временем.
Перед началом действий с данными (после коннекта к БД) надо выставлять локаль на сервере для конкретного соединения. Тогда MySQL будет отдавать результат с уже отформатированными данными, которые должны совпадать с форматом на клиенте.


Я использую Ehlib. Тут и TDBDateTimeEditEh и TDBGridEh всё красиво показывают, в зависимости от региональных настроек. Просто не стоит клеить так время, как я это делал. Ну или может как-то это делать по-другому.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016287
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Форматы надо прибивать гвоздями. Конечно, если у тебя приложение не интернациональное.
+1
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016309
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг

Код: pascal
1.
2.
  frmMAIN.dtFromStat.Value := StrToDateTime(DateToStr(Now - 1));
  frmMAIN.dtToStat.Value := StrToDateTime(DateToStr(Now));


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


Или там Value не Variant? Может тогда есть свойство типа TDateTime?
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016314
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
конвертит её FireDac для MySQL в формат yyyy-mm-dd,


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

Код: pascal
1.
2.
3.
Query1.FieldByName('DT').AsDateTime := dtDate1.Date;
или
Query1.ParamByName('DT').AsDateTime := dtDate1.Date;
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016315
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
И вот в момент заполнения ругается на формат,


И главное - никогда не сообщай текст ошибки.
Пусть форумчане все ломают голову
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016316
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
Код: pascal
1.
'00:00:00'



Евгений Стронг
Код: pascal
1.
'23:59:59'



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

2. Для конвертирования, указания, получения даты, времени и т.д. лучше использовать числа, а не текст. а еще лучше - исспользовать готовые функции из модуля DateUtils
http://docwiki.embarcadero.com/CodeExamples/Sydney/en/DateUtils_(Delphi)
http://delphibasics.ru/navdateutils.php
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016318
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений СтронгУ меня просто при запуске контролы заполняются:

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


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016377
X11
Евгений Стронг
конвертит её FireDac для MySQL в формат yyyy-mm-dd,


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

Код: pascal
1.
2.
3.
Query1.FieldByName('DT').AsDateTime := dtDate1.Date;
или
Query1.ParamByName('DT').AsDateTime := dtDate1.Date;



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

Спасибо.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016378
Dimitry Sibiryakov

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

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




Ничего себе нуб. Любой школьник функцию готовую может нагуглить. А ты попробуй сам сделай. Вот она - высшая школа. Ну а так спасибо конечно. Я их и и использовал ранее, до того, как поменял на компоненты TDBDateTimeEditEh. Компонент умеет сразу и дату, и время показывать и менять в одном поле. А когда до этого растаскивал по двум контролам дату и время, то пользовался функциями. Не знаю, почему тут так извращался. Но функция хорошо зашла, без проблем. Благодарю.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016383
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений СтронгА ты попробуй сам сделай. Вот она - высшая школа.

Да. И ты с этой школой полностью облажался. Поэтому не выпендривайся и в дальнейшем гугль
готовые функции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016386
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
IncSecond(Tomorrow(), -1)



А потом люди будут удивляться, почему у них данные за последнюю секунду дня пропадают.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016394
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
Dimitry Sibiryakov

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

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


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

Код: pascal
1.
2.
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" ?
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016765
rgreat
Код: pascal
1.
IncSecond(Tomorrow(), -1)



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


Пользователь видит ведь диапазон и поэтому берет уже на себя ответственность за вывод данных. Это сделано исключительно для того, чтобы не были пустые даты, и не более того. Там просто отчет по действиям пользователей. И поэтому подобный период более часто используемый будет.
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40016784
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг ,

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

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



если в Delphi функцию MAKELCID до сих пор не завезли, то вот скопировал вам из JEDI VCL из "JclWin32.pas"
Код: pascal
1.
2.
3.
4.
function MAKELCID(LangId, SortId: WORD): DWORD;
begin
  Result := (DWORD(SortId) shl 16) or DWORD(LangId);
end;
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40017125
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Героически создавать себе проблемы и с пафосом их превозмогать - это, видимо, какой-то особый вид программерских развлечений.
Странно, что МП сюда еще не подтянулся, вот уж ему раздолье всех расчехвостить
...
Рейтинг: 0 / 0
Delphi 10.3 + FireDAC + MySQL
    #40017382
Кроик Семён
Евгений Стронг ,

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

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



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

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

...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi 10.3 + FireDAC + MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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