Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2012, 14:17   #1
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию Переобразование даты

Здравствуйте.

Не получается распознать поле как дату.
Дата в таком формате "Apr 24 2012 5:18PM"

Можно ли её как то на наш формат распознать "дата время"?
sasha_prof вне форума Ответить с цитированием
Старый 14.07.2012, 15:18   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте sasha_prof.
"..поле как дату.." Вы откуда получаете?
Если из внешнего источника как дату с применением форматирования источника, то достаточно изменить отображаемый
формат средствами MS Access.
(убедиться можно умножив значение поля на еденицу)
Иначе, если у Вас текстовые строки, потребуется собственная функция VBA для преобразования строк в значение даты.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 14.07.2012, 16:01   #3
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

Да это тестовое поле.
Я выгружаю его с тхт файла.
Мы сделали уже это через IIf и Mid.
Может у Вас более простой вариант решения данного вопроса?
sasha_prof вне форума Ответить с цитированием
Старый 14.07.2012, 20:51   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

"..Может у Вас более простой вариант.." - у меня никакого варианта нет, у меня нет такой задачи.
но собрать можно что нибудь подобное:
Код:
Public Function strToDate(v)
Dim vA$(), vM(), i%, s$
vM = Array("", "Jan", "Feb", "Mar", "Apr", "M5", "M6", "M7", "..", "..", "..", "..", "..")
strToDate = v
If Len(v & "") = 0 Then Exit Function
vA = Split(v, " ")
If Not UBound(vA) = 3 Then Exit Function
For i = 1 To 12
    If vA(0) = vM(i) Then
        vA(0) = i
        Exit For
    End If
Next
If Not IsNumeric(vA(0)) Then Exit Function
strToDate = DateSerial(vA(2), vA(0), vA(1))
vA = Split(vA(3), ":")
If Not UBound(vA) = 1 Then Exit Function
vA(0) = Val(vA(0)) + Abs(InStr(1, vA(1), "PM") > 0) * 12
vA(1) = Left(vA(1), 2)
strToDate = strToDate + TimeSerial(vA(0), vA(1), 0)
If IsDate(strToDate) Then strToDate = Format(strToDate, "dd.mm.yyyy  hh:nn")
End Function

Sub test()
    Debug.Print strToDate("Apr 24 2012 5:18PM")
End Sub
не знаю насколько по Вашему мнению это проще.

Евгений.

Последний раз редактировалось Teslenko_EA; 14.07.2012 в 20:58.
Teslenko_EA вне форума Ответить с цитированием
Старый 14.07.2012, 21:32   #5
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

Мда... ваш не сложный)))) Что тогда о моем говорить...



Спасибо. А как весь столбец обработать в Access?

Последний раз редактировалось sasha_prof; 14.07.2012 в 21:36.
sasha_prof вне форума Ответить с цитированием
Старый 14.07.2012, 22:38   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

"..весь столбец обработать.." - столбцом Вы очевидно называете поле таблицы. если это так, то:
1. разместить код функции в модуле
2. модуль должен быть сохранен
3. запустить конструктор запросов
4. переключить конструктор в SQL режим (правым кликом)
5. разместить в редакторе подобную конструкцию:
Код:
select *, strToDate([ИмяПоляСоСтрокойДаты]) as Дата from [ИмяТаблицы]
6. запустить запрос переключив его в режим Таблицы

далее Вы сможете подключать этот запрос в качестве источника к своим конструкциям (формам/отчётам)
(конечно введя в массиве реальные сокращения имен месяцев вместо М! и двоеточий)

Евгений.

Последний раз редактировалось Teslenko_EA; 14.07.2012 в 22:43.
Teslenko_EA вне форума Ответить с цитированием
Старый 16.07.2012, 22:19   #7
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

Спасибо!!!

Что-то вот эту дату не воспринимает "Apr 24 2012 3:34PM"
Наверное из-за 2-х пробелов после даты.

Здесь уходит в Exit Function
If Not UBound(vA) = 3 Then Exit Function


Как их вылечить?

Последний раз редактировалось sasha_prof; 16.07.2012 в 23:44.
sasha_prof вне форума Ответить с цитированием
Старый 17.07.2012, 00:58   #8
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

"..Как их вылечить? .."
Код:
select *, strToDate(Trim([ИмяПоляСоСтрокойДаты])) as Дата from [ИмяТаблицы]
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 17.07.2012, 23:09   #9
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

Все разобрался.
Всем спасибо

Последний раз редактировалось sasha_prof; 17.07.2012 в 23:17.
sasha_prof вне форума Ответить с цитированием
Старый 18.07.2012, 03:41   #10
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Достаточно одной таблетки!

Цитата:
Сообщение от sasha_prof Посмотреть сообщение
Дата в таком формате "Apr 24 2012 5:18PM"

Можно ли её как то на наш формат распознать "дата время"?
Как-никак, а способ есть: поставить этого крокодила между # и #
Изображения
Тип файла: png 2012-07-18_даты.png (5.9 Кб, 34 просмотров)
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать так чтобы не отображались даты Даты вместо Цифр в ЕКСЕЛЬ? d88n Помощь студентам 1 17.06.2011 05:16
Определить среднее значение продаж от даты до даты СтепКо Microsoft Office Excel 1 26.02.2011 20:08
Автоматическое переобразование введеных чисел в данные из таблицы Tank302 Microsoft Office Excel 14 18.06.2010 16:48
переобразование ПХП в Рисуное Mpa4Hu PHP 2 01.05.2010 02:20
Автоматизация заполнения даты и зависимость ячейки времени к ячейке даты. Каравай Microsoft Office Excel 14 11.03.2010 18:11