2013-09-24 1 views
4

델파이 7 애플리케이션에 다음과 같은 TSQLDataSet이 있습니다. 테이블 MyTable에서 2 개의 필드 (ID 및 이름)를 가져 오는 중입니다.델파이 7에서 델파이 XE4로 마이그레이션하는 동안 TSQL 데이터 세트 오류가 발생했습니다

class EDatabaseError with message 'SQLDataSet: Type mismatch for field 'NAME', expecting: String actual:WideString' 

은 무엇이 문제의 가능한 원인이 될 수있는 방법 나는 그것을 제거해야한다 : 나는 델파이 XE4로 마이그레이션 할 때

object SQLDataSet: TSQLDataSet 
    GetMetadata = False 
    CommandText = 'select * from MyTable' 
    MaxBlobSize = -1 
    Params = <> 
    SQLConnection = mySQLConnection 

    object SQLDataSetID: TIntegerField 
     FieldName = 'ID' 
     ProviderFlags = [pfInUpdate, pfInWhere, pfInKey] 
     Required = True 
    end 
    object SQLDataSetNAME: TStringField 
     FieldName = 'NAME' 
     Required = True 
     Size = 50 
    end 
end 

, 나는 오류가 다음 무엇입니까?

참고 : firebird 2.5.2입니다.

+4

'TStringField'에'TWideStringField' – ZigiZ

+0

@ZigiZ 변경 시도 - 귀하의 의견 주셔서 감사합니다. 이렇게하면 문제가 해결되지만 왜해야합니까? 나는이 제안이 주어진 곳에서 http://isatsara.blogspot.in/2012/01/delphi-2010-expecting-string-actual.html 링크를 따라 갔지만 나는 그의 설명을 얻지 못했다. 또한이 하나 http://forums.devart.com/viewtopic.php?t=22080. 이 변화를 다른 사람에게 어떻게 정당화해야합니까? –

+0

'MyTable' 테이블의'NAME' 필드에 대한 Firebird 데이터베이스의 유형은 무엇입니까? –

답변

0

변경 TStringFieldTWideTStringfield

object SQLDataSet: TSQLDataSet 
    GetMetadata = False 
    CommandText = 'select * from MyTable' 
    MaxBlobSize = -1 
    Params = <> 
    SQLConnection = mySQLConnection 

    object SQLDataSetID: TIntegerField 
     FieldName = 'ID' 
     ProviderFlags = [pfInUpdate, pfInWhere, pfInKey] 
     Required = True 
    end 
    object SQLDataSetNAME: **TWideStringField** 
     FieldName = 'NAME' 
     Required = True 
     Size = 50 
    end 
end