선택된 레코드가 바뀌는 것은 GotoBookmark 로 위치가 바뀌기 때문에 그런겁니다.
그런데 코드 상으로 보기엔 원하는 코드인 것 같은데 잘 안나온다니 다른 문제가 있는건가...
Preview 하기 전에 Prepare 를 해보면 어떨까요?
(여기부터는 코딩 문제가 아니네요. ㅡㅜ)
rrr 님이 쓰신 글 :
: Form1->DBGrid1->DataSource->DataSet->GotoBookMark((void*)(SelectedRows->Items[i]));
: 이 부분을
: Form1->DBGrid1->DataSource->DataSet->GotoBookmark((void*)Form1->DBGrid1->SelectedRows->Items[i].c_str()); 이렇게 고치니까 되네요?
:
: 에러없이 컴파일이 되긴 하는데..
: 제가 원하던 선택한 레코드만 출력 하는 기능이 안되네요.
:
: 지금 동작하는게 dbgrid에서 어느 레코드를 선택하던 가장 위쪽 레코드만 출력이 되는군요.
: 폼에 quickrep과 버튼을 올려놓고 버튼을 누르면 QuickRep1->Preview(); 이 코드가 동작해서
: 미리보기창이 뜨는데요 이때 문서의 빈칸에 나타나는 데이터가 무조건 dbgrid의 맨 위 레코드정보 입니다.
:
: 그리고 프리뷰창을 띄우면 또 희한하게 dbgrid에서 레코드포인터가 가장 마지막 위치로 옮겨지네요.
:
: 선택한 레코드만 출력하게 하려면 코드를 어떻게 수정해야 할까요?
:
:
: rrr 님이 쓰신 글 :
: : Form1->DBGrid1->DataSource->DataSet->GotoBookMark((void*)(SelectedRows->Items[i]));
: : 이 부분에서
: : [C++ Error] Form4_Unit25.cpp(120): E2031 Cannot cast from 'AnsiString' to 'void *'
: :
: : 이런 에러가 뜨네요? 이게 뭔가요.........?
: : db는 쿼리로 연결했습니다.
: :
: : 아루스 님이 쓰신 글 :
: : : int i; // 유닛변수
: : :
: : : void __fastcall TForm9::QuickRep1NeedData(TObject *Sender, bool &MoreData)
: : : {
: : : MoreData = (Form1->DBGrid1->SelectedRows->Count > i); //선택한 레코드 만큼 실행.
: : : }
: : :
: : : void __fastcall TForm9::DetailBand1BeforePrint(TQRCustomBand *Sender, bool &PrintBand)
: : : {
: : : Form1->DBGrid1->DataSource->DataSet->GotoBookMark((void*)(SelectedRows->Items[i]));
: : : QRLabel1->Caption = Form1->DBGrid1->DataSource->DataSet->FieldByName("Hanbun")->AsString;
: : : i++;
: : : }
: : :
: : : void __fatscall TForm9::QuickRep1BeforePrint(TCustomQuickRep *Sender, bool &PrintReport)
: : : {
: : : i = 0;
: : : }
: : :
: : :
: : : rrr 님이 쓰신 글 :
: : : : var
: : : : i: Integer; // 유닛변수
: : : : procedure TForm9.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
: : : : begin
: : : : MoreData := Form1.DBGrid1.SelectedRows.Count > i; //선택한 레코드 만큼 실행.
: : : : end;
: : : :
: : : : procedure TForm9.DetailBand1BeforePrint(Sender: TQRCustomBand;
: : : : var PrintBand: Boolean);
: : : : begin
: : : : with Form1.DBGrid1 do begin
: : : : //선택한 레코드로 DB커서 이동
: : : : DataSource.DataSet.GotoBookMark(Pointer(SelectedRows.Items[i]));
: : : : // QRLabel에 Data를 넘긴다.
: : : : QRLabel1.Caption := DataSource.DataSet.FieldByName('Hanbun').AsString;
: : : : end;
: : : : inc(i);
: : : : end;
: : : :
: : : : procedure TForm9.QuickRep1BeforePrint(Sender: TCustomQuickRep;
: : : : var PrintReport: Boolean);
: : : : begin
: : : : i := 0; //유닛변수 초기화
: : : : end;
: : : :
: : : :
: : : : ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
: : : :
: : : :
http://www.delphiunion.com/dwp/QR/qreport.htm
: : : : 퀵리포트백서 사이트에서 dbgrid의 선택한 레코드만 출력하는 코드인데
: : : : 빌더에선 어떻게 써야할지 모르겠네요.
: : : :
: : : : 아시는분 코드좀 바꿔주세요 ㅎㅎ