2016-11-22 12 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 (두 번째 코드 예)로 변환하십시오. 아직 알아낼 ​​수 없으며 0123에서 WHERE을 사용하는 방법에 대한 Google의 예를 찾을 수없는 것 같습니다.. 저는 매개 변수 사용법이 상당히 새롭습니다.

내가 Params.ParamsByName('id') 후 작성해야 - ID를 얻으려면?

서버 MYSQL입니다. 내가 무엇을두면 내가 코멘트에서 알려주나요 내가 미리

감사를 편집합니다!

+0

에 의해 매개 변수를 하나씩 결합 왜 당신이 매개 변수를 추가하기 위해 SQL을 유효하지 않은 유효한 SQL을 사용 변경할 수 있습니다 생각? 두 번째 예제는 매개 변수의 유무에 관계없이 전혀 유효하지 않습니다. –

+0

@KenWhite 아마도 당신이 분명히 한 일을 포착하지 않았기 때문에, 그리고 아직 어디에서 테스트를하지 않았는지 아직 추가하지 못했기 때문일 것입니다. 그것으로는 무엇이 유효하지 않습니까? – Petzy

+0

두 번째 예에서는 UPDATE의 전체 구문이 잘못되었습니다. 먼저 SQL 문을보고 두 번째 매개 변수없이 비교하십시오. (실제로, 코드에서 그것을 복사하여 메모장에 붙여 넣고'SQL.Add (''와 닫는' ');을 제거하고 읽습니다. 완전히 다르며 완전히 무효입니다. 매개 변수화 된 문, 그것은 SQL의 전체 구문을 변경하지 않습니다 당신은 여전히 ​​구문 적으로 유효한 SQL 문을 작성해야합니다,.. 그냥 길을 따라 새로운 언어를 만들어에 도착하지 않는 –

답변

2

당신이 바인딩 매개 변수 문자열 연결로 전환하기로 결정했습니다하지만 당신이 UPDATE 구문을 변경할 수 있습니다 의미하지 않는다 매우 좋다. 당신은 아직도 그

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

documented syntax에 구속되는이 거의 첫 번째 쿼리와 같은 구문 대신 문자열 연결 당신은 위치에 홀더를 사용합니다. 그리고 당신은 하나의

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

안녕하세요. 답변 해 주셔서 감사합니다! 이걸 정확히 이해하는 데 약간의 어려움이 있습니다. 즉, 매개 변수 라인을 버리고 전화를 걸면 사용할 수 있습니까?또한 예제를 링크 한 페이지에서 예제가 제공하지 않는 몇 가지 사항을 나열합니다 (예 : [및 일부 및 공백 없음]). 그게 혼란스러운 부분 인 것 같아요. 내 특정 코드가 어떻게 생겼는지에 대한 완전한 예제를 작성하는 마음? 일단 내가 모든 것을 본다면 더 잘 이해할 것입니다 – Petzy

+0

업데이트를 참조하십시오. 장소 소유자가 의미하는 것 : 클라이언트, 귀하의 검색어에 이미있는 전화 번호 등입니다. 그러나 당신이 당신의 올바른 구문 론적 부정확을 만들었다는 것에 주목하십시오. 그것은 제 대답에서 지적한 것입니다. – e4c5

+0

아, 알겠습니다. 그냥 SQL W3 학교를 확인하고 차이점을 발견, 다음은 올바른 것 같습니다, 당신은 제발 확인할 수 있습니까? 세부 사항 = 특별, 가격 = : 가격, 주소 = : 주소, 기한 = 고객, 전화 번호 = : 전화, 이메일 = : 전자 메일, 세부 정보 = : 세부 사항 = : deadline, status = : status WHERE id = : id ');''그렇다면, 필자는 원래의 질문의 일부인 ID에 대한 매개 변수 라인을 추가해야한다고 생각한다. 그걸 전혀 알지 못해. (정확한 두 번째 코드 예제에서도 똑같은 이유 때문에 누락되었습니다.) – Petzy