Q&A

  • [re] [질문]스트링그리드 셀에 마우스클릭시 셀내용 읽어오기




>안녕하십니까? 전봉수 입니다.
>에너지관리 프로그램을 개발하고 있는과정에서 DB 테이블에서 공종코드를 축출하여 건수를 스트링그리드셀에 뿌려주는 작업인데요 건수를 추출하고나서 추출된 셀위에 마우스를 위치하고 클릭하면 작업(공종) 내용을 보려고합니다.
>예를들어 추출된 셀값이 5이면 작업(공종)내용도 5가지가 보여야 되겠죠?
>좌표와 셀값은 델마당 검색을 통하여 입수를 하였는데 셀 내용을 보여주는 루턴은 아무리 찿아봐도 없는것 같아서 질문을 드립니다. 꼭좀 부탁드립니다.

최용일님 답변 너무 감사합니다.
//QR_MiChJo.SQL.Text := '' ; 는 에러가 나서 제가 사용한 SQL문 MichJo_DATA(SENDER); 로 바꾸워 보았습니다. 제가 사용한 SQL문은 하단에 수록하였습니다 참고하십시요
이제는 셀에마우스로 클릭하면 셀값에대한 내용이 출력되는데요 그런데 셀값의 내용만 출력하여야하는데 모두출력됩니다. 면목이 없습니다만 밤샘하면서 여러가지 시도는 해봤지만 역시 부족한 실력은 어쩔수 없는모양입니다 마자막으로 한번만더 부탁드립니다.

procedure TMiChJoForm.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
var
  sText , sDBText: String;
  col, row : integer;
begin
  Col := StringGrid1.Col; // 행
  Row := StringGrid1.Row; // 열
  sText := StringGrid1.Cells[Col,Row];
  QR_MiChJo.Close;
  MichJo_DATA(SENDER); //<- SQL문
  //QR_MiChJo.SQL.Text := '' ; // sText를 이용해서 값을 가져오는 SQL문 <-포함시에러
  QR_MiChJo.Open;
  if not QR_MiChJo.EoF then
    begin
      while not QR_MiChJo.EoF do //then
        begin
          sDBText := sDBText + QR_MiChJo.FieldByName('Chnayo').AsString + #13#10;
          QR_MiChJo.Next;
        end;
          ShowMessage('StringGird의 정보: ('+IntToStr(Col)+','+IntToStr(Row)+') 값: ' + sText + #13#10 + ' DB정보: ' + #13#10 + sDBText);
    end
  else
    ShowMessage('매칭되는 DB값이 없습니다.');  

// SQL문
PROCEDURE TMiChJoForm.MiChJO_DATA(SENDER: TOBJECT);
BEGIN
  WITH QR_MiChJo DO
    BEGIN
    CLOSE;
    SQL.Clear;
    SQL.ADD('SELECT A.* , B.Mname, C.Yname, D.Hname, E.Sname '+
            ' FROM Jaryo A,Mich B,Yhng C,Chury D,Singo E '+
            ' Where '+
            ' A.Mcode = B.Mcode AND A.Ycode = C.Ycode AND '+
            ' A.Hcode = D.Hcode AND A.Scode = E.Scode '+
            ' And YulBul = "'+ED_YulBul.TEXT+'"');
    END;
End;
3  COMMENTS
  • Profile
    shininggem 2010.03.26 20:47
    소스를 보니 전부다 출력되도록 되어 있군요!

    쿼리문을 수정해야 겠군요!

    StringGrid1.Cells[10,12]의 값이 3이면 해당 쿼리의 조건절에 이값이 들어가야 할 것 같네요

    즉, 3에 해당되는 값들만 쿼리 결과값으로 가져와야 합니다.

    지금 쿼리문은 선택한 셀과 전혀 상관없이 YulBul 일치하는 값만 읽어오니 이부분 뒤에 하나가 더 추가 되어야 겠군요

    And YulBul = "'+ED_YulBul.TEXT+'"
    AND X = '''+sText+''' <== 여기서 X값은 3에 대응되는 필드 입니다.
  • Profile
    전봉수 2010.03.26 22:18
    shininggem 님 답변 고맙습니다.
    SText를 초기에 변수를결고 SQL함수에는 스트링그리드 셀에 숫자로카운트되는 Mcode 코드필드 로 변경하여 아래와갈이 코팅하여
    확인해보니 'ShowMessage메세지는 매칭되는 DB값이 없습니다 라고 나오네요 어디가 잘못되었는지 다시한번 봐주시면 고맙겠습니다.

    var
    MiChJoForm: TMiChJoForm;
    COUNT : INTEGER;
    // sText 변수
    sText: String;

    // SQL
    PROCEDURE TMiChJoForm.MiChJO1_DATA(SENDER: TOBJECT);
    BEGIN
    WITH QR_MiChJo DO
    BEGIN
    CLOSE;
    SQL.Clear;
    SQL.ADD('SELECT A.* , B.Mname, C.Yname, D.Hname, E.Sname '+
    ' FROM Jaryo A,Mich B,Yhng C,Chury D,Singo E '+
    ' Where '+
    ' A.Mcode = B.Mcode AND A.Ycode = C.Ycode AND '+
    ' A.Hcode = D.Hcode AND A.Scode = E.Scode '+
    //' And YulBul = "'+ED_YulBul.TEXT+'"' +
    ' AND Mcode = "'+sText+'"'); // <- Mcode는 스트링그리드 셀에 숫자로카운트되는 코드필드
    END;
    End;

    procedure TMiChJoForm.StringGrid1MouseDown(Sender: TObject;
    Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
    var
    sDBText: String;
    col, row : integer;
    begin
    Col := StringGrid1.Col; // 행
    Row := StringGrid1.Row; // 열
    sText := StringGrid1.Cells[Col,Row];
    QR_MiChJo.Close;
    MichJo1_DATA(SENDER); //<- SQL문
    //QR_MiChJo.SQL.Text := '' ; // sText를 이용해서 값을 가져오는 SQL문 <-포함시에러
    QR_MiChJo.Open;
    if not QR_MiChJo.EoF then
    begin
    while not QR_MiChJo.EoF do //then
    begin
    sDBText := sDBText + QR_MiChJo.FieldByName('Chnayo').AsString + #13#10;
    QR_MiChJo.Next;
    end;
    ShowMessage('StringGird의 정보: ('+IntToStr(Col)+','+IntToStr(Row)+') 값: ' + sText + #13#10 + ' DB정보: ' + #13#10 + sDBText);
    end
    else
    ShowMessage('매칭되는 DB값이 없습니다.');
  • Profile
    shininggem 2010.03.29 18:30
    음... 답변이 좀 늦었네요.
    벌써 해결 하셨을 듯...

    일단 확인을 좀 해보셔야 겠는데요.
    sText 값을 ShowMessage나 디버깅을 통해서 알아보시구요!

    실제 쿼리문으로 해당 조건에 일치하는 값이 있는지 확인해 보시기 바랍니다.
    프로그램으로 확인하지 마시고 database explorer에서 실제 값들을 넣어서 확인해 보세요.
    먼저 A테이블을 읽어서 결과값이 나오는지 확인해 보시구요, 다음 차례대로 하나씩 테이블 확인해 보시는게...

    위의 소스 대로라면 쿼리 결과값이 없기 때문에 '매칭되는 DB값이 없습니다' 하고 나오는것 같네요!

    join으로 인해서 값이 없을수도 있습니다.
    (어느 한테이블이라도 일치하는 데이타가 없다면 안나오겠네요- 일치하는 값이 없는 테이블은 out join을 해야됩니다.)
    해당 테이블들을 하나씩 확인해 보시구요, out join이 필요할 수 도 있겠네요!
    • 조유정
    • 2010.03.27 01:21
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.27 06:37
      델파이에서 기본적으로 제공되는 데모프로그램에 퀵리포트 예제가 있는 것으로 알고있습니다. 참고하시...
    • 김기영
      2010.04.16 19:26
      http://www.qusoft.com/WebInfoPage.aspx?WebInfoID=620 가셔서 QR3DEMST.ZIP 다운받으시면 될것 같네요..
    • 최용일
      2010.03.27 02:11
      콤보박스로 하기는 힘들듯한데요. 못한다는 것이 아니라 완전히 커스터마이징을 해야 되서 어렵다는 이야...
    • 땅콩맨
      2010.03.27 06:35
      http://www.delphi.co.kr/zboard/view.php?id=component&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&keyw...
    • 박성훈
      2010.03.28 23:33
      네. 최용일님 말씀처럼 Listbox 붙여서 처리를 했습니다. 코딩이 좀 들어가긴 했지만, 원하던 기능은 구...
    • 땅콩맨
      2010.03.27 06:26
      http://www.delphi.co.kr/zboard/view.php?id=component&no=557 참고해 보시기 바랍니다.
    • 정경철
    • 2010.03.26 08:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.28 10:05
      // 프린터 초기화 프로시저 procedure InitPrinter(const APort: word); assembler; begin asm mov...
    • 민경태
    • 2010.03.26 00:29
    • 2 COMMENTS
    • /
    • 0 LIKES
    • phono
      2010.03.26 02:35
      팁에 ShellExcute로 실행한 프로그램에 의해 열려진 모달 폼으로 제어를 옮기기 검색하시면 나와있습...
    • 땅콩맨
      2010.03.28 10:13
      자주 사용될 방법인것같네요. 숙지해두었다가 나중에 필요할때 사용해봐야겠어요...
    • 최용일
      2010.03.25 22:40
      델파이헬프의 아래 함수 예제를 보세요. FindFirst/FindNext/FindClose
    • 땅콩맨
      2010.03.26 10:29
      http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=17 위의 내용을...
    • 엄우학
      2010.03.26 20:06
      답변 감사합니다. 제가 아직 너무 초보적인듯 합니다. 도스명령어 실행시키는 방법을 문의 드렸던 것인...
    • 땅콩맨
      2010.03.27 06:07
      위에 제가 적은 커멘트를 참조하시면 구현이 가능할것입니다. (꼭 제가 해결한것마냥. ㅎㅎ → 오해하...
    • 박준영
    • 2010.03.25 06:09
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.25 15:40
      일시적인 버그가 아닐까요?
    • 박준영
      2010.03.26 03:05
      헉 확인해 보니 지금 폰트에 문제가 있는듯 합니다.. 베트남어 라서 Times New Roman 을 기본 폰트로 ...
    • 땅콩맨
      2010.03.26 09:30
      아... 그런 문제가... 폰트때문일줄이야......
    • 박준영
      2010.03.26 18:31
      ㅎㅎ 저도 전혀 생각을 못했던 부분이라.. 한참 고생했씁니다. 폰트에서도 문제가 생기는 군요.. 컴...
    • 땅콩맨
      2010.03.27 06:05
      친해지길 바래야겠군요. 쿨럭... 농담입니다..
    • 박준영
      2010.04.06 19:14
      폰트 크기 문제군요.. 제가 계속 테스트 해보니.. 되는 폰트도 있고 않되는 폰트도 있고.. 허참.. 폰트...
    • 땅콩맨
      2010.03.25 07:02
      menu가 아닌 다른컨트롤에서는 보여지는데 TMainmenu에서만 안보인다는거죠? 아무리 생각해도 이상하네...
    • 홍성락
      2010.03.25 20:43
      다국어 어플만들때 제가해본 경험으론 TMainmenu는 font가 없어서 깨지는거 같습니다. (유니코드를 지원...
    • 박준영
      2010.03.26 03:04
      답변 감사합니다.. 찾다 찾다 포기 하고 TMS MENU 로 넘어 갔습니다.. 에고.. 힘드네요. 쩝
    • 땅콩맨
      2010.03.26 09:51
      TMS Menu에서는 아무문제 없이 잘 동작되나요?
    • 박준영
      2010.03.26 18:22
      네 잘되는 군요... 베트남어가 이상한 건지... 중국어는 잘 되던 건데.. ㅎㅎ 어째든 또 회사는 돈이ㅣ ...
    • 땅콩맨
      2010.03.27 06:06
      좀더 연구해봐야될 필요가 있지 않을까요? 기왕이면 돈을 적게들이면서 효과를 보는방법으로요...
    • 박준영
      2010.04.06 19:13
      ㅎㅎ 제 돈도 아니고.. 뭐 이미 사버린거니 잘써야지요.. ^^
    • 정진일
    • 2010.03.25 02:17
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 정진일
      2010.03.25 02:20
      다시설명드리면요 특정변수값이 변경되었을때 오라클 트리거 처럼 어떤 처리가 처리되도록요 부탁드립...
    • 홍성락
      2010.03.25 03:44
      property 개념으로 하시면 됩니다. 구조체나 컴포넌트 만드는걸 참조해보세요. 선언시 property MyNa...
    • 땅콩맨
      2010.03.25 06:28
      AcroEdit를 제작하신 김성동님의 홈페이지에 가보시면 컴포넌트만들기 강좌가 있습니다. 참조하시면 도...
    • 정진일
      2010.03.25 20:36
      답변에 감사드립니다 Grp record mach : string; man : string ; - - end; ...
    • 땅콩맨
      2010.03.26 09:53
      컴포넌트 만들기강좌 링크를 한번 쭉 읽어보세요. 해답을 얻으실수 있을 것 입니다. 위에서 홍성락...
    • 홍성락
      2010.03.26 20:05
      GUI가 있는 컴포넌트나 없는 검포넌트 만들기를 참조하시라는거구요, 일반 구조체에서도 함수를 변수처럼...
    • 땅콩맨
      2010.03.27 06:10
      아 항상 성락님의 답변은 저에게 왜 이렇게 새로운거죠? ^^ 좀더 공부가 필요할 듯 싶습니다.
    • 얼씨구
    • 2010.03.24 02:35
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.24 08:31
      오라클 DB에 저장할때 오류가 나는건 아닐까요?
    • 주재환
      2010.03.24 18:52
      우선 커밋과 롤백은 저렇게 하는 것보다 try for i := 1 to 100 do begin SQLDB Data 불...
    • 홍성락
      2010.03.24 19:24
      위에서 Transaction이 아닌경우 Transaction을 시작해서 Commit이든 Rollback을 하게되어 Transaction을 ...
    • 땅콩맨
      2010.03.25 04:37
      명쾌한 홍성락님의 답변... 부럽슴다. ^^ ㅋㅋㅋ
    • 양진욱
      2010.03.25 19:24
      저 같은경우는 이렇게 합니다. 하나의 등록 프로그램에서 트랜젝션은 한 번 일어남으로... if Data...
    • 땅콩맨
      2010.03.26 09:52
      간결한 소스... 좋아요, 좋아... ㅋㅋㅋㅋ
    • 이승일
    • 2010.03.25 11:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • phono
      2010.03.28 21:58
      용지함 문제 는 비단 캐논 프린터에만 국한된 문제 아닙니다. hp 프린터건 여타의 프린터에서도 나타...
    • 제이엠
      2010.04.12 18:48
      저도 이 문제로 고민하고 있는데 해결 방법은 없을까요......
    • 델델
    • 2010.03.23 20:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2010.03.23 21:58
      메인메뉴의 RUN의 Parameters 메뉴를 실행해서 창의 값을 보세요 호스트프로그램의 경로를 다시 설정해보...
    • 땅콩맨
    • 2010.03.24 08:12
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.03.23 19:13
      헬프 좀만 찾아보시면 나올텐데요... Col := StringGrid1.Col; // 행 Row := StringGrid1.Row; // 열 ...
    • 전봉수
      2010.03.24 16:49
      최용일님 답변 감사하니다. 셀값을 읽는것은 이미 코팅이 되어있고요 DB 내용을 읽어서 내용을 표시해야...
    • 최용일
      2010.03.25 02:41
      DB내용을 읽어서 표시하는거는 TQuery나 TTable등을 이용해서 표시하면 되지 않나요? 셀값을 읽는 것은 ...
    • 전봉수
      2010.03.25 22:39
      최용일님 답변 감사합니다. 제가 설명이 좀 부족하였나봅니다. 현재 스링그리드는 DB를 검색해서 축출...
    • 최용일
      2010.03.26 01:57
      셀값(sText)을 이용해서 DB를 조회하고 그 값을 보여주시면 되는거 아닌가요? var sText , sDBTex...
    • 전봉수
    • 2010.03.26 11:52
    • 3 COMMENTS
    • /
    • 0 LIKES
    • shininggem
      2010.03.26 20:47
      소스를 보니 전부다 출력되도록 되어 있군요! 쿼리문을 수정해야 겠군요! StringGrid1.Cells[10,12...
    • 전봉수
      2010.03.26 22:18
      shininggem 님 답변 고맙습니다. SText를 초기에 변수를결고 SQL함수에는 스트링그리드 셀에 숫자로카운...
    • shininggem
      2010.03.29 18:30
      음... 답변이 좀 늦었네요. 벌써 해결 하셨을 듯... 일단 확인을 좀 해보셔야 겠는데요. sText 값을...
    • shininggem
      2010.03.31 21:02
      음... 일단 제가 이해한것은, "그리드에 DB값을 뿌려주고 특정셀을 클릭 했을때 그 셀의 값과 일치하는...
    • 전봉수
      2010.04.01 11:32
      shininggem님 너무나 자세한답변 정말 고맙습니다. 아래와같이 구성하여 코팅후 실행하여보니까 String...
    • 홍성락
      2010.03.23 01:57
      m_pSrc등의 형이나 소스가 일부라서 알아보긴 힘든데요. 마지막 인자중 dstLen1에 길이값을 넘겨줄 포인...
    • 헤메는별
      2010.03.23 01:59
      m_pSrc 의 형식은 Pbyte입니다. 근데 SDK 파라미터 형식을 보면 Long형을 달라고 했구요.. dstLen1도.. L...
    • 홍성락
      2010.03.23 02:05
      C코딩시나 델파이로 컴포넌트 만들때 타 언어나 자바등에서 사용하려면 포인트형을 많이 사용합니다. Lon...
    • 주재환
    • 2010.03.22 23:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2010.03.23 00:22
      CAD나 SHP나 기타 버젼별을 읽고 분석한다면 상용 GIS컴포넌트가 좋습니다. http://www.delphi.co.kr/z...