2011-01-24 4 views
4

내 구성 :오류 변환 변형 [델파이 XE + IBObjects 4.9.12]

델파이 XE
파이어 버드 2.1
IBObjects 4.9.12
윈도우 7 64bit를

나는 예외 경우를 얻을 수 IBOQuery 매개 변수 ("유형의 변형 (UnicodeString)을 유형으로 변환 할 수 없습니다 (Double)")에 값을 설정하려고합니다.

IB_Components.pas의 TIB_Column.SetAsVariant 프로 시저에서 예외가 발생합니다 (42795 행). 내가이 상황을 해결하기 위해 노력하고있어 지난 25 일 동안

myQuery.paramByName('mydate').AsString := DateToStr(IncDay(Now,5));

하지만, IBO 지원 목록에 나는 아무 대답이 없어 한 :이 상황을 만들려면 그냥 날짜 매개 변수 문자열을 전달하려고합니다.
누군가가 아이디어를 가지고 있습니까?

+3

날짜 필드는 데이터베이스에 어떤 종류입니까? 예를 들어, Delphi TDateTime이라고 가정하고 문자열로 변환하는 것은 잘못된 것입니다. 'myQuery.paramByName ('mydate'). AsDateTime : = IncDay (Now, 5);'정답은 데이터베이스 필드에 사용 된 데이터 유형에 따라 달라집니다. IncDay의 경우 –

+0

+1입니다. Radu – RBA

+0

나쁜 변환을 시도 할 때 VarCastError가 Variants 장치에서 발생시키는 메시지입니다. "Debug DCU 사용"을 사용하여 응용 프로그램을 빌드하면 Variants.pas에서 가져온 응용 프로그램을 볼 수 있습니다. 내 추측 : IBObjects가 매개 변수에 "데이터 유형"을 할당하는 방법이있는 경우 매개 변수는 DATE (TDateTime = Double는 Delphi, Double은 일종의 Float 임)로 정의됩니다. 지정된 줄 번호에 IB_Components.pas의 코드를 표시합니다. –

답변

3

IBObjects의 아키텍처는 모든 매개 변수, 필드 등을 (실행 순간에) String 또는 Variant로 변환합니다. 'mydate'매개 변수가 'DateTime'(숫자) 유형 인 경우에는이를 응시자 유형 값으로 채워야합니다. 문자열과 '숫자'형식 매개 변수를 채우기 위해 논리 ...

되지 않습니다

myQuery.paramByName ('MyDate가')를 시도 AsDateTime :. = 이제 + 5; // David의 답과 같습니다.

또는

myQuery.paramByName ('MyDate가') AsFloat :. 지금 + = 5; // 또는 IncDay (지금, 5)

안부,
라두

+1

나는이 뒤에 데이터베이스가 델파이의'TDateTime'이 아닌 다른 것을 사용하여 날짜를 갖고있을 수 있다고 생각한다. –

+1

"STRING"에서 "STRING 또는 VARIANT"로 변환하면 절대로 실패하지 않아야합니다. STRING에서 DateTime으로의 변환이 실패 할 수 있습니다. 특히 문자열이 DateToStr()의 결과 일 경우 –

+1

Radu, 답장을 보내 주셔서 감사합니다.나는 이것을 시도하고 잘 작동하지만 문제는 모든 "ParamByName"을 찾고 수정하는 것입니다. 이전 Delphi 버전에서는 정상적으로 작동합니다. – TiagoTecchio