Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FormatSettings for DLL  [new]
HOME_X
Member

Откуда:
Сообщений: 2648
Доброго дня господа !

Подскажите как ведет себе FormatSettings при работе с DLL

Т.е. в основной форме делаю присвоение
FormatSettings.ShortDateFormat := 'yyyy-mm-dd';
FormatSettings.LongTimeFormat := 'hh:nn:ss';
FormatSettings.......................
FormatSettings.......................

Но в DLL в котором идет выполнение SQL запросов эти стандарты
не отрабатываю

В чем может быть причина и как ее исправить !

Заранее благодарен !
27 мар 21, 00:41    [22300636]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
Dimitry Sibiryakov
Member

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

HOME_X
В чем может быть причина и как ее исправить !

У них разные глобальные переменные. Не присваивай, используй системные настройки.

Posted via ActualForum NNTP Server 1.5

27 мар 21, 01:22    [22300646]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
HOME_X
Member

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

HOME_X
В чем может быть причина и как ее исправить !

У них разные глобальные переменные. Не присваивай, используй системные настройки.


Cистемные настройки
Не имею возможности - ТОНКИЙ клиент.

А как присвоить FormatSettings глобальной переменной DLL
Прошу привести программный код

Спасибо
27 мар 21, 01:35    [22300650]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9961
Пакеты ?
27 мар 21, 01:44    [22300651]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
Dimitry Sibiryakov
Member

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

HOME_X
А как присвоить FormatSettings глобальной переменной DLL

Никак.

Posted via ActualForum NNTP Server 1.5

27 мар 21, 02:07    [22300655]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
x1ca4064
Member

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

А как присвоить FormatSettings глобальной переменной DLL
Прошу привести программный код

Спасибо

Если это Ваша длл, экспортируйте из нее какую-нибудь функцию, InitSettings, например, и вызывайте ее в процессе инициализации приложения/длл. В самой функции уже будет доступ к FormatSettings длл, там уже и прописывайте необходимое.

Сообщение было отредактировано: 27 мар 21, 03:02
27 мар 21, 03:07    [22300659]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4539
HOME_X
Но в DLL в котором идет выполнение SQL запросов эти стандарты
не отрабатываю
Если не генерировать SQL, для которых важны "эти стандарты", то и проблем не будет.

Сообщение было отредактировано: 27 мар 21, 03:33
27 мар 21, 03:40    [22300660]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
HOME_X
В чем может быть причина и как ее исправить !

В Delphi есть два пути работать с DLL. Один - поставить настройку Build with runtime packages, после чего всё отлично работает точно так же, как в одном EXE, вообще без какой-либо специфики. Второй - не ставить эту настройку и всю жизнь ходить по граблям. У дельфи-программистов очень скучная жизнь, поэтому 99% выбирают второй путь и таким образом делают её куда интереснее и непредсказуемее.
27 мар 21, 14:42    [22300772]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 834
softwarer
HOME_X
В чем может быть причина и как ее исправить !

В Delphi есть два пути работать с DLL. Один - поставить настройку Build with runtime packages, после чего всё отлично работает точно так же, как в одном EXE, вообще без какой-либо специфики. Второй - не ставить эту настройку и всю жизнь ходить по граблям. У дельфи-программистов очень скучная жизнь, поэтому 99% выбирают второй путь и таким образом делают её куда интереснее и непредсказуемее.
А первые в итоге не могут использовать новые версии делфи, ибо runtime packages из другой версии делфи несовместимы друг с другом, и в итоге программисты типа softwarer до сих пор сидят на d5))))))
27 мар 21, 20:20    [22300884]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
bk0010
Member

Откуда:
Сообщений: 5058
HOME_X
Но в DLL в котором идет выполнение SQL запросов эти стандарты
Не пихайте данные в запросы строками, используйте параметры.
q.text:='update tbl set t=:t where id=:id';
q.ParamByName('t').asDateTime:=t;
q.ParamByName('id').asInteger:=id;
try
   q.ExecSQL;
