자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi bcdfield 관련 마이그레이션 작업 문의
2018.07.13 15:35
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
델파이 7 -> 도쿄로 마이그레이션 중입니다.
기존 ADO 쿼리에서 FD쿼리로 변환작업을 진행중인데,
MapRule을 통해 BCD 필드를 integer, float 필드로 변환하였습니다.
헌데 일부 쿼리는 TBCDfield가 아닌 TFMTBCDfield로 로드가 되는데, 어떠한 경우에 fmtbcd필드로 로드가 되는것인가요?
또한 FMTbcd필드는 maprule의 정책이 적용이 되질 않습니다.
거기에 maprule은 FDConnection에만 적용해두면 해당 커넥션을 사용하는 FDquery에 모두 적용이 되는것인가요??
(현재 적용이 되질않나 fdquery component에 하나씩 maprule 생성.)
정리하자면,
1. BCDfield와 FMTBCDfield의 차이점.(어떠한 경우에 FMTBCD로 로드되는지?)
2. FMTBCDfield에 Maprule 적용방법.
3. maprule은 FDConnection에만 적용해두면 해당 커넥션을 사용하는 FDquery에 모두 적용이 되는것인지?
4. maprule에서 widestringfield를 stringfield로 바꿀 수 있는지?
하기 테스트해본 소스입니다.
====================
object FDConnection1: TFDConnection
Params.Strings = (
'DriverID=ora'
'Database=***'
'Password=****'
'User_Name=****')
FormatOptions.AssignedValues = [fvMapRules, fvDataSnapCompatibility]
FormatOptions.OwnMapRules = True
FormatOptions.MapRules = <
item
PrecMax = 10
PrecMin = 0
ScaleMax = 0
SizeMin = 0
SourceDataType = dtFmtBCD
TargetDataType = dtInt32
end>
FormatOptions.DataSnapCompatibility = True
Connected = True
LoginPrompt = False
Left = 360
Top = 216
end
object FDQuery1: TFDQuery
Connection = FDConnection1
SQL.Strings = (
'select 1 f1, 2.3 f2, 3.12345 f3'
'from dual')
Left = 440
Top = 224
object FDQuery1F1: TFMTBCDField
FieldName = 'F1'
Origin = 'F1'
Precision = 32
Size = 12
end
object FDQuery1F2: TFMTBCDField
FieldName = 'F2'
Origin = 'F2'
Precision = 32
Size = 12
end
object FDQuery1F3: TFMTBCDField
FieldName = 'F3'
Origin = 'F3'
Precision = 32
Size = 12
end
end
댓글 3
-
험프리
2018.07.17 15:50
-
mckim
2018.07.17 18:05
답변으로 주신 링크를 참조하여 작업했던겁니다.
maprule적용 후 다시 로드 하였으며, 해당현상이 나타나 문의 드렸던 겁니다.
마이그레이션시 큰 이슈사항이라 다시 한 번 도움부탁드립니다.
다시 정리하자면,
1. BCDfield와 FMTBCDfield의 차이점.(어떠한 경우에 FMTBCD로 로드되는지?)
- 답변 부탁드립니다.
2. FMTBCDfield에 Maprule 적용방법.
- 확인했습니다. 다만 integerfield, floatfield를 구분하지 못합니다.
bcdfield의 경우 scalemin,max를 0으로 셋팅하여 dtbcd -> dtint32
scalemin,max를 1,10으로 셋팅한 경우 dtbcd -> dtdouble로 하여 처리했습니다만,
fmtbcd의 경우 위와 같이 처리가 되질 않습니다.
테스트 부탁드립니다.
3. maprule은 FDConnection에만 적용해두면 해당 커넥션을 사용하는 FDquery에 모두 적용이 되는것인지?
- 정상동작 확인하였습니다.
4. maprule에서 widestringfield를 stringfield로 바꿀 수 있는지?
- dtwidestring -> dtansistring 으로 확인하였습니다.
-
험프리
2018.08.08 13:20
미처리된 2개 질문에 대해 추가 답변 드립니다.
1. BCDfield와 FMTBCDfield의 차이점.(어떠한 경우에 FMTBCD로 로드되는지?)
BCDField와 FMTBCDField의 차이점은 아래 문서를 확인하시기 바랍니다.
http://docwiki.embarcadero.com/Libraries/Tokyo/en/Data.DB.TBCDField
http://docwiki.embarcadero.com/Libraries/Tokyo/en/Data.DB.TFMTBCDField
간단히 설명 드리면, 높은 정밀도를 필요로 하는 경우 FMTBCDField를 사용하시기 바랍니다.
필드(TField) 타입의 종류는 실제 DBMS의 컬럼의 데이터 타입에 따라 결정됩니다.
어떤 타입을 사용하실지는 TFDQuery 컴포넌트 추가 후 SQL 등록 후 필드를 만들어 보시면 알 수 있습니다.
(즉, 별도로 테스트 해보시며 확인하시기 바랍니다.)
2. FMTBCDfield에 Maprule 적용방법.
BCDField의 경우 자리수에 따라 데이터형을 지정하시기 바랍니다.
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Data_Type_Mapping_(FireDAC)
FMTBCDField의 경우 Double로 지정해도 무방합니다.
Delphi bcdfield 관련 마이그레이션 작업 문의
2018.07.13 15:35
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
델파이 7 -> 도쿄로 마이그레이션 중입니다.
기존 ADO 쿼리에서 FD쿼리로 변환작업을 진행중인데,
MapRule을 통해 BCD 필드를 integer, float 필드로 변환하였습니다.
헌데 일부 쿼리는 TBCDfield가 아닌 TFMTBCDfield로 로드가 되는데, 어떠한 경우에 fmtbcd필드로 로드가 되는것인가요?
또한 FMTbcd필드는 maprule의 정책이 적용이 되질 않습니다.
거기에 maprule은 FDConnection에만 적용해두면 해당 커넥션을 사용하는 FDquery에 모두 적용이 되는것인가요??
(현재 적용이 되질않나 fdquery component에 하나씩 maprule 생성.)
정리하자면,
1. BCDfield와 FMTBCDfield의 차이점.(어떠한 경우에 FMTBCD로 로드되는지?)
2. FMTBCDfield에 Maprule 적용방법.
3. maprule은 FDConnection에만 적용해두면 해당 커넥션을 사용하는 FDquery에 모두 적용이 되는것인지?
4. maprule에서 widestringfield를 stringfield로 바꿀 수 있는지?
하기 테스트해본 소스입니다.
====================
object FDConnection1: TFDConnection
Params.Strings = (
'DriverID=ora'
'Database=***'
'Password=****'
'User_Name=****')
FormatOptions.AssignedValues = [fvMapRules, fvDataSnapCompatibility]
FormatOptions.OwnMapRules = True
FormatOptions.MapRules = <
item
PrecMax = 10
PrecMin = 0
ScaleMax = 0
SizeMin = 0
SourceDataType = dtFmtBCD
TargetDataType = dtInt32
end>
FormatOptions.DataSnapCompatibility = True
Connected = True
LoginPrompt = False
Left = 360
Top = 216
end
object FDQuery1: TFDQuery
Connection = FDConnection1
SQL.Strings = (
'select 1 f1, 2.3 f2, 3.12345 f3'
'from dual')
Left = 440
Top = 224
object FDQuery1F1: TFMTBCDField
FieldName = 'F1'
Origin = 'F1'
Precision = 32
Size = 12
end
object FDQuery1F2: TFMTBCDField
FieldName = 'F2'
Origin = 'F2'
Precision = 32
Size = 12
end
object FDQuery1F3: TFMTBCDField
FieldName = 'F3'
Origin = 'F3'
Precision = 32
Size = 12
end
end
댓글 3
-
험프리
2018.07.17 15:50
-
mckim
2018.07.17 18:05
답변으로 주신 링크를 참조하여 작업했던겁니다.
maprule적용 후 다시 로드 하였으며, 해당현상이 나타나 문의 드렸던 겁니다.
마이그레이션시 큰 이슈사항이라 다시 한 번 도움부탁드립니다.
다시 정리하자면,
1. BCDfield와 FMTBCDfield의 차이점.(어떠한 경우에 FMTBCD로 로드되는지?)
- 답변 부탁드립니다.
2. FMTBCDfield에 Maprule 적용방법.
- 확인했습니다. 다만 integerfield, floatfield를 구분하지 못합니다.
bcdfield의 경우 scalemin,max를 0으로 셋팅하여 dtbcd -> dtint32
scalemin,max를 1,10으로 셋팅한 경우 dtbcd -> dtdouble로 하여 처리했습니다만,
fmtbcd의 경우 위와 같이 처리가 되질 않습니다.
테스트 부탁드립니다.
3. maprule은 FDConnection에만 적용해두면 해당 커넥션을 사용하는 FDquery에 모두 적용이 되는것인지?
- 정상동작 확인하였습니다.
4. maprule에서 widestringfield를 stringfield로 바꿀 수 있는지?
- dtwidestring -> dtansistring 으로 확인하였습니다.
-
험프리
2018.08.08 13:20
미처리된 2개 질문에 대해 추가 답변 드립니다.
1. BCDfield와 FMTBCDfield의 차이점.(어떠한 경우에 FMTBCD로 로드되는지?)
BCDField와 FMTBCDField의 차이점은 아래 문서를 확인하시기 바랍니다.
http://docwiki.embarcadero.com/Libraries/Tokyo/en/Data.DB.TBCDField
http://docwiki.embarcadero.com/Libraries/Tokyo/en/Data.DB.TFMTBCDField
간단히 설명 드리면, 높은 정밀도를 필요로 하는 경우 FMTBCDField를 사용하시기 바랍니다.
필드(TField) 타입의 종류는 실제 DBMS의 컬럼의 데이터 타입에 따라 결정됩니다.
어떤 타입을 사용하실지는 TFDQuery 컴포넌트 추가 후 SQL 등록 후 필드를 만들어 보시면 알 수 있습니다.
(즉, 별도로 테스트 해보시며 확인하시기 바랍니다.)
2. FMTBCDfield에 Maprule 적용방법.
BCDField의 경우 자리수에 따라 데이터형을 지정하시기 바랍니다.
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Data_Type_Mapping_(FireDAC)
FMTBCDField의 경우 Double로 지정해도 무방합니다.
다음 링크를 참고해보세요.
http://tech.devgear.co.kr/delphi_news/429974
1, 저의 경우 실행 후 오류를 판단해 MapRules를 적용했습니다.
2, 위 링크를 참고하세요.
3, FireDAC의 옵션들은 Cascade Option(폭포수 모델)으로, 상위 컴포넌트에 적용 시 하위 컴포넌트에 반영됩니다.
4, 위 링크를 참고하세요.
테스트 하신 코드는 이미 FMTBCDField를 생성했으므로, MapRules 적용 시 오류가 나겠네요.
오류는 데이터 로드(Open) 시 발생합니다.
데브기어 교육과정 중 마이그레이션 워크샵 과정도 있으니 참고하시기 바랍니다.
http://www.devgear.co.kr/support/education/delphi_migration/