Convert String Value to Date format (20110315 --> 15/03/2011) (1 Viewer)

ria_arora

Registered User.
Local time
Today, 12:31
Joined
Jan 22, 2011
Messages
56
Dear Friends,

I'm using MS Access Version is 2002. And need to convert String Value to Date format (20110315 --> 15/03/2011) but all records do not have value. There are some records with null value. I tried below SQL in VBA but unfortunately this is also not working and throwing error "Error detected, error # 13, Type mismatch"

strSQL = "SELECT CUSTOMER_NO, TRADE_NO, BUY_SELL, " & _
" OFFICE, SECNO, SECNAME, ISIN_NO, " & _
" MAT_DATE, TR_CCY, NOMINAL, TURNOVER, " & _
" CDate(Left(VALUE_DATE, 4) & " / " & Mid(VALUE_DATE, 5, 2) & " / " & Mid(VALUE_DATE, 7, 2)) AS VALUE_DATE, " & _
" INCOME_CCY, INCOME_CC, RM " & _
" FROM " & sTmpTableName

Same SQL is working if I exectue as query. :mad:

I tried work around but that is also throwing same error:

CurrentDb.Execute ("UPDATE " & sTmpTableName & _
" SET VALUE_DATE = CDate(Left(VALUE_DATE, 4) & " / " & Mid(VALUE_DATE, 5, 2) & " / " & Mid(VALUE_DATE, 7, 2)) " & _
" WHERE VALUE_DATE IS NOT NULL ")

If I execute Update Statment directely as query it works but when you this query in VBA it is throwing error "Error detected, error # 13, Type mismatch" :confused:

Appreciate your help on this.

Thanks
Ria
 

vbaInet

AWF VIP
Local time
Today, 05:31
Joined
Jan 22, 2010
Messages
26,374
ria,

Check the length of the String (i.e. using Len([Field] & "")) before converting to Date.

IIF(Len([Field] & "") <> 0, Convert, Null)

OR - if you're positive that it will either be Null or has a value then:

Nz(Convert, Null)
 

ria_arora

Registered User.
Local time
Today, 12:31
Joined
Jan 22, 2011
Messages
56
Thanks for the reply. What is the syntax to convert?

I have tried below syntax but that is not working?

CDate(Left(VALUE_DATE, 4) & " / " & Mid(VALUE_DATE, 5, 2) & " / " & Mid(VALUE_DATE, 7, 2)) AS VALUE_DATE

Regards
Ria
 

DCrake

Remembered
Local time
Today, 05:31
Joined
Jun 8, 2005
Messages
8,632
Code:
Public Function STOD(Optional AnyDateString As String) As Date

Dim Yr As String
Dim Mt As String
Dim Dt As String

If Not IsEmpty(AnyDateString) Then

   Yr = Left(AnyDateString,4)
   Mt = Mid(AnyDateString,5,2)
   Dt =Mid(AnyDateString,7,2)

   STOD = CDate(Dt & "/" & Mt & "/" & Yr)

End If

End Function


Try this in your query. Not tested but should work
 

DCrake

Remembered
Local time
Today, 05:31
Joined
Jun 8, 2005
Messages
8,632
Reason why failing was that it was trying to to convert back to front

CDate(Left(VALUE_DATE, 4) & " / " & Mid(VALUE_DATE, 5, 2) & " / " & Mid(VALUE_DATE, 7, 2)) AS VALUE_DATE


2010/13/01

is not a valid date.
 

vbaInet

AWF VIP
Local time
Today, 05:31
Joined
Jan 22, 2010
Messages
26,374
Something like this perhaps:
Code:
IIF(Len(VALUE_DATE & "") = 8, dateserial(left(VALUE_DATE, 4), mid(VALUE_DATE, 5,2), right(VALUE_DATE, 2)), Null)
 

Users who are viewing this thread

Top Bottom