2016-11-22 2 views
1

У меня есть следующие:Как использовать WHERE ID в SQL Параметры

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); 

Я не имею понятия, как для преобразования предложения WHERE, содержащего ID (пример 1-го примера) в parameters (пример второго кода) Пока не удалось выяснить это, и я не могу найти пример в Google о том, как использовать WHERE в parameters. Я довольно новичок в использовании параметров.

Что следует написать после Params.ParamsByName('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'.theomeTABLEname' SET client =: client, phone =: phone, email =: email, details =: details, specials =: specials, price =: price, address =: address, deadline = : deadline, status =: status WHERE id =: id '); '' Если это так, я предполагаю, что все, что мне нужно добавить, это строка параметров для идентификатора, которая является частью моего первоначального вопроса, как это должно выглядеть, поскольку я могу Нет. (Это также отсутствует в моем втором примере кода по той же причине) – Petzy