2013-07-23 32 views
0

我正在運行一些查詢(試圖)使用Lazarus對象而不是編程方式,我有我的數據庫連接和事務設置並與我的查詢進行交互,並且正在讀取和初始查詢進入TDBGrid。現在我想要做的就是點擊一個網格單元格並選擇一個用於查詢的ID值。如何在TSQLQuery.SQL中使用綁定參數

我有一個TSQLQuery對象設置和鏈接到源,我進入到這個SQL屬性:

SELECT * FROM tbl_accounts 
WHERE tbl_accounts.ClientID = :AccID 

但是我不能工作,如何我的參數傳遞給該對象...我過程是這樣的:

procedure TtcheckHome.accResultsCellClick(Column: TColumn); 
    begin 
    selected := listAccounts.Fields[0].AsString; 
    // accSelect.SQL.Text := 'SELECT * FROM tbl_accounts WHERE tbl_accounts.ClientID = 2'; 
    accSelect.Params.ParamByName('AccID').AsString := selected; 
    textEdit.Text := accSelect.FieldByName('AccountNumber').AsString; 
end; 

這總是accSelect返回:字段名稱賬戶號碼沒有發現,如果我刪除的任何引用然而PARAMS和硬編碼的ID到它完美查詢。這導致我相信我的使用綁定參數的方法是錯誤的!我錯過了什麼?

+0

你能告訴我們' tbl_accounts'表的定義? – Parado

+1

您需要關閉accSelect,設置參數值,然後再次打開 –

+0

@DavidA您好,先生,是明星,我從來沒有通過查看Lazarus文檔來實現這一點,如果您想將其添加爲答案我會很樂意接受它。萬分感謝,我一直在爲這2個血腥的日子而煩惱! – Funk247

回答

0

要刷新與參數值的查詢:

accSelect.Close; 
accSelect.Params.ParamByName('AccID').AsString := selected; 
accSelect.Open; 

,我做什麼,如果你不想繼續關閉並重新打開相同的查詢:

if accSelect.Params.ParamByName('AccID').AsString <> selected then 
begin 
    accSelect.Close; 
    accSelect.Params.ParamByName('AccID').AsString := selected; 
end; 
if not accSelect.Active then 
    accSelect.Open;