Q&A

  • 쿼리문 델파이소스에 삽입할때...
쿼리문 SQL을 사용할때

예를 들어
  
  select * from MASTERM
  where pid='001'

이걸 델파이 소스에 사용하면 아래와 같이 됩니다.
물론 PID값은 입력 받아서 사용되지만....
  
   dm.master_q.sql.Add('select * from "MASTERM"');
   dm.master_q.sql.Add('where (PID=' + ''''+Edit1.Text+''''+')');


제가 궁금하고 헷갈리는건  +연산자와 뒤에 '''' 이걸 네게씩 쓰는 정확한 문법적 이유를
몰라서 간혹 어려운 쿼리문을 삽입할때는 굉장히 헷갈리네요 애러나고 책에도 정확히 설명
이 안나오고 ..  간단한 것에서 막히니까 좀 그러네요 부탁드립니다
확실한 설명좀 해주세요
6  COMMENTS
  • Profile
    박면구 2006.03.23 00:04
    오라클, mysql, msSql 등등 의 경우

    파라메터를 이용하여 사용하는 것이 프로그램이 도움이 됩니다.
    dm.master_q.close;
    dm.master_q.sql.clear;
    dm.master_q.sql.Add( '  select * from MASTERM    '
                                     + '     where pid   = :pid         ');
    dm.master_q.ParamByName('pid').asString := '001'
    or
    dm.master_q.ParamByName('pid').asString := edit1.text

    위 방식으로 하면 '를 여러번 사용하지 않아도 됩니다.



  • Profile
    방극선 2006.03.22 21:01



    . 델파이는 파스칼 이라 string 을 구별하는데 ' ' 를 사용합니다.
    . 즉 'sss ddd  ffff' 이게 한 문장이며  'sss "ddd" ffff' 이렇게 쓰면  ' 부터 ' 까지 전부를
    . 문장으로 해석 합니다.
    . 그런데 사용하는 db에서 테이블 이름 등을 "Master" 이렇게 써야 할 경우 '  ' 안에 "..."을
    .넣어 주는 것입니다.

    . 'where (PID=' + ''''+Edit1.Text+''''+')') 이 부분은 바람직 하지 않으며 파라미터로 바꾸어서
    . 사용해야 에러가 적습니다.
    . 'where PID = :P_ID';
    .  QueryName.ParamByName('P_ID').AsString := Edit1.Text;

    . 좋은 하루 되세요...

  • Profile
    송유철 2006.03.22 20:54


    select * from MASTERM
      where pid='001'

    이걸 쓰신다면
    dm.master_q.sql.Add('select * from MASTERM');
    dm.master_q.sql.Add('where PID= ' + ''''+Edit1.Text+'''' ');

    -> where PID= (1번째 문장)
         '(2번째 문장)
         Edit1.Text(3번째 문장)
         '(4번째 문장)
        
    혹은

    dm.master_q.sql.Add('select * from MASTERM');
    dm.master_q.sql.Add('where PID= '''+Edit1.Text+'''');

    -> where PID= '(1번째 문장)
         Edit1.Text(2번째 문장)
         '(3번째 문장)
        
    이렇게 되겠죠

    여기서 '가 여러개가 들어가는 이유는 스트링 형으로 쓰일라면 ' ' 로 서로 묶여야 하는데요
    ' ' 사이에 실제로 ' 를 쓰기 위해서 '를 두번('') 쓰는겁니다.
    .Add('                    '); 이건 기본적인 형태고요
    이안에 실제로 ' 를 쓰실려면 '' 를 넣어서 쓰시면 되겠죠
    .Add('    ''              ');
    그럼 결과 값은 ' 하나만 나오게 되는거죠.
    대충 이해는 가시리라 보네요.
  • Profile
    남상훈 2006.03.22 22:28


    정말 감사합니다. 머리에 쏙 들어오는 설명이었습니다.
    한가지만 더 물어보겠습니다.

    select * from fixm
    where fcontents like '%n'

    위의 쿼리문은 어떻게 삽입하나요..?
    제가 한것은
    dm.dfix_q.sql.Add('select * from "FIXM"');
    dm.dfix_q.sql.Add('where PID like'+''+ '%'+edit10.text+'');

    이렇게 하니까 컴파일오류는 않나는데..실행시 잘못되었다고 오류나네요..
    쿼리자체는 틀린것이 아니고요 실행 해본거니까..근데 델파이소스에 삽입시
    잘못된거 같은데 이유를 모르겠습니다.
    한번더 부탁드리겠습니다..감사합니다.






  • Profile
    박지용 2006.03.24 07:35


    ==========================================
    질문의 핵심은 '' 묶을 때 좀 더낳은 방법을 찾는 것 같습니다(?^^)

    이렇게 해심이~~~

    sql.add('select * from fixm');
    sql.add('where fcontents like ' + QuotedStr('%s'));
                                                      >-----------------------< 이부분^^



  • Profile
    송유철 2006.03.23 01:16


    다른 분들 말들 처럼 파라미터값을 사용하는것도 한 방법인데요 일단은 적어 놓으신걸
    기준으로 설명 드렸고요

    select * from fixm
    where fcontents like '%n'

    dm.dfix_q.sql.Add('select * from "FIXM"');
    dm.dfix_q.sql.Add('where PID like'+''+ '%'+edit10.text+'');

    바꾸 시고자 하신다면

         dm.dfix_q.sql.Add('select * from "FIXM"');  //<--- 요부분 '' 두개 쓰신 이유가 먼지??
         FIXM 이 테이블 명이시라면
    -> dm.dfix_q.sql.Add('select * from FIXM');  이게 맞을듯한데.. ^^;;

         dm.dfix_q.sql.Add('where PID like'+''+ '%'+edit10.text+'');
    -> dm.dfix_q.sql.Add('where PID like ''%'+edit10.text+'''');
    or
         dm.dfix_q.sql.Add('where PID like '+''''+'%'+edit10.text+'''');
    일케 쓰시면 될듯 하네요
    그리고 제가 쓴거에서 '' 는 쌍따옴표가 아니고 홑따옴표 2개 랍니다.
    • 박성준
    • 2006.03.28 10:24
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 이영화
      2006.03.29 18:50
      Genetic Algorithm이라면 영어실력 혹은 능력과는 전혀 무관합니당.(^^) 우선 다른 기초자료부터 조금(...
    • 박성준
      2006.03.30 19:18
      우선 답변 주셔서 감사드립니다... 전 대학원 생입니다. 교수님께서 공부할겸 해석해보라고 하셔서 계...
    • KDDG_Han
      2006.03.29 19:54
      잠깐 열어봤는데, 도와줄 수 있는 분이 아마 거의 없지 않을까 싶네요. 신경망, 유전자 알고리즘, 미니맥...
    • 박성준
      2006.03.30 19:20
      교수님께서 논문의 내용중 한쪽만 해석해보라고 해서... 몇일 못했더니 해석이 오래걸리냐고... 전 제...
    • 이영화
      2006.03.30 22:47
      OR쪽 전공이신가 보군요. 읽을만한 논문이란게 있고 레퍼런스에 제목만 올려 놓아야할 논문이 있다면.. ...
    • 석주현
      2006.03.29 00:55
      코드를 보니 왠지 DVR 냄새가 많이 나는군요. DVR 코드 특성상 Frame Buffer의 포인터를 넘기는 경우가 ...
    • 탁선호
      2006.03.29 01:55
      예, DVR 보드를 이용한 어플입니다..^^ 그런데 소나기님 FrameBuffer을 읽어서 한점씩 그린다고 하셨는...
    • 박상윤
      2006.03.30 01:43
      일단 들어오는 비트 맵의 구조를 알아야 합니다. 비트 수에 따라 틀리져.. 그리구. RaW파일인지.. 헤더 ...
    • 이영화
      2006.03.28 20:11
      우선 소켓 해제 하는 부분에 WHILE TRUE 하나 넣어보세요. 소켓이라는게 끊어라 그런다고 무조건 넵 그...
    • 임상돈
      2006.03.29 03:06
      서버에서 writebuffer 쪽에서 에러나서   cancelwritebuffer 도 에러가나는현상이 있습니다. 10...
    • 이영화
      2006.03.29 18:41
      "인볼케이션에러" 이 용어 생전 첨봅니다(ㅠㅠ) 원래 용어로 좀 알켜 주세요. 그리고, 10053, 10054는 구...
    • 황당한초보
      2006.09.07 14:20
      해보진 않았지만, usb 인지에 관한 답변이 있어 연결해드립니다.. http://www.delmadang.com/cwb-bin/Cr...
    • 김범진
    • 2006.03.27 12:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2006.03.27 22:20
      안녕하세요. 최용일입니다. 도움말의 "Real types"부분을 보시면 Single은 7~8, Double은 15~16으로 유...
    • 111
    • 2006.03.25 21:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 정경철
    • 2006.03.25 03:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하나로
      2006.03.26 11:36
      해당 연주하고자 하는 파일이 Error.Wav 일경우 <!--CodeS--> PlaySound('c:\SAMPLE\Error....
    • 김종곤
    • 2006.03.24 20:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2006.03.24 22:33
      안녕하세요. 최용일입니다. 음... 뭔가 다른 작업과 연관되어서 에러가 발생하는것 같은데요... Inva...
    • 최용일
      2006.03.24 22:31
      안녕하세요. 최용일입니다. 쓰레드하나 만들어서 그곳에서 클라이언트소켓에서 읽는 작업을 하시면 됩니...
    • 희아빠
      2006.04.07 22:03
      감사합니다..... 답변을 보고도 이제야 감사의 글을 드리내요 ^^ 관심에 감사드립니다,
    • 표경만
      2006.03.31 21:53
      이 문장은 FULL JOIN 을 사용한 방법입니다. 참고하세요 select isnull(a.일자, b.일자) as 일자, 매출...
    • 이상대
      2006.03.24 18:06
      select 일자,sum(매출액),sum(수금액),sum(매입액),sum(결제액)  from ( select 일자,매출액,...
    • 최용일
      2006.03.24 22:47
      안녕하세요. 최용일입니다. 기본적인 구조는 TDlgTemplate구조체와 TDlgItemTemplate구조체의 배열로 되...
    • 강경수
      2006.03.29 01:11
      제가 사용하는 방법에서 질문한 내용으로 변경해 적어봅니다. 도움이 되면 좋겠네요... procedure TFor...
    • 김홍철
      2006.03.24 03:32
      전에 프로그램 하나 만들면서 짯던 부분이 있는데, 같은 기능을 할거같네요.... 참조하세여.... <!...
    • 최용일
      2006.03.24 22:30
      안녕하세요. 최용일입니다. FindFirst/FindNext/FindClose함수를 이용해서 ShellTreeView에서 선택된 폴...
    • 하태희
      2006.03.25 02:27
      20개의 개체를 만들면서 Query1.FieldByName('name').AsString 을 개체명에 부여하는 것으로 하여야 할것...
    • 나그네
      2006.03.24 23:08
      m_name 이라는 Label 컴포넌트의 캡션을 바꾸려고 하는건가요? m_name.Caption := Query1.FieldByName('...
    • 송유철
      2006.03.23 23:42
      m_name 자체는 라벨 이름일텐데 넣는거 자체가 좀 말이 안되는거구요 어떤식을 원하는건지요?? 라벨 ...
    • 이승근
      2006.03.24 16:30
      질문이 좀 모자란듯 싶네요...^^;; 그러니깐 일종의 명세서 폼에 기입되는 QRLabel이 약 20여개 됩니다......
    • 착한천사
      2006.03.26 02:01
      착한천사 김경록입니다. 음.. 답변을 쓰신것도 조금 이해가 안되는군요.. 제가 보기엔 DB에 저장된 ...
    • 주재환
      2006.03.23 21:51
      먼저 왜 에러가 나는지 파악하셔야 할 것 같은데요... 데이터 문제 인 것 같은데...
    • 최용일
      2006.03.23 02:59
      안녕하세요. 최용일입니다 그 키는 문자열값이 아니라 문자열배열값이구요. 레지스트리 편집기로 열어보...
    • 남상훈
    • 2006.03.22 19:20
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 박면구
      2006.03.23 00:04
      오라클, mysql, msSql 등등 의 경우 파라메터를 이용하여 사용하는 것이 프로그램이 도움이 됩니다. d...
    • 방극선
      2006.03.22 21:01
      . 델파이는 파스칼 이라 string 을 구별하는데 ' ' 를 사용합니다. . 즉 'sss ddd  ffff'...
    • 송유철
      2006.03.22 20:54
      select * from MASTERM   where pid='001' 이걸 쓰신다면 dm.master_q.sql.Add('sele...
    • 남상훈
      2006.03.22 22:28
      정말 감사합니다. 머리에 쏙 들어오는 설명이었습니다. 한가지만 더 물어보겠습니다. select * fro...
    • 박지용
      2006.03.24 07:35
      ========================================== 질문의 핵심은 '' 묶을 때 좀 더낳은 방법을 찾는 것 같...
    • 송유철
      2006.03.23 01:16
      다른 분들 말들 처럼 파라미터값을 사용하는것도 한 방법인데요 일단은 적어 놓으신걸 기준으로 설명 ...