2013-09-24 2 views
4

У меня есть TSQLDataSet в приложении Delphi 7. Он извлекает 2 поля (ID и Name) из таблицы MyTable.Ошибка TSQLDataset при миграции из delphi 7 в delphi 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 

Когда я мигрировал в Delphi xe4, я получаю следующее сообщение об ошибке:

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

Что может быть возможной причиной этой проблемы и как я должен избавиться от него?

Примечание: Я использую 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

Каков тип базы данных Firebird для поля 'NAME' таблицы' MyTable'? –

ответ

0

Изменение TStringField к TWideTStringfield

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 
Смежные вопросы