2012-08-23 7 views
2

"m/d/yyyy hh : mi : ss"형식의 내 Access 2007 테이블에 텍스트 열이 있습니다. 예 : 1-2 자리의 월 1-2 자리 일 4 자리 연도 및 " 미국 "날짜 형식. 현지 날짜 형식은 dd/mm/yyyy입니다.액세스 할 때 텍스트로 변환

이러한 날짜를 날짜/시간 필드로 변환하여 정렬 할 수 있도록하고 싶지만 CDate를 사용하여 업데이트 쿼리를 실행하면 '월 및 일'처리가 일치하지 않습니다. 날짜가 분명하기 때문에 일> 12 일은 괜찮습니다. 그러나 8 월 1 일 (2011 년 8 월 1 일)을 1 월 8 일로 변환합니다 ...

나는 내 지역을 변경할 권한이 없습니다. 일시적으로 할 수 있다면 반창고.

왼쪽, 오른쪽, 중간, InStr 등으로 많은 작업을 수행하여 변환을 "강제 수행"할 수 있지만 일과 월 1-2 일 때문에 많은 작업이 필요합니다.

볼드체 델파이/파스칼의 StrToDate에 VB에서 상응하는 것은 날짜 문자열과 각 숫자가 나타내는 변환을 알려주는 형식 문자열을 전달하는 것입니다.

델파이에서이만큼 쉬운 것입니다 : -

MyDate:= StrToDate(MyAmericanFormattedDate,'d/m/yyyy hh24:mi:ss'); 

는 VB에 해당이 있습니까?

답변

2

델파이 기능처럼 VBA에는 아무 것도 없습니다. 문자열 값을 올바르게 변환하는 함수를 만들 수 있습니다. 그리고 Left, Right, MidInStr 기능을 사용할 필요가 없습니다. Split() 함수는 Access 2000 이후에 사용 가능하므로 날짜 부분을 분리하여 함수에 공급할 수 있습니다.

Public Function DateFromAmericanFormat(ByVal pIn As String, _ 
     Optional ByVal pDelimiter As String = "/") As Date 
    Dim strDate As String 
    Dim strTime As String 
    Dim dteReturn As Date 
    Dim astrFirstSplit() As String 
    Dim astrDateParts() As String 
    Dim intMonth As Integer 
    Dim intDay As Integer 
    Dim intYear As Integer 

    astrFirstSplit = Split(pIn, " ") 
    strDate = astrFirstSplit(0) 
    strTime = astrFirstSplit(1) 

    astrDateParts = Split(strDate, pDelimiter) 
    intMonth = CInt(astrDateParts(0)) 
    intDay = CInt(astrDateParts(1)) 
    intYear = CInt(astrDateParts(2)) 
    dteReturn = DateSerial(intYear, intMonth, intDay) + CDate(strTime) 
    DateFromAmericanFormat = dteReturn 
End Function 

이것은 대략적인 개요입니다. "subscript out of range"와 함께 Null 입력에서 실패합니다. 그래서 이것은 세련미를 필요로 할지도 모르지만 희망적으로 그것은 합리적인 출발점입니다.

+1

감사합니다. 멋진 솔루션 - 더 많은 담당자 (마치 당신이 필요로하는 것처럼 :) – mcottle