2010-08-24 77 views
0

我正在使用一个BDE TTable有某些领域,最初是ftDouble。 由于要存储的输入有时是非数字的,我现在将字段类型更改为ftString。德尔福BDE双字段字段更改为字符串类型

输入字段是用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

我只能将其转换为float:

var 
dFloat : double; 

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

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

end; 
+0

对不起,我不清楚我的问题。字段类型变化的原因是存储的信息可能是非数字的。 – ChuckO 2010-08-24 13:43:46

0

当您更改字段类型时,是否还更改了模式中的数据库字段(xBASE/Clipper中的结构)?如果不是,你试图给一个数字类型字段分配一个非数字值,这就是导致这个异常的原因。

如果您仍在使用DBF样式文件,则需要将数据库中字段的类型从NUMERIC更改为CHARACTER。您可以使用数据库桌面IIRC中的SQL以及BDE的DBASE支持。

只要将TField的类型从ftFloat更改为ftString,不会自动更改该字段的数据库存储;你必须在两个地方自己做。

+0

我使用dBASE在DBF文件中将字段类型从NUMERIC更改为CHARACTER。 我在问题中将其称为ftString以符合Delphi的使用。 – ChuckO 2010-08-24 14:23:45

+0

这里的东西并不一致。在表格中是否有任何持久性字段(在设计时使用字段编辑器创建的字段)?有可能在一个地方使用FieldByName()来设置内容会导致持久字段在其他地方刷新,这就是实际导致错误的原因。 – 2010-08-25 13:53:30

1

该错误信息仅由TFloatField类型的字段创建,该字段仅在TFieldDefDataType值为ftFloat时创建。仔细检查你是否认为你已经改变了房屋。

字段定义可以从字段本身填充。确保您已更改底层数据库架构,而不仅仅是您的组件。

+0

TTable组件上的FieldDefs属性显示该字段是ftString – ChuckO 2010-08-24 14:29:44

+0

我毫不怀疑这一点 - 你*说*你在问题中将它改为ftString。但TTable不是数据库模式。检查数据库模式。 – 2010-08-24 14:35:42

+0

我使用dBASE在DBF文件中将字段类型从NUMERIC更改为CHARACTER。我在问题中将其称为ftString以符合Delphi的使用。 – ChuckO 2010-08-24 14:40:20