2012-03-24 39 views
-1

喜Ive得到用下面的代碼的SQL,缺少操作員或分號錯誤消息

SELECT SUM(Travel_Cost)
FROM旅行
WHERE JOB_ID =:的MCode

爲了允許用戶從傳遞給SQL的編輯組件輸入一個值,我也有以下代碼:

procedure TfrmExpenses.Button3Click(Sender: TObject);  
begin   
    ADOQuery1.active:=false;  
    ADOQuery1.Parameters('mcode').AsString:=Edit1.Text;  
    ADOQuery1.active:=true;  
end; 

我不斷收到錯誤消息

「缺少操作符或分號」

當我嘗試編譯,有什麼建議?

+0

有沒有特定的線路,你可以得到它?這段代碼看起來不錯,但也許你有更多。編譯器應該告訴你確切的一行。 – GolezTrol 2012-03-24 22:16:49

+3

'Parameters'屬性的類型爲'TParameters',而不是'索引的'。因此,您不能將字符串'傳遞'爲'索引'或'參數'。我從來沒有使用數據庫控件,所以我不知道這是什麼實際,但從語法的角度來看,例如,'ADOQuery1.Parameters.ParamValues ['mcode']:='Test';'和' ADOQuery1.Parameters.ParamByName('mcode')。Value:='text';'compiles。 – 2012-03-24 22:19:09

+0

繼續發佈Andreas發佈的內容,請嘗試使用ParamByName而不是參數。另外,請確保參數輸入類型「mcode」與Job_ID字段類型相匹配。如果兩者都是整數,請將參數輸入類型設置爲整數,並在分配期間將edit1.text轉換爲整數。 – 2012-03-24 22:21:55

回答

1

雖然TParameters類具有默認屬性,但它接受Integer而不是string

如果知道參數的索引可以使用:

var I: Integer; 
.... 
ADOQuery1.Parameters[I].AsString := Edit1.Text; 

否則,你需要使用:

ADOQuery1.Parameters.ParamByName('mcode').AsString := Edit1.Text; 

注意:您要避免使用任何的*ByName功能(ParamByNameFieldByName等),如果可以的話,因爲每次調用都會在底層集合上執行線性搜索,直到找到匹配爲止。在這個特殊情況下沒有真正的相關性,但值得考慮。