2010-08-24 79 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