Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: MSA 2000 формат даты dd.MM.yyyy в dd.MM.yy
 
 автор: Алексей М.   (11.01.2008 в 16:51)   личное сообщение
 
 

Для корректной работы базы на разных компьютерах решил подстраховаться следующим образом:
Старт----------------
1 - считываю в глобальные переменные значения системных, через функции
LocalReg = GetLocaleInfo(LOCALE_SDECIMAL)
LocalRegDst = GetLocaleInfo(LOCALE_SSHORTDATE)
2 - выставляю свои значения
Call SetLocaleInfo(LOCALE_SDECIMAL, ".")
Call SetLocaleInfo(LOCALE_SSHORTDATE, "dd.MM.yy")
3 - перед выходом из Access восстанавливаю считанные значения
Call SetLocaleInfo(LOCALE_SDECIMAL, LocalReg)
Call SetLocaleInfo(LOCALE_SSHORTDATE, LocalRegDst)
Восстановление проходит без проблем.
Проверяя работу базы после коррекции переменных заметил, что разделитель
разрядов из запятой переключается на точку, а краткий формат даты
в полях остается dd.MM.yyyy.
Вызов MsgBox GetLocaleInfo(LOCALE_SSHORTDATE), vbExclamation, "БД xxxx" дает результат "dd.MM.yy",
т.е. как и прописывал. Самое непонятное, что Windows все нормально воспринимает и в проводнике
отображаются даты в соответствии с измененными установками. В Excele тоже все меняется. Может подскажете,
в чем причина?

  Ответить  
 
 автор: Силыч   (11.01.2008 в 16:53)   личное сообщение
 
 

хм... а я в базе храню даты в формате YYYYMMDD
и потом, где нужно, преобразовываю через Format(Дата,"dd.mm.yyyy")

  Ответить  
 
 автор: Алексей М.   (11.01.2008 в 16:58)   личное сообщение
 
 

Идея понятна. Но переделывать слишком много. Может дело в том, что Access стартует до исправлений?

  Ответить  
 
 автор: Анатолий (Киев)   (11.01.2008 в 17:33)   личное сообщение
 
 

У меня это выглядит так:
lngRet = apiSetLocaleInfo(LOCALE_USER_DEFAULT, lngLCType, strNewValue)

Call apiSendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, _
vbNullString, SMTO_ABORTIFHUNG, 1000, lngRet)

Т.е. отправляю сообщение об изменении настроек всем открытым приложениям.
Давно писал, уже не помню, что заставило. Возможно и эта ситуация.

  Ответить  
 
 автор: Алексей М.   (11.01.2008 в 17:33)   личное сообщение
 
 

ДА, заметил еще оду вещь. В открывая в следующем окне другую базу вижу, что установки воспринимаются правильно. А в этой формат даты не меняется. Может её можно или нужно как то обновлять? Замечу, что база разделенная на интерфейсную часть - (mde) и табличную (mdb), находятся на разных логических дисках.

  Ответить  
 
 автор: Алексей М.   (11.01.2008 в 18:01)   личное сообщение
 
 

Цитатирую: Т.е. отправляю сообщение об изменении настроек всем открытым приложениям.
Давно писал, уже не помню, что заставило. Возможно и эта ситуация.

Скорее всего, что именно это и надо делать. Но не всё из кода мне понятно, но ясно, что это приложение
(база) было открыто до внесения новых настроек. Поэтому в других приложениях и базах открытых позже изменения
воспринимаются, а здесь нет.
Буду благодарен за ссылку на описание самих функций и задействованных переменных.

Дополняю. "." то же, как оказалось, не переключается, погорячился...

  Ответить  
 
 автор: Анатолий (Киев)   (11.01.2008 в 20:00)   личное сообщение
 
 

Private Declare Function apiSendMessageTimeout Lib "user32" _
Alias "SendMessageTimeoutA" (ByVal hWnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As String, ByVal fuFlags As Long, _
ByVal uTimeout As Long, lpdwResult As Long) As Long
Private Const HWND_BROADCAST As Long = &HFFFF
Private Const WM_SETTINGCHANGE As Long = &H1A 'WM_WININICHANGE
Private Const SMTO_ABORTIFHUNG = &H2

Ваша Call SetLocaleInfo(...) видимо оболочка над одноименной API функцией. На всякий случай даю и ее.

Private Declare Function apiSetLocaleInfo Lib "kernel32" _
Alias "SetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal lpLCData As String) As Long
Private Const LOCALE_SYSTEM_DEFAULT = &H800
Private Const LOCALE_USER_DEFAULT = &H400

  Ответить  
 
 автор: Алексей М.   (12.01.2008 в 15:31)   личное сообщение
 
 

Анатолий, спасибо большое, сейчас буду пробовать.
Вообще, я брал примеры с am.rusimport.ru.
Постараюсь внедрить то, что вы подсказали.

  Ответить  
 
 автор: Алексей М.   (12.01.2008 в 17:01)   личное сообщение
 
 

Сасибки. Много, много...
Заработало!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList