공통 [마이그레이션][FireDAC] MapRules를 적용해 데이터타입 매핑하기
2017.02.07 17:58
FireDAC으로 마이그레이션 후
FireDAC으로 마이그레이션 후 다음 오류가 발생하는 경우 조치방법을 참고해 해결하기 바랍니다.
엄격한 데이터 타입 체크로 발생되는 오류
Type mismatch for field 'ALLOT_PT', expecting: FMTBcdField actual: Float Type mismatch for field 'GOAL_SEQ', expecting: Float actual: BCD |
조치방법
1) 필드 재생성(제거 후 추가)
Type mismatch for field 'ALLOT_PT', expecting: FMTBcdField actual: Float
위 오류에서 TFMTBcdField를 제거 후 추가하면 TFloatField가 추가됩니다.
(필드의 속성값이 유실될 수 있으니 주의하기 바랍니다.)
2) MapRules 적용
MapRules를 다음과 같이 적용합니다.(적용 방법은 하단을 참고하세요.)
FormatOptions.AssignedValues = [fvMapRules]
FormatOptions.OwnMapRules = True
FormatOptions.MapRules = <
item
SourceDataType = dtFmtBCD
TargetDataType = dtDouble
end>
데이터 길이 체크 오류
FireDAC][DatS]-32. Variable length column [SCCAREERDESC] overflow. Value length - [8], column maximum length - [4]
// 다음과 같이 쿼리에 한글이 포함된 경우 발생할 수 있습니다. SELECT '1' "SCCAREERTYPE", '대졸입사' "SCCAREERDESC" FROM DUAL UNION SELECT '2' "SCCAREERTYPE", '전문입사' "SCCAREERDESC" FROM DUAL |
조치방법
1) 필드 재생성
TStringField 제거 후 필드를 추가하면 TWideStringField가 추가됩니다.
2) MapRules 적용
FormatOptions.AssignedValues = [fvMapRules]
FormatOptions.OwnMapRules = True
FormatOptions.MapRules = <
item
SourceDataType = dtAnsiString
TargetDataType = dtWideString
end>
매핑규칙(MapRules) 적용 방법
매핑규칙 옵션은 TFDConnection, TFDQuery, TFDTable, TFDStoredproc 등에 적용할 수 있습니다.
매핑규칙 옵션은 캐스캐이드(폭포수) 옵션으로 TFDConnection에 적용 시 TFDConnection을 참조하는 TFDQuery, TFDTable, TFDStoredProc 등에 적용됩니다.
1) Object Inspector에서 속성을 이용해 적용
FormatOptions.MapRules 속성을 이용해 매핑규칙을 추가할 수 있습니다.
FormatOptions.OwnMapRules 속성을 True로 설정합니다.
FormatOptions.AssignedValues = [fvMapRules] 항목을 지정합니다.
2) 에디터를 이용해 적용
TFDConnection의 Connection Editor와 TFDQuery의 Query Editor의 Options 탭으로 이동 후 아래 그림과 같이 매핑규칙을 추가할 수 있습니다.
참고 링크
- [docwiki] Data Type Mapping - http://docwiki.embarcadero.com/RADStudio/Berlin/en/Data_Type_Mapping_(FireDAC)