Q&A

  • [재질문]아시는분있나요.답변을 아무도 못해주시네요..ㅠㅠ
질문이 부족했는지...ㅠㅠ..다시 질문드려여...흑..머리가 넘 아프네요

1.폼하나에 두개의 DB그리드가 있습니다. 이 그리드는 조회버튼을 누르면

쿼리의 조건절이 0,1일때를 불러와 동시에 DB그리드에 뿌려주어야합니다.



2.위의 문제는 다른방법이 있는지 모르겠지만 저는 쿼리콤포와 데이타소스를

두개 생성 하여 조회하였습니다. 여기까지는 문제가 없군요..근데..ㅠㅠ



3.이폼에 뿌려진결과 그대로(DB그리드둘다) QReport에 뿌려주어야합니다.

제가 쿼리콤포두개와 데이타소스두개를 사용한결과..QReport폼에서

왼쪽그리드의 필드(Query1)은 정상적으로 뿌려지는데요,오른쪽의 필드들은(Query2)

첫번째 데이타만 왼쪽데이타갯수에 마추어 쭈욱..나옵니다. -_-...



4.제 생각엔 QReport폼하나당 DataSet하나만 설정할수 있는거 때매...문제가 생기는거

같습니다. 쿼리콤포와데이타소스를 하나씩 놓아야될거 같은데..도저히 로직구성이

안되네요.. 도와주세요..ㅠㅠ



위의 글로는 부족할거 같아 이 부분의 소스를 올립니다.

(__)좋은하루되시길바랍니다. 오늘도 즐프...



[Source]

//---------이곳은 미리보기와 인쇄버튼의 이벤트입니다.-------//

procedure TfrmMoney_Req.btnPriviewClick(Sender: TObject);

var sSql, sSql1, sSql2, sSqlSum :String;

sCombo :String;

begin

//콤보박스에서 오늘이나 조회할날짜를 가져옵니다.

sCombo :=Trim(ComboYear.text)+'-'+Trim(ComboMonth.text)+'-'+Trim(ComboDay.text);

//기본쿼리문

sSql := ' select a.TB04_MaeMae_Seq, a.TB04_Custom_Name, a.TB04_Tot_Amt,'+

' a.TB04_MaeMae_Kind, a.TB04_MaeMae_Date, b.TB05_Sudo_Name'+

' from TB04_MaeMae a, TB05_MaeMae_Sudo b where'+

' a.TB04_MaeMae_Seq = b.TB05_MaeMae_Seq and a.TB04_MaeMae_Date = '''+sCombo+''''+

' and b.TB05_MaeMae_Date = '''+sCombo+''''+

' and b.TB05_Sudo_Name != 0 and b.TB05_Qty != 0 and b.TB05_Amt != 0';



try

begin

//기본쿼리뒤에붙을 두개의 조건입니다.

sSql1 := sSql + ' and a.TB04_MaeMae_Kind = 1';

sSql2 := sSql + ' and a.TB04_MaeMae_Kind = 0';

//QReport폼 생성

frmMoney_Req_Print := TfrmMoney_Req_Print.Create(Application);

frmMoney_Req_Print.Visible := False;

frmMoney_Req_Print.sSql1 := sSql1;

frmMoney_Req_Print.sSql2 := sSql2;

end;

//---------------인쇄버튼 클릭시와 미리보기버튼 클릭시의 이벤트---------------//

if Sender = btnPrint then

begin

frmMoney_Req_Print.QRMoney.Print;

end

else

begin

frmMoney_Req_Print.QRMoney.Preview;



frmMoney_Req_Print.Free;

end;

except

frmMoney_Req_Print.Free;

end;

end;

//////////////////////////////////////////////////////////////////////////////////

이곳부터는 QReport폼이 인쇄가 되기전에 ㅈ설정하는곳입니다.

이런식으로 제가 두개의 쿼리를 쓰고 설정을 했습니다. 결과는 Query1만 은 정상적으로 돌지만 Query2는 -_-이상하네요...

다시 말하지만 QReport폼에 DataSet을 Query1이나Query2중에 하나만 설정가능한거때매 그런거 같은데..솔직히 모르겠습니다..

//-----------------------QReport SQL설정관련 이벤트---------------------------//

procedure TfrmMoney_Req_Print.QRMoneyBeforePrint(Sender: TCustomQuickRep;

var PrintReport: Boolean);

begin

begin

Query1.Close;

Query1.SQL.Clear;

Query1.SQL.Add(sSql1);

Query1.Open;

end;



begin

Query2.Close;

Query2.SQL.Clear;

Query2.SQL.Add(sSql2);

Query2.Open;

end;

QRMoney.Prepare;

end;



저의 긴 질문을 읽어주셔서 감사합니다...

언제나 좋은 하루 되시길 바랍니다.

아..답변 주세요..-_-;

2  COMMENTS
  • Profile
    강인규 2001.04.25 23:46
    질문이 넘 길어서 자세히 읽지는 못했네여...^^;



    두개의 Query가 같은 수의 레코드를 가지고 있고 QuickRep에서 DataSet을 하나만 잡을 수 있어 두개의 쿼리가 동기화 되지 않는다는 이야기인거 같군요..^^;(맞는건지)



    이건 하나의 쿼리만 dataset을 설정하고 다른하나는 디테일밴드의 AfterPrint 이벤트에서 Query2.Next; 하시면 되지않을까 하는 생각이 드는군요...^^



    잘하면 퀴리를 하나의 쿼리로 합칠 수도 있을거같은데 소스가 주르륵 있는 질문은 읽기가...어렵군요...



    즐프하세요..^^









    이정석 wrote:

    > 질문이 부족했는지...ㅠㅠ..다시 질문드려여...흑..머리가 넘 아프네요

    > 1.폼하나에 두개의 DB그리드가 있습니다. 이 그리드는 조회버튼을 누르면

    > 쿼리의 조건절이 0,1일때를 불러와 동시에 DB그리드에 뿌려주어야합니다.

    >

    > 2.위의 문제는 다른방법이 있는지 모르겠지만 저는 쿼리콤포와 데이타소스를

    > 두개 생성 하여 조회하였습니다. 여기까지는 문제가 없군요..근데..ㅠㅠ

    >

    > 3.이폼에 뿌려진결과 그대로(DB그리드둘다) QReport에 뿌려주어야합니다.

    > 제가 쿼리콤포두개와 데이타소스두개를 사용한결과..QReport폼에서

    > 왼쪽그리드의 필드(Query1)은 정상적으로 뿌려지는데요,오른쪽의 필드들은(Query2)

    > 첫번째 데이타만 왼쪽데이타갯수에 마추어 쭈욱..나옵니다. -_-...

    >

    > 4.제 생각엔 QReport폼하나당 DataSet하나만 설정할수 있는거 때매...문제가 생기는거

    > 같습니다. 쿼리콤포와데이타소스를 하나씩 놓아야될거 같은데..도저히 로직구성이

    > 안되네요.. 도와주세요..ㅠㅠ

    >

    > 위의 글로는 부족할거 같아 이 부분의 소스를 올립니다.

    > (__)좋은하루되시길바랍니다. 오늘도 즐프...

    >

    > [Source]

    > //---------이곳은 미리보기와 인쇄버튼의 이벤트입니다.-------//

    > procedure TfrmMoney_Req.btnPriviewClick(Sender: TObject);

    > var sSql, sSql1, sSql2, sSqlSum :String;

    > sCombo :String;

    > begin

    > //콤보박스에서 오늘이나 조회할날짜를 가져옵니다.

    > sCombo :=Trim(ComboYear.text)+'-'+Trim(ComboMonth.text)+'-'+Trim(ComboDay.text);

    > //기본쿼리문

    > sSql := ' select a.TB04_MaeMae_Seq, a.TB04_Custom_Name, a.TB04_Tot_Amt,'+

    > ' a.TB04_MaeMae_Kind, a.TB04_MaeMae_Date, b.TB05_Sudo_Name'+

    > ' from TB04_MaeMae a, TB05_MaeMae_Sudo b where'+

    > ' a.TB04_MaeMae_Seq = b.TB05_MaeMae_Seq and a.TB04_MaeMae_Date = '''+sCombo+''''+

    > ' and b.TB05_MaeMae_Date = '''+sCombo+''''+

    > ' and b.TB05_Sudo_Name != 0 and b.TB05_Qty != 0 and b.TB05_Amt != 0';

    >

    > try

    > begin

    > //기본쿼리뒤에붙을 두개의 조건입니다.

    > sSql1 := sSql + ' and a.TB04_MaeMae_Kind = 1';

    > sSql2 := sSql + ' and a.TB04_MaeMae_Kind = 0';

    > //QReport폼 생성

    > frmMoney_Req_Print := TfrmMoney_Req_Print.Create(Application);

    > frmMoney_Req_Print.Visible := False;

    > frmMoney_Req_Print.sSql1 := sSql1;

    > frmMoney_Req_Print.sSql2 := sSql2;

    > end;

    > //---------------인쇄버튼 클릭시와 미리보기버튼 클릭시의 이벤트---------------//

    > if Sender = btnPrint then

    > begin

    > frmMoney_Req_Print.QRMoney.Print;

    > end

    > else

    > begin

    > frmMoney_Req_Print.QRMoney.Preview;

    >

    > frmMoney_Req_Print.Free;

    > end;

    > except

    > frmMoney_Req_Print.Free;

    > end;

    > end;

    > //////////////////////////////////////////////////////////////////////////////////

    > 이곳부터는 QReport폼이 인쇄가 되기전에 ㅈ설정하는곳입니다.

    > 이런식으로 제가 두개의 쿼리를 쓰고 설정을 했습니다. 결과는 Query1만 은 정상적으로 돌지만 Query2는 -_-이상하네요...

    > 다시 말하지만 QReport폼에 DataSet을 Query1이나Query2중에 하나만 설정가능한거때매 그런거 같은데..솔직히 모르겠습니다..

    > //-----------------------QReport SQL설정관련 이벤트---------------------------//

    > procedure TfrmMoney_Req_Print.QRMoneyBeforePrint(Sender: TCustomQuickRep;

    > var PrintReport: Boolean);

    > begin

    > begin

    > Query1.Close;

    > Query1.SQL.Clear;

    > Query1.SQL.Add(sSql1);

    > Query1.Open;

    > end;

    >

    > begin

    > Query2.Close;

    > Query2.SQL.Clear;

    > Query2.SQL.Add(sSql2);

    > Query2.Open;

    > end;

    > QRMoney.Prepare;

    > end;

    >

    > 저의 긴 질문을 읽어주셔서 감사합니다...

    > 언제나 좋은 하루 되시길 바랍니다.

    > 아..답변 주세요..-_-;

  • Profile
    이희정 2001.04.25 22:18
    이정석 wrote:

    > 질문이 부족했는지...ㅠㅠ..다시 질문드려여...흑..머리가 넘 아프네요

    > 1.폼하나에 두개의 DB그리드가 있습니다. 이 그리드는 조회버튼을 누르면

    > 쿼리의 조건절이 0,1일때를 불러와 동시에 DB그리드에 뿌려주어야합니다.

    >

    > 2.위의 문제는 다른방법이 있는지 모르겠지만 저는 쿼리콤포와 데이타소스를

    > 두개 생성 하여 조회하였습니다. 여기까지는 문제가 없군요..근데..ㅠㅠ

    >

    > 3.이폼에 뿌려진결과 그대로(DB그리드둘다) QReport에 뿌려주어야합니다.

    > 제가 쿼리콤포두개와 데이타소스두개를 사용한결과..QReport폼에서

    > 왼쪽그리드의 필드(Query1)은 정상적으로 뿌려지는데요,오른쪽의 필드들은(Query2)

    > 첫번째 데이타만 왼쪽데이타갯수에 마추어 쭈욱..나옵니다. -_-...

    >

    > 4.제 생각엔 QReport폼하나당 DataSet하나만 설정할수 있는거 때매...문제가 생기는거

    > 같습니다. 쿼리콤포와데이타소스를 하나씩 놓아야될거 같은데..도저히 로직구성이

    > 안되네요.. 도와주세요..ㅠㅠ

    >

    > 위의 글로는 부족할거 같아 이 부분의 소스를 올립니다.

    > (__)좋은하루되시길바랍니다. 오늘도 즐프...

    >

    > [Source]

    > //---------이곳은 미리보기와 인쇄버튼의 이벤트입니다.-------//

    > procedure TfrmMoney_Req.btnPriviewClick(Sender: TObject);

    > var sSql, sSql1, sSql2, sSqlSum :String;

    > sCombo :String;

    > begin

    > //콤보박스에서 오늘이나 조회할날짜를 가져옵니다.

    > sCombo :=Trim(ComboYear.text)+'-'+Trim(ComboMonth.text)+'-'+Trim(ComboDay.text);

    > //기본쿼리문

    > sSql := ' select a.TB04_MaeMae_Seq, a.TB04_Custom_Name, a.TB04_Tot_Amt,'+

    > ' a.TB04_MaeMae_Kind, a.TB04_MaeMae_Date, b.TB05_Sudo_Name'+

    > ' from TB04_MaeMae a, TB05_MaeMae_Sudo b where'+

    > ' a.TB04_MaeMae_Seq = b.TB05_MaeMae_Seq and a.TB04_MaeMae_Date = '''+sCombo+''''+

    > ' and b.TB05_MaeMae_Date = '''+sCombo+''''+

    > ' and b.TB05_Sudo_Name != 0 and b.TB05_Qty != 0 and b.TB05_Amt != 0';

    >

    > try

    > begin

    > //기본쿼리뒤에붙을 두개의 조건입니다.

    > sSql1 := sSql + ' and a.TB04_MaeMae_Kind = 1';

    > sSql2 := sSql + ' and a.TB04_MaeMae_Kind = 0';

    > //QReport폼 생성

    > frmMoney_Req_Print := TfrmMoney_Req_Print.Create(Application);

    > frmMoney_Req_Print.Visible := False;

    > frmMoney_Req_Print.sSql1 := sSql1;

    > frmMoney_Req_Print.sSql2 := sSql2;

    > end;

    > //---------------인쇄버튼 클릭시와 미리보기버튼 클릭시의 이벤트---------------//

    > if Sender = btnPrint then

    > begin

    > frmMoney_Req_Print.QRMoney.Print;

    > end

    > else

    > begin

    > frmMoney_Req_Print.QRMoney.Preview;

    >

    > frmMoney_Req_Print.Free;

    > end;

    > except

    > frmMoney_Req_Print.Free;

    > end;

    > end;

    > //////////////////////////////////////////////////////////////////////////////////

    > 이곳부터는 QReport폼이 인쇄가 되기전에 ㅈ설정하는곳입니다.

    > 이런식으로 제가 두개의 쿼리를 쓰고 설정을 했습니다. 결과는 Query1만 은 정상적으로 돌지만 Query2는 -_-이상하네요...

    > 다시 말하지만 QReport폼에 DataSet을 Query1이나Query2중에 하나만 설정가능한거때매 그런거 같은데..솔직히 모르겠습니다..

    > //-----------------------QReport SQL설정관련 이벤트---------------------------//

    > procedure TfrmMoney_Req_Print.QRMoneyBeforePrint(Sender: TCustomQuickRep;

    > var PrintReport: Boolean);

    > begin

    > begin

    > Query1.Close;

    > Query1.SQL.Clear;

    > Query1.SQL.Add(sSql1);

    > Query1.Open;

    > end;

    >

    > begin

    > Query2.Close;

    > Query2.SQL.Clear;

    > Query2.SQL.Add(sSql2);

    > Query2.Open;

    > end;

    > QRMoney.Prepare;

    > end;

    >

    > 저의 긴 질문을 읽어주셔서 감사합니다...

    > 언제나 좋은 하루 되시길 바랍니다.

    > 아..답변 주세요..-_-;





    제가 보기엔 화면에 뿌려주는 건 문제가 아닌데 보고서로 출력되는 부분이 문제가 되고 있는 것으로 보이는군요.



    그럼 경우 둘 중 하나를 report의 dataset으로 잡고



    DetailBandBeforeprint이벤트에서 dataset으로 잡지 않은 query의 값을 QLabel 콤포를 이용해 찍어주면 될 거 같습니다.



    음..



    일케 해주심 될 거 같은데염..



    물론 query2의 레코드수가 많은 경우는 report preview 전에 dataset을 바꿔주고



    if query1.recordcount > query2.recordcount then

    begin



    Label1.Caption := query2.fieldbyname....;

    Label2.caption :=...;



    query2.next;



    end

    else

    begin



    Label1.Caption := query1.fieldbyname....;

    Label2.caption :=...;



    query1.next;



    end;