밀리세컨드 단위까지 파라메터로 전달시
storedProcedure사용시 2008 SQL서버에서 새로 생긴 Date는 델파이2007에서는 ftWideString으로 할당된다.
아마 2008SQL서버가 최근발표된것이라
델파이2007이 스트링으로 표현되는듯 하다. 어째든 사용하는데는 지장이 없다.
SQL서버의 datetiem형식은 파라메터로 ftDatetime으로 할당된다. 초단위까지만 사용한다면 문제되지 않는다.
문제는 밀리세컨드까지 사용하고 싶을때 델파이의 Now등은 TDatetime으로 밀리세컨드를 포함하는데도
서버로 ftDatetime형식의 파라메터로 전달시 밀리세컨드단위는 잘린다는 것이다.
서버의 datetime형식이 밀리세컨드까지 표현하느데도 말이다.
PK로 사용하기위해 서버의 datetime의 밀리세컨드까지 사용하고 싶다.
이때는 ftDatetime 파라메터를 ftFloat로 변경하면 서버로 전달시 의 밀리세컨드단위가 전달된다.
TDatetime이 내부적으로 Double의 플로트타입이므로 호환되는 것 같다.
# 단, 플로트타입으로 전달시 주의사항은 기준일자(숫자 0)가 델파이(1899-12-30), MS-SQL(1900-01-01) 2일차이남으로
델파이에서 서버로 전달시 변수t_float := NOW - 2; 이런 식으로 2일을 빼주어 전달해야 날짜차이가 발생하지 않는다.
어째든 SQL서버의 datetime의 밀리세컨드단위를 사용하고 싶으면 TADOStoredProc의 해당컬럼 파라메터의 데이타타입을
ftDatetime을 ftFloat로 변경하면 된다.
------------------------------------------------------------------------------------------
부수적으로 얻은 것은 다음이다.
SQLTimeStamp타입(SqlTimSt 유닛)을 찾았다.
DateTimeToSQLTimeStamp함수는 TDatetime의 값을 SQLTimeStamp형식으로 바꾼다.
SQLTimeStampToStr함수는 문자열로 바꾼다. 일종의 formatdatetime과 같다.
다음의 두 문장은 같은 결과를 리턴한다.
showmessage(formatdatetime('yyyy-mm-dd hh:nn:ss.zzz', Now));
showmessage(SQLTimeStampToStr('yyyy-mm-dd hh:nn:ss.zzz', DateTimeToSQLTimeStamp(Now)));