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;
일단 제가 이해한것은,
"그리드에 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-->