2016-11-22 118 views
1

我有以下幾點:如何使用WHERE在SQL ID參數

somequery.SQL.Add('UPDATE `someDBname`.`someTABLEname` SET 

`client`='''+someForm.Edit1.Text+''', 
`phone`='''+someForm.Edit2.Text+''', 
`email`='''+someForm.Edit3.Text+''', 
`details`='''+someForm.Edit4.Text+''', 
`specials`='''+someForm.Edit5.Text+''', 
`price`='''+someForm.Edit6.Text+''', 
`address`='''+someForm.Edit7.Text+''', 
`deadline`='''+someForm.DateTimePicker1.DateTime+''', 
`status`='''+someForm.Edit9.Text+''' 

WHERE `id`=''' + inttostr(someDataSetid.Value) + ''';'); 

而且我想切換到使用parameters,像這樣:

someQuery.SQL.Clear; 
someQuery.SQL.Add('UPDATE `someDBname`.`someTABLEname` (client, phone, email, details, specials, price, address, deadline, status) values (:client, :phone, :email, :details, :specials, :price, :address, :deadline, :status) ') ; 
someQuery.Params.ParamByName('client').AsString := someForm.Edit1.Text ; 
someQuery.Params.ParamByName('telefon').AsString := someForm.Edit2.Text ; 
someQuery.Params.ParamByName('email').AsString := someForm.Edit3.Text ; 
someQuery.Params.ParamByName('detalii').AsString := someForm.Edit4.Text ; 
someQuery.Params.ParamByName('mentiuni').AsString := someForm.Edit5.Text ; 
someQuery.Params.ParamByName('pret').AsString := someForm.Edit6.Text ; 
someQuery.Params.ParamByName('livrare').AsString := someForm.Edit7.Text ; 
someQuery.Params.ParamByName('deadline').AsDateTime := someForm.DateTimePicker1.DateTime ; 
someQuery.Params.ParamByName('status').AsString := someForm.Edit9.Text ; 
someQuery.ExecSQL(true); 

我不知道如何將包含ID(第一個代碼示例)的WHERE子句轉換爲parameters(第二個代碼示例) 還沒弄清楚,我似乎無法在google上找到關於如何在0123中使用WHERE的示例。 我很使用參數。

我應該在Params.ParamsByName('id')後寫什麼 - 獲取ID?

服務器是MYSQL。 請在評論中告訴我如果我遺漏了任何東西,我會編輯

在此先感謝!

+0

爲什麼你認爲你可以改變從使用有效的SQL到無效的SQL爲了添加參數?你的第二個例子根本無效,有或沒有參數。 –

+0

@KenWhite可能是因爲我沒有抓住你顯然做過的事情,而且我還沒有添加到哪裏,我還沒有測試過任何東西。什麼不適用於它? – Petzy

+0

UPDATE的整個語法在你的第二個例子中是錯誤的。首先查看SQL語句,然後在第二行中比較它(不帶參數)。 (實際上,只是將它複製出代碼,將其粘貼到記事本中,然後刪除'SQL.Add('和關閉'');'並讀取它,這完全不同,並且完全無效。語句,它不會改變SQL的整個語法,但你仍然必須編寫語法上有效的SQL語句;你不會只是編寫一種新的語言。 –

回答

2

這是非常好的,你已經決定從字符串連接切換到參數綁定,但這並不意味着你可以改變UPDATE語法。你還在用documented syntax

'UPDATE `someDBname`.`someTABLEname` SET client=:client, phone=:phone, email=:email, details=:details, specials=:specials, price=:price, address=:address, deadline=:deadline, status=:status WHERE id=:id'; 

約束這是幾乎相同的語法在第一個查詢但不是字符串連接使用的佔位符。然後你逐個綁定參數

someQuery.Params.ParamByName('client').AsString := someForm.Edit1.Text ; 
someQuery.Params.ParamByName('telefon').AsString := someForm.Edit2.Text ; 
+0

嗨,謝謝你的回答!我很難理解這一點。這意味着我必須放棄參數線,並使用您所稱的佔位符?此外,在頁面上,您鏈接的示例列出了您的示例沒有的幾件事情(如[和一些,沒有空格]。我猜這是令人困惑的部分。介紹一下我的特定代碼應該是什麼樣子的完整示例?一旦我看到整個事情,我會更好地理解它 – Petzy

+0

請參閱更新。什麼是佔位符的含義是:客戶端,:電話等你已經在你的查詢。但是請注意,你已經在正確的語法上做了錯誤,這正是我在我的回答中指出的 – e4c5

+0

哦,我明白了。剛剛檢查了sql w3學校,並注意到了差異,下面看起來是正確的,那麼請你確認一下嗎? ''('UPDATE'someDBname'.'someTABLEname' SET client =:client,phone =:phone,email =:email,details =:details,specials =:specials,price =:price,address =:address,deadline = :deadline,status =:status WHERE id =:id');''如果是這樣,我假設我需要添加的是ID的參數行,這是我的原始問題的一部分,因爲我可以看到它的外觀根本沒有數據。 (這也是我的第二個代碼示例中缺少的,出於完全相同的原因) – Petzy