2014-06-21 2 views
0

IT를위한 또 다른 작업. 질문은 :.MDB에서 제목 검색

btnSearch : 사용자는 책 제목을 입력하여 책을 검색 할 수 있어야합니다. 입력 상자를 사용하여 사용자로부터 제목을 가져옵니다. 제목과 ISBN 번호를 표시하십시오.

나는 각각 여러 개의 열이있는 여러 개의 테이블이있는 데이터베이스를 가지고 있습니다. 책 제목은 tblBooks 테이블에 있습니다.

는 다음 순간에 내 델파이 코드입니다 : 메시지와 함께 예외 클래스 EOLeException을 제기 question1

프로젝트는 프로세스가 중지 '매개 변수 Karoonag에는 기본값이 없습니다'

procedure TfrmLibrary.btnSearchClick(Sender: TObject); 
var 
    sBookName : String; 
begin 
    sBookName := InputBox('Enter book Name','','') ; 
    qryLibrary.Active := False; 
    qryLibrary.SQL.Text := 'SELECT * FROM tblBooks WHERE TITLE = ' + sBookName + ' ;'; 
    qryLibrary.Active := True; 

그 말하는 나에게 오류를 제공

아, 'Karoonag'는 책 제목입니다. 제게 손을주세요. D :

+1

사람들은 왜 생성 된 SQL-Query-String을 메모에 쓰거나 복사하여 붙여 넣거나 DB-System에서 직접 쿼리 문자열을 테스트하는지 궁금합니다. 쿼리 문자열을 메모에 넣기가 너무 어려울 수도 있습니다.'Memo1.Lines : = Qry.SQL; ' –

답변

0

좋아, 내가 잘못한 것을 발견했다.

SQL 텍스트를 수행 할 때 책의 인용 부호가 누락되었습니다. Heres 지금 내 코드 :

procedure TfrmLibrary.btnSearchClick(Sender: TObject); 
var 
    sBookName : String; 
begin 
    sBookName := InputBox('Enter book Name','','') ; 
    qryLibrary.Active := False; 
    qryLibrary.SQL.Text := 'SELECT * FROM tblBooks WHERE TITLE = "' + sBookName + '" ;'; //<--- "" 
    qryLibrary.Active := True; 
+2

이것은 서브 파 솔루션입니다. 책 제목에 하나 이상의 따옴표가 포함될 때 어떤 일이 일어나는지 생각해보십시오. 그러면 SQL은 어떻게 생겼을까요? 악의적 인 사용자 나 악의적 인 사용자가이를 이용하면 * SQL injection *이라고합니다. 매개 변수화 된 * 쿼리를 사용하여 피하십시오. (기울임 꼴은 찾아 보거나 수업 시간에 강사에게 질문하는 용어입니다.) –

+3

Rob과 동의하십시오. 매개 변수가있는 쿼리를 사용하는 예는 [이 대답] (http://stackoverflow.com/a/22482437)을 참조하십시오. INSERT에 사용하는 방법을 보여 주지만 개념은 SELECT 또는 UPDATE SQL 문과 동일합니다. 문자열 자체를 대신 연결하려고한다면 최소한 QuotedStr 함수를 사용하십시오. 내장 된 따옴표를 제대로 벗어날 것입니다. –

관련 문제