2010-08-24 1 views
0

Я использую BDE TTable, у которого были определенные поля, которые изначально были ftDouble. Поскольку ввод, который нужно сохранить, иногда не является числовым, теперь я изменил тип поля на ftString.Delphi BDE Double type Поле изменено на String type

Вход в поле осуществляется с помощью TEdit. Когда код получает:

with tblDM do 
    begin 
     Edit; 
     FieldByName('s01_amt').AsString := Edit1.Text; 
     Post; 
    end; 

, если запись не является числом, я получаю сообщение об ошибке BDE:

'a' is not a valid floating point value for field 's01_amt'.

ответ

0

Я бы просто преобразовать его к поплавку:

var 
dFloat : double; 

begin 
    try dFloat := strToFloat(edit1.txt); except dFloat := 0; end; 

    edit; 
    FieldByName('s01_amt').AsFloat := dFloat; 
    post; 

end; 
+0

Извините, в моем вопросе не было ясно. Причиной изменения типа поля является то, что сохраненная информация может быть нечисловой. – ChuckO

0

Когда вы изменили тип поля, вы также изменили поле базы данных в схеме (структура в xBASE/Clipper)? Если нет, вы пытаетесь назначить нечисловое значение для поля числового типа, и именно это вызывает исключение.

Если вы все еще используете файлы стиля DBF, вам необходимо изменить тип поля в базе данных с NUMERIC на CHARACTER. Вы можете сделать это, используя SQL из базы данных Desktop, IIRC, с поддержкой базы данных BDE.

Простое изменение типа TField с ftFloat на ftString не изменит базу данных базы данных для этого поля автоматически; вы должны сделать это в обоих местах самостоятельно.

+0

Я использовал dBASE для изменения типа поля с NUMERIC на CHARACTER в DBF-файле. Я назвал его ftString в вопросе, чтобы соответствовать использованию Delphi. – ChuckO

+0

Что-то здесь несовместимо. У вас есть постоянные поля (поля, созданные в режиме разработки с помощью редактора полей) на столе? Возможно, назначение с помощью FieldByName() в одном месте для установки содержимого вызывает обновление в постоянном поле где-то в другом месте, и именно это вызывает ошибку. –

1

Это сообщение об ошибке создается только полями типа TFloatField, который создается только тогда, когда TFieldDef имеет DataType значение ftFloat. Дважды проверьте, что вы изменили свойство, думая, что сделали.

Определения полей могут быть заполнены из самих полей. Убедитесь, что вы изменили базовую схему базы данных, а не только ваш компонент TTable.

+0

Свойство FieldDefs на компоненте TTable показывает, что поле ftString – ChuckO

+0

Я не сомневался в этом - вы * сказали *, вы изменили его на ftString в вопросе. Но TTable не является схемой базы данных. Проверьте схему базы данных. –

+0

Я использовал dBASE для изменения типа поля с NUMERIC на CHARACTER в DBF-файле. Я назвал его ftString в вопросе, чтобы соответствовать использованию Delphi. – ChuckO