Q&A

  • [요청]Query컴포넌트의 params 속성의 의미 좀
안녕하세요.. 델파이를 배우고 있는 회사원입니다.

제가 물어볼 것은 DbAccess/query컴포넌트의 Params속성에 대해서 자세하게

알고 싶습니다. 아무리 델파이 책을 찾아봐도 제가 이해할 수 있을 만큼

자세하게 나와 있지 않아서요..

꼭 부탁드립니다.

2  COMMENTS
  • Profile
    백승환 1999.06.11 08:28
    최선기 께서 말씀하시기를...

    > 안녕하세요.. 델파이를 배우고 있는 회사원입니다.

    > 제가 물어볼 것은 DbAccess/query컴포넌트의 Params속성에 대해서 자세하게

    > 알고 싶습니다. 아무리 델파이 책을 찾아봐도 제가 이해할 수 있을 만큼

    > 자세하게 나와 있지 않아서요..

    > 꼭 부탁드립니다.



    도움이 되실지...



    제가 아직 초보이므로 제가 알고, 이해한 데로만 설명을 드릴께요...



    보통 Query는 실행중에 인자들(Parameters)을 사용자로 부터 받아들여서



    자료를 (조건)검색,추가,수정,삭제를 위해서 사용하는 기본적인 컴포넌트지요.



    따라서 인자(Parameter)를 어떻게 SQL문에 전달해서 사용하느냐가 기본입니다.



    제가 자판기설치 프로그램을 하나 짠다고 하구요. 자판기를 어느 건물에 설치



    했는가를 확인하는 작업을 해보면요.



    일단 테이블(DBF)인 CAN 은 자판기번호(CANID),건물명(GMNAME) 로 되어있구요.



    자판기번호(CANID : Integer), 건물명(GMNAME : String) 입니다.



    사용자에게 자판기번호(CANID)를 받아서 설치된 건물명을 찾으려는 거지요.



    Query.Name 은 Query1 이구요.



    Query1.SQL 은 아래와 같습니다.



    select GMNAME

    from CAN

    where CANID=:CANID (넘 쉽군요.^..^) 뒷쪽의 :CANID가 인자입니다.



    여기서 우리는 CANID를 ParamByName 이라는 프로시져(Procedure)를 사용해서



    Query1.ParamByName('CANID').Value := StrToInt(MaskEdit1.Text);



    요렇게 인자(Parameter)를 전달하는 거죠.



    자. 이제 설명을 하는데요... Query가 SQL 을 실행할때 데이터형(Data Type)을



    정해주지 않으면 묵인된 에러를 발생시키게 되거든요. 프로그래밍의 가장 기본



    은 데이터(자료)니까요. 데이터형을 정확히 정해주지 않으면 안되거든요.



    특히 SQL문으로 자료를 동적으로 찾아오는 Query에서는 아주 중요한 것이지요.



    에구~~ 아는게 없느니 설명이 너무 빈약하네요....











  • Profile
    박성훈 1999.06.11 01:36
    최선기 께서 말씀하시기를...

    > 안녕하세요.. 델파이를 배우고 있는 회사원입니다.

    > 제가 물어볼 것은 DbAccess/query컴포넌트의 Params속성에 대해서 자세하게

    > 알고 싶습니다. 아무리 델파이 책을 찾아봐도 제가 이해할 수 있을 만큼

    > 자세하게 나와 있지 않아서요..

    > 꼭 부탁드립니다.



    아래 프로시져를 보죠.

    procedure Button1Click(Sender: TObject);

    begin

    with Query1 do begin

    Close;

    sql.Clear;

    sql.Add('SELECT * FROM "Customer.db"');

    sql.Add(' WHERE Name=:MyName');

    parambyname('MyName').AsString:=edit1.text;

    Open;

    end;

    end;



    이런 구문이 있다고 하면,



    다른 방식으로는

    sql.Add(' WHERE Name=''' + edit1.text + '''');

    와 같이 폼에 입력박스를 놓고 입력박스에 내용과 고객테이블의 이름을 비교할 수 있겠죠?

    여기서 ''' + edit1.text + ''''와 같이 쓸 때는 덜 복잡하지만 여러 컴포넌트에 있는 값을 받아 온다고 하면 복잡해 지겠죠.

    그러나 param속성을 쓰면 비교문자('')를 쓰지 않고 sql문안에 집어 넣을 수 있으므로 읽거나 쓰기가 쉬워집니다.

    where절에 들어간 MyName은 sql문에 들어갈 변수가 되는 것이고 바로 밑의 문장은 param속성을 써서(table컴포넌트의 fieldbyname과 같은 식으로) where절에서 집어넣은 param변수에 들어올 값을 집어 넣어주는 겁니다. 형식은



    query1.parambyname('파람변수이름').As데이터형 := 값;



    와 같이 씁니다. 주의 하실것은 예를 든 고객테이블의 고객명의 필드타입이 String이라고 하면 As데이터형은 고객명필드의 데이터타입과 같이 AsString이라고 써줘야 합니다. 그리고 값도 똑같은 데이터형이어야만 합니다.



    혹 시간이 되시면 DateTimePicker컴포넌트를 두개 폼에 얹어 놓고(하나는 시작일, 하나는 종료일에 해당함.) 기간이 들어 있는 테이블에서(기간의 타입은 Date형) 기간별 검색을 해보세요. where between Adate And Bdate구문을 쓰셔서요. 그냥 컴포넌트에서 직접값을 받아서 말이죠. datetimepicker의 값은 date라는 속성에서 받아오시면 되구요.



    제 경험상 param속성을 안쓰시면 이상하게도 테이블의 날짜와 Datetimepicker의 데이터형이 다르다는 에러가 뜰겁니다. 에러가 나신다면 param속성을 써보세요.

    이해가 가셨는지. 두서가 없어서...

    • 이호선
      1999.06.11 04:48
      안녕하세요 저는 Access DB를 사용하여 프로그램을 합니다. 그런데 setup 화일을 만들려하는데 ODBC에 등...
    • 안치봉
      1999.03.12 03:47
      이대선 wrote: > 후킹 콤퍼넌트 진짜 잘 만드셨고 요긴하게 잘 쓰고 있습니다. > > 현재 ...
    • 한상훈
    • 1999.06.11 04:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.11 21:00
      한상훈 께서 말씀하시기를... > data를 검색하는데 where 절의 조건을 edit.text에 입력한 값들을 > and...
    • 1999.03.12 03:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.03.12 03:43
      한 wrote: > 제목 되로 아래한글과 MSWORD의 클래스 이름을 알아내는 방법을 알고 싶습니다. > > 감기 ...
    • 1999.03.12 03:17
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 황익순
      1999.06.11 02:28
      제발 답변좀 해주세요... 스트링그리드에서 지원하는건 연속적인 데이타에 대해서만 다중선택(Multi Sel...
    • 안치봉
      1999.03.12 03:43
      한 wrote: > 제목 되로 아래한글과 MSWORD의 클래스 이름을 알아내는 방법을 알고 싶습니다. > > 감기 ...
    • 구창민
      1999.06.11 20:54
      황익순 께서 말씀하시기를... > 제발 답변좀 해주세요... > > 스트링그리드에서 지원하는건 연속적인 ...
    • 이상석
    • 1999.06.11 02:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 공대규
      1999.06.11 02:50
      델파이로 프로그래밍하다 보면 맨날 만나는 에러 메시지입니다. 한마디로 메모리 접근시 문제가 생기면 대...
    • 이창석
    • 1999.03.08 00:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.03.10 03:12
      이창석 wrote: > 반갑습니다. > 아침에 봄비가 조금 내리더니, 지금은 그쳤네요. > 몇일째 풀리지 않는...
    • 이창석
      1999.03.12 00:33
      안치봉 wrote: > 이창석 wrote: > > 반갑습니다. > > 아침에 봄비가 조금 내리더니, 지금은 그쳤네요. ...
    • 신인재
      1999.03.12 04:33
      > procedure TForm1.Button1Click(Sender: TObject); > var > i,y:integer; > begin > if opendialo...
    • 박성훈
    • 1999.06.11 02:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 백승환
      1999.06.11 06:18
      박성훈 께서 말씀하시기를... > 식당주문관련 프로그램을 만들고 있는데요. > > 판매테이블:판매코드, ...
    • 안치봉
      1999.03.12 03:47
      이대선 wrote: > 후킹 콤퍼넌트 진짜 잘 만드셨고 요긴하게 잘 쓰고 있습니다. > > 현재 ...
    • 박성훈
    • 1999.06.11 01:45
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 백승환
      1999.06.11 06:24
      박성훈 께서 말씀하시기를... > 레이블을 클릭하면 dbgrid에 한줄만 선택되도록 하고 싶은데요. > rowsel...
    • [재질문]dbgrid에서
      1999.06.13 21:32
      백승환 께서 말씀하시기를... > 박성훈 께서 말씀하시기를... > > 레이블을 클릭하면 dbgrid에 한줄만 선...
    • 안치봉
      1999.03.10 04:15
      소스는 잘~ 받았습니다. 소스를 보니 약간은 잘못(?)된 부분이 있습니다(아래는 제가 수정한 겁니다). ...
    • 신인재
      1999.03.10 04:08
      원영준 wrote: > 안녕 하십니까 ! > 델파이 초보자로써 이런 곳을 보니 매우 기쁩니다. > 당분간은 ROM...
    • 안치봉
      1999.03.10 02:11
      원영준 wrote: > 안녕 하십니까 ! > 델파이 초보자로써 이런 곳을 보니 매우 기쁩니다. > 당분간은 ROM...
    • 최선기
    • 1999.06.10 23:03
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 백승환
      1999.06.11 08:28
      최선기 께서 말씀하시기를... > 안녕하세요.. 델파이를 배우고 있는 회사원입니다. > 제가 물어볼 것은 ...
    • 박성훈
      1999.06.11 01:36
      최선기 께서 말씀하시기를... > 안녕하세요.. 델파이를 배우고 있는 회사원입니다. > 제가 물어볼 것은 ...
    • 안치봉
      1999.03.10 04:15
      소스는 잘~ 받았습니다. 소스를 보니 약간은 잘못(?)된 부분이 있습니다(아래는 제가 수정한 겁니다). ...
    • 신인재
      1999.03.10 04:08
      원영준 wrote: > 안녕 하십니까 ! > 델파이 초보자로써 이런 곳을 보니 매우 기쁩니다. > 당분간은 ROM...
    • 안치봉
      1999.03.10 02:11
      원영준 wrote: > 안녕 하십니까 ! > 델파이 초보자로써 이런 곳을 보니 매우 기쁩니다. > 당분간은 ROM...
    • 수빈
    • 1999.06.10 22:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 공대규
      1999.06.11 02:26
      cayp.inf 파일의 내용을 한 번 올려 주실래요? 제가 한 번 볼께요... 수빈 께서 말씀하시기를... > Ac...
    • 이창석
    • 1999.03.08 00:11
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 왕초
      1999.06.10 22:30
      DLL를 디버깅하려고 합니다.. DLL 프로젝트를 어플리케이션에서 포함하여 breakpoint를 걸어서 하려고 ...
    • 안치봉
      1999.03.10 03:12
      이창석 wrote: > 반갑습니다. > 아침에 봄비가 조금 내리더니, 지금은 그쳤네요. > 몇일째 풀리지 않는...
    • 글쎄요
      1999.06.10 23:34
      왕초 께서 말씀하시기를... > DLL를 디버깅하려고 합니다.. > DLL 프로젝트를 어플리케이션에서 포함하여...
    • 이창석
      1999.03.12 00:33
      안치봉 wrote: > 이창석 wrote: > > 반갑습니다. > > 아침에 봄비가 조금 내리더니, 지금은 그쳤네요. ...
    • 신인재
      1999.03.12 04:33
      > procedure TForm1.Button1Click(Sender: TObject); > var > i,y:integer; > begin > if opendialo...
    • chobo
    • 1999.06.10 21:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 기련이
    • 1999.03.05 01:12
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.03.05 23:06
      기련이 wrote: > 저도 프로그램을 테스트 해 보았는데 문제가 생겼어요. > body의 내용이 정상적으로 나...
    • 기련이
      1999.03.06 02:33
      도와주셔서 정말 감사합니다. 제가 메일을 보낸 것은 OUTLOOK EXPRESS이고, 메일서버는 MS EXCHANGE서...
    • 안치봉
      1999.03.06 04:46
      기련이 wrote: > 도와주셔서 정말 감사합니다. > > 제가 메일을 보낸 것은 OUTLOOK EXPRESS이고, > ...
    • 기련이
      1999.03.10 02:30
      덕분에 문제를 해결하였습니다. Var InStr, OutStr: TStringStream; Begin InStr := TStringStr...
    • franco97
    • 1999.06.10 20:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.10 20:45
      franco97 께서 말씀하시기를... > RichEdit에서 입력을 하다가 Ctrl+Enter를 입력하면 아래칸으로 이동을 ...
    • powermac
    • 1999.06.10 19:31
    • 0 COMMENTS
    • /
    • 0 LIKES