2010-07-12 55 views
4

我有一個TQuery對象,指向一個dBase數據庫,我想知道如何去參數化我的插入語句。爲什麼使用整數字段的參數化查詢失敗?

以下INSERT查詢就會將正常工作與qry.ExecSQL:

qry.SQL.Text := 
    'INSERT INTO KUNDE ' + 
    '(FNAVN, ENAVN, INSTNR) ' + 
    'VALUES ' + 
    '(:FirstName, :LastName, ' + IntToStr(InstructorNo) + ')'; 

qry.ParamByName('FirstName').AsString := FirstName; 
qry.ParamByName('LastName').AsString := LastName; 

但是,這完全參數化的版本失敗,BDE錯誤 '類型mismtach在表達':

我已嘗試InstructorNo的賦值的各種變體,如.Value而不是AsInteger,但它們都產生相同的錯誤。

「INSTNR」列定義爲數字,最大寬度= 4,小數= 0。我試圖分配的值爲999.

函數參數InstructorNo的類型爲Integer。

這是BDE中的某種已知錯誤嗎?

編輯:我已經想通部分這一個

我可以用.AsSmallInt代替.AsInteger克服一些字段的這個問題,但另一個數字字段沒有整型,SMALLINT或Word作品。唯一的方法是手動將值插入到SQL語句中。帶寬最大值爲6的dBase數字字段有什麼特別之處?

ANOTHER編輯:終於有

我不得不用.AsFloat獲取存儲的值。雖然對於CustomerID使用float類型字段有點奇怪。

+0

小抱怨:dBase是一個特定的應用程序,不是數據庫的基因名稱。只是其中的一件事。 – 2010-07-21 15:30:25

+0

不過,這是一個dBase製作的數據庫。如果我將其稱爲xBase或'DBF文件',將會更清晰:) – 2010-07-21 16:34:20

+0

啊。哇,你好1995年。我感到你的痛苦。 =) – 2010-07-24 16:29:59

回答

1

通過.AsInteger分配值,該參數被標記爲4字節的整數。
這將不適合2個字節的dBase整數(4位整數是2個字節)。
因此,錯誤消息。

- jeroen