except
 ...
end;
27 мар 21, 20:46    [22300899]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
asutp2
А первые в итоге не могут использовать новые версии делфи

Спасибо. Время от времени я начинаю думать, что уже познал все возможные глубины человеческой глупости, и тут очень кстати, когда кто-нибудь брякает такое, что понимаешь - до дна ещё не один Титаник поместится.
27 мар 21, 21:18    [22300908]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 834
softwarer
asutp2
А первые в итоге не могут использовать новые версии делфи

Спасибо. Время от времени я начинаю думать, что уже познал все возможные глубины человеческой глупости, и тут очень кстати, когда кто-нибудь брякает такое, что понимаешь - до дна ещё не один Титаник поместится.
Как ты самокритичен))
27 мар 21, 21:35    [22300912]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
HOME_X
Member

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

Если это Ваша длл, экспортируйте из нее какую-нибудь функцию, InitSettings, например, и вызывайте ее в процессе инициализации приложения/длл. В самой функции уже будет доступ к FormatSettings длл, там уже и прописывайте необходимое.


Эта DLL - созданная мною на DELPHI10
"экспортируйте из нее какую-нибудь функцию" - не совсем Вас понял
Не могли бы привести пример кода

Спасибо
27 мар 21, 23:54    [22300949]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
HOME_X
Member

Откуда:
Сообщений: 2648
HOME_X
x1ca4064

Если это Ваша длл, экспортируйте из нее какую-нибудь функцию, InitSettings, например, и вызывайте ее в процессе инициализации приложения/длл. В самой функции уже будет доступ к FormatSettings длл, там уже и прописывайте необходимое.


Эта DLL - созданная мною на DELPHI10
"экспортируйте из нее какую-нибудь функцию" - не совсем Вас понял
Не могли бы привести пример кода

Спасибо



Например - вот функцию, которую я вызываю
library Scripts;

uses
  ComServ,
  SysUtils,
  Scripts_TLB in 'Scripts_TLB.pas',
  ComQuery in 'ComQuery.pas' {ComQuery: CoClass},
  AddSpan in 'AddSpan.pas';

exports
  Create_AddSpan,


............................
............................

function Create_AddSpan(aFile: PAnsiChar; aList: PAnsiChar; aKind: OleVariant; aBars: OleVariant; aHandle: OleVariant; var aSql: OleVariant; var aRecordSet: OleVariant;   [b]RegSetup : PAnsiChar[/b] ): Integer;
  var
    S: String;
    B: TProgressBar;
    Id: Cardinal;
    H:  THandle;
  begin
     /// Вы предлагаете прямо здесь осуществить  установку  рег. стандартов
     //// передав их в качестве параметра  ?
     
    FormatSettings.DecimalSeparator    :=Copy(RegSetup, 1, 1)[1];
    FormatSettings.ThousandSeparator :=Copy(RegSetup, 2, 1)[1];
    FormatSettings.DateSeparator        :=Copy(RegSetup, 3, 1)[1];
    FormatSettings.ShortDateFormat    :=Copy(RegSetup, 4,10);

    /// Это сработает именно в DLL

    Result:=1;
    if (aBars  <>Null)then B:=TProgressBar(Integer(aBars)) else B:=Nil;
    if (aHandle<>Null)then H:=THandle(Integer(aHandle))    else H:=0;
    A:=TAddSpan.Create(iif(Integer(aKind)=0,'[Path]'+vbLine+String(aList),String(aFile)),B,H,aSql,aRecordSet);

    .............
  end;
28 мар 21, 00:06    [22300954]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
x1ca4064
Member

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

Не могли бы привести пример кода

Спасибо


library Scripts;

uses
  ComServ,
  SysUtils,
  Scripts_TLB in 'Scripts_TLB.pas',
  ComQuery in 'ComQuery.pas' {ComQuery: CoClass},
  AddSpan in 'AddSpan.pas';

exports
  InitFormatSettings,
  Create_AddSpan,
...
procedure InitFormatSettings(const AShortDateFormat,ALongDateFormat:string;const ADecimalSeparator,AThousandSeparator:char.....);
begin
  FormatSettings.DecimalSeparator:=ADecimalSeparator;
  ....
end;


Далее вызывате InitFormatSettings после LoadLibrary или в секции инициализации нужного модуля в основной программе.
28 мар 21, 01:52    [22300969]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
x1ca4064
Member

Откуда:
Сообщений: 1250
Sorry, не string конечно, а PChar...
28 мар 21, 02:38    [22300975]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
softwarer
В Delphi есть два пути работать с DLL. Один - поставить настройку Build with runtime packages, после чего всё отлично работает точно так же, как в одном EXE, вообще без какой-либо специфики. Второй - не ставить эту настройку и всю жизнь ходить по граблям. У дельфи-программистов очень скучная жизнь, поэтому 99% выбирают второй путь и таким образом делают её куда интереснее и непредсказуемее.

О, коллега тоже такой вот фигней страдает. Сколько он экзотических траблов получил на ровном месте - перечислению не поддается. Причем самое забавное, что особых требований к такому изврату нет, разве что размеры DLL.
29 мар 21, 11:39    [22301338]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29662
HOME_X,

а вот это случайно не True? А то вдруг юзер что-то решит поменять, и всё слетит. Ну или "оно само...".
Application.UpdateFormatSettings
Specifies whether format settings are updated automatically when the user alters the system configuration. Use UpdateFormatSettings to control automatic updating of format settings. The default of true is set in the constructor. Using the default format settings is recommended. These settings are initialized to the Windows local.
29 мар 21, 15:34    [22301488]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
Fr0sT-Brutal
Причем самое забавное, что особых требований к такому изврату нет, разве что размеры DLL.

В смысле, ему несолидны dll по 30Кб, нужны по 30Мб?
29 мар 21, 15:40    [22301497]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
HOME_X
Member

Откуда:
Сообщений: 2648
x1ca4064
Sorry, не string конечно, а PChar...


Принято - спасибо - причину и как решить уяснил !
29 мар 21, 17:18    [22301564]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
HOME_X
Member

Откуда:
Сообщений: 2648
kdv
HOME_X,

а вот это случайно не True? А то вдруг юзер что-то решит поменять, и всё слетит. Ну или "оно само...".
Application.UpdateFormatSettings
Specifies whether format settings are updated automatically when the user alters the system configuration. Use UpdateFormatSettings to control automatic updating of format settings. The default of true is set in the constructor. Using the default format settings is recommended. These settings are initialized to the Windows local.


Принято - спасибо за упреждение !
Учту в дальнейшем
29 мар 21, 17:19    [22301566]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
didgik
Member

Откуда:
Сообщений: 968
softwarer
HOME_X
В чем может быть причина и как ее исправить !

В Delphi есть два пути работать с DLL. Один - поставить настройку Build with runtime packages, после чего всё отлично работает точно так же, как в одном EXE, вообще без какой-либо специфики. Второй - не ставить эту настройку и всю жизнь ходить по граблям. У дельфи-программистов очень скучная жизнь, поэтому 99% выбирают второй путь и таким образом делают её куда интереснее и непредсказуемее.


А я так пробовал. Ставил настройку. Прога не запускается и что-то там не может найти. Печаль (
29 мар 21, 23:20    [22301741]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
didgik
А я так пробовал. Ставил настройку. Прога не запускается и что-то там не может найти. Печаль (

https://www.meme-arsenal.com/create/meme/3623786
29 мар 21, 23:39    [22301749]     Ответить | Цитировать Сообщить модератору
 Re: FormatSettings for DLL  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
softwarer
В смысле, ему несолидны dll по 30Кб, нужны по 30Мб?

Наоборот, место экономит. Хотя там 30 мб и не пахнет, это ж не хромиум и не qt
30 мар 21, 10:45    [22301873]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить