2017-07-06 20 views
1

嗨,我試圖讓SQL從哪個用戶已經從列表框中EOleException用delphi

繼承人我的代碼選擇了一個表中選擇消息「FROM子句語法錯誤」

activity := cmbActivity.Text; //this is where the user selects a table to choose from 
qryStudents.SQL.Text := 'SELECT * FROM :activity WHERE CompNo = :iCompNo'; //error here 
qryStudents.Parameters.ParamByName('activity').Value:= activity; 
qryStudents.Parameters.ParamByName('iCompNo').Value := iCompNo; 
qryStudents.Open; 

我在SQL代碼(:activity)中FROM FROM語法錯誤之後不斷得到任何幫助

回答

3

您不能將select的表部分定義爲參數,您需要動態構建該部分的select語句。

activity := cmbActivity.Text; 
qryStudents.Close; 
qryStudents.SQL.Text := 'SELECT * FROM ' + activity + ' WHERE CompNo = :iCompNo'; 
qryStudents.Parameters.ParamByName('iCompNo').Value := iCompNo; 
qryStudents.Open; 

:iCompNo OTOH是細被定義作爲參數,以防止SQL注入。

+0

它仍然給出與該更改相同的問題 –

+0

您確定活動變量具有有效的表名嗎?順便說一下,在代碼的開頭你有一個qryStudents.Edit,我已經改變它爲qryStudents.Close,因爲當你改變它的SQL屬性時你的查詢應該被關閉。 –

+0

是的,它是一個有效的表名。在處理此片段之前,我確實關閉了qryStudents.Edit。我在標題中得到了一個語法錯誤,它打破了我的程序 –