Q&A

  • [re] [질문]스트링그리드 셀에 마우스클릭시 셀내용 읽어오기
shininggem님 답변 고맙습니다.
아래 SQL문에서 X는 어떻한 의미이신지요 현재 Mcode라는 코드의 숫자를 검색해서 그 숫자에 맟는 내용을 뽑아 내어야하는데 여러가지 방법을 다 동원해도 결과치가 안나옵나다.
죄송한지만 구체적인 소스코드를 좀 만들어 주실수는 없는지요.

// SQL문
PROCEDURE TMiChJoForm.MiChJO1_DATA(SENDER: TOBJECT);
Var
  sDBText : String;
BEGIN
  sDBext := ''; //<- 여기에 무었을 대입하여야되는지요
  WITH QR_MiChJo1 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 X= "'+sDBText+'"');
    END;
End;

>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_MiChJo1.Close;
>  MichJo_DATA(SENDER); //<- SQL문
>  //QR_MiChJo.SQL.Text := '' ; // sText를 이용해서 값을 가져오는 SQL문 <-포함시에러
>  QR_MiChJo1.Open;
>  if not QR_MiChJo1.EoF then
>    begin
>      while not QR_MiChJo1.EoF do //then
>        begin
>          sDBText := sDBText + QR_MiChJo.FieldByName('Chnayo').AsString + #13#10;
>          QR_MiChJo1.Next;
>        end;
>          ShowMessage('StringGird의 정보: ('+IntToStr(Col)+','+IntToStr(Row)+') 값: ' + sText + #13#10 + ' DB정보: ' + #13#10 + sDBText);
>    end
>  else
>    ShowMessage('매칭되는 DB값이 없습니다.');  




>>안녕하십니까? 전봉수 입니다.
>>에너지관리 프로그램을 개발하고 있는과정에서 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;
2  COMMENTS
  • Profile
    shininggem 2010.03.31 21:02
    음...
    일단 제가 이해한것은,
    "그리드에 DB값을 뿌려주고 특정셀을 클릭 했을때 그 셀의 값과 일치하는 정보를 보여준다." 라고 이해를 했습니다.
    이것에 기반하여 설명을 하자면
    <!--CodeS-->
    // 3번째 칼럼을 선택했을때(3번째라고 가정하고)
    if StringGrid1.Col = 3 then
    begin
    sDBext := StringGrid1.Cells[col,row]; // 여기값은 X필드의 값

    WITH QR_MiChJo1 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 X= "'+sDBText+'"'); {X필드는 최초 그리드에 뿌려준 값의 필드 입니다.(제생각에는 A TABLE에 있는 필드라는 생각이 드네요)}
    END;
    end;
    <!--CodeE-->

    위의 설명을 다시 읽어보니 MCode로 값을 찾는다고 하셨는데 그렇다면 조건이 A Table의 Mcode값이 10인 레코드와 b,c,d,e TABLe과 조인해서 결과값을 보여주어야 하겠네요
    아래처럼 하시면...
    <!--CodeS-->
    if StringGrid1.Col = 3 then
    begin
    sDBext := StringGrid1.Cells[col,row]; // 여기값은 X필드의 값

    WITH QR_MiChJo1 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 A.Mcode = "'+sDBText+'"');
    END;
    end;
    <!--CodeE-->

    혹시 B,C,D,E의 어느 한테이블에 Mcode와 일치하는 값이 존재 하지 않을 수 있으니 아웃조인으로 조건절을 구성하시는게 좋을 것 같습니다.

    <!--CodeS-->
    ' 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 A.Mcode = "'+sDBText+'"');
    <!--CodeE-->
  • Profile
    전봉수 2010.04.01 11:32
    shininggem님 너무나 자세한답변 정말 고맙습니다.
    아래와같이 구성하여 코팅후 실행하여보니까 String1.Col이 4번까지만 답이나오고 그다음부터는 '매칭되는 DB값이없다고 나오네요
    1~4번컬럼까지 값이 없어서 값의 내용은확인을 못했습니다만 조금만 더 접근하면 실마리가 풀릴거라는 기대감입니다.
    그리고 sDBText :=sDBText + QR_MiChJo1.FieldByName('Nayong').AsString + #13#10;이렇게 하니까 DB정보가 전부출력되어
    sDBText :=sDBText + GET_CODE_DESC('Jaryo',1,[1],['Mcode'],[TRIM(sDBText)],'Nayong')+ #13#10;이렇게 함수를만들어서
    "즉" Jaryo.DB 에서 Mcode의 값을 sDBText변수에 대입하여 Nayong필드의 내용을 보여주어라는 함수입니다.
    아래 코딩부분을 봐주시고 다시한번 구체적인 소스코드를 좀 만들어 주시면 고맙겠습니다.

    var
    MiChJoForm: TMiChJoForm;
    COUNT : INTEGER;
    sText,sDBText: String;
    col, row : integer;

    implementation
    USES CALLU, GOCOMU, MiChJop;

    {$R *.DFM}



    // SQL문
    PROCEDURE TMiChJoForm.MiChJO1_DATA(SENDER: TOBJECT);
    BEGIN
    if (StringGrid1.Col = 3) And (StringGrid1.Row = 1) then
    begin
    sDBText := StringGrid1.Cells[col,row]; // 여기값은 X필드의 값
    WITH QR_MiChJo1 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(+) '+
    ' 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 A.Mcode = "'+sDBText+'"');
    END;
    End;
    End;

    // 스트링그리드1 마우스 클릭시 셀값 ,좌표, 접수내용 확인
    procedure TMiChJoForm.StringGrid1MouseDown(Sender: TObject;
    Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
    begin
    Col := StringGrid1.Col; // 행
    Row := StringGrid1.Row; // 열
    sText := StringGrid1.Cells[Col,Row];
    sDBText:='';
    QR_MiChJo1.Close;
    MichJo1_DATA(SENDER); //<- SQL문
    //QR_MiChJo1.SQL.Text := '' ; // sText를 이용해서 값을 가져오는 SQL문 <-포함시에러
    QR_MiChJo1.Open;
    if not QR_MiChJo1.EoF then
    begin
    while not QR_MiChJo1.EoF do //then
    begin
    sDBText := // Chnayo
    sDBText + GET_CODE_DESC('Jaryo',1,[1],['Mcode'],[TRIM(sDBText)],'Nayong')+ #13#10; //<- 별도함수구성
    //DB명 // 코드명 // 접수내용
    QR_MiChJo1.Next;
    end;
    ShowMessage('StringGird의 정보: ('+IntToStr(Col)+','+IntToStr(Row)+') 값: ' + sText + #13#10 + ' DB정보: ' + #13#10 + sDBText);
    end
    else
    ShowMessage('매칭되는 DB값이 없습니다.');
    • 조유정
    • 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...
    • 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 값을...
    • 전봉수
    • 2010.03.30 22:52
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 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...