안녕하세요. 최수영님의 웹에 올린글을 보고, 크리스탈리포트를 델파이에서 실행 하였습니다. 물론, Crystal7VCL4 컴포넌트도 델파이에 셋팅을 했구요. 컴포넌트의 라이센스는 어떻게 되나요?(비지니스용으로...)
크리스탈리포트는 odbc를 이용해 오라클서버의 뷰테이블로 작성했습니다. 델파이에서 첨으로 실행을 했는데.... 크리스탈 엔진 에러 메세지가 나옵니다.
에러번호는 599이고, "cannot open SQLserver Method:Excute " 에러 메세지 내용입니다.
델파이쪽의 소스코딩은 아래와 같습니다.
procedure Tfrm_abd_print.Button1Click(Sender: TObject);
Var
sReportName : String; //파일 이름
sFilePath : String; //파일 경로
sWorkMan : String; //작업자 (로그인 명)
from_date : String; // 시작일자
to_date : String; // 끝일자
from_hour : String; // 시작 시간
to_hour : String; // 끝시간
begin
sFilePath := 'C:rpt'; //파일 경로
sWorkMan := '네이버';
from_date := Crpe1.DateToStr(DateTimePicker1.Date) ; // 시작일자
to_date := Crpe1.DateToStr(DateTimePicker2.Date) ; // 끝일자
from_hour := Crpe1.TimeToStr(DateTimePicker3.Time); // 시작 시간
to_hour := Crpe1.TimeToStr(DateTimePicker4.Time); // 끝시간
if RadioButton1.Checked = true then
sReportName := sFilePath + 'd_abd_call_time'
else if RadioButton2.Checked = true then
sReportName := sFilePath + 'd_abd_call_day'
else if RadioButton3.Checked = true then
sReportName := sFilePath + 'd_abd_call_mon'
else if RadioButton4.Checked = true then
sReportName := sFilePath + 'd_abd_call_week';
if cbCamp.Items.Strings[cbCamp.ItemIndex] = '' then
begin
messagedlg('센터명을 확인 하십시오!!! ',mterror,[mbok],0);
exit;
end;
with Crpe1 do
begin
Selection.Clear;
GroupSelection.Clear;
OutPut:=toWindow; //uses문에 ucrpe32등록하여야 함
// if Uppercase((Sender as TBitBtn).name) = UpperCase('print_bit') then
// OutPut:=toPrinter;
WindowStyle.Title:=caption;
Connect.ServerName := 'server1';
Connect.UserID := 'cti';
Connect.Password := 'cti';
Connect.DatabaseName:= 'sec';
if cbGroup.Items.Strings[cbGroup.ItemIndex] = '' then
begin
ReportName := sReportName + '_1.rpt';
Selection.Formula[0] := '{d_abd_call_time.campaign_id} like "'+listCenterID.Strings[ cbCamp.ItemIndex ]+'" ' +
'and {d_abd_call_time.dd} >= DTSToDate("'+ from_date + '") '+
'and {d_abd_call_time.dd} <= DTSToDate("'+ to_date + '") '+
'and {d_abd_call_time.hh} = "' + from_hour + '" '+
'and {d_abd_call_time.hh} = "' + to_hour + '" ';
end
else
begin
ReportName := sReportName + '.rpt';
Selection.Formula[0] := '{d_abd_call_time.campaign_id} like "'+listCenterID.Strings[ cbCamp.ItemIndex ]+'" '+
'and {d_abd_call_time.group_id} like "'+listGroupID.Strings[ cbGroup.ItemIndex ]+'" '+
'and {d_abd_call_time.dd} >= DTSToDate("'+ from_date + '") '+
'and {d_abd_call_time.dd} <= DTSToDate("'+ to_date + '") '+
'and {d_abd_call_time.hh} = "' + from_hour + '" '+
'and {d_abd_call_time.hh} = "' + to_hour + '" ';
end;
Formulas.Clear;
Formulas.Add('기간1');
Formulas.Formula.Text := from_date ;
Formulas.Add('기간2');
Formulas.Formula.Text := to_date ;
Formulas.Add('시간1');
Formulas.Formula.Text := from_hour ;
Formulas.Add('시간2');
Formulas.Formula.Text := to_hour ;
Formulas.Add('작업자');
Formulas.Formula.Text := sWorkMan ;
Formulas.Add('센터');
Formulas.Formula.Text := cbCamp.Items.Strings[cbCamp.ItemIndex] ;
if cbGroup.Items.Strings[cbGroup.ItemIndex] <> '' then
begin
Formulas.Add('그룹명');
Formulas.Formula.Text := cbGroup.Items.Strings[cbGroup.ItemIndex] ;
end;
Formulas.Send;
Execute;
end;
end;
점검사항
1. 날자타입이 smalldatetime인가 varchar(8) or char(8)인지요...
smalldatetime이라면 델파이의 날자변수는 "2000/01/01"같인 중간에
/가 들어가야 합니다! ->515 formula error가 나오는디...
2. 크리스탈7.0에 가셔서 문제의 레포트를 부르신다음 set location을 실행
해당데이블을 정확한 드라이버 ex) SQL Server->sybase,ms-sqlserver)
에 해당되는 것을 각각 테이블을 다시연결, data verifiy실행
최수영올림
지니 wrote:
> 안녕하세요. 최수영님의 웹에 올린글을 보고, 크리스탈리포트를 델파이에서 실행 하였습니다. 물론, Crystal7VCL4 컴포넌트도 델파이에 셋팅을 했구요. 컴포넌트의 라이센스는 어떻게 되나요?(비지니스용으로...)
> 크리스탈리포트는 odbc를 이용해 오라클서버의 뷰테이블로 작성했습니다. 델파이에서 첨으로 실행을 했는데.... 크리스탈 엔진 에러 메세지가 나옵니다.
> 에러번호는 599이고, "cannot open SQLserver Method:Excute
> 델파이쪽의 소스코딩은 아래와 같습니다.
> procedure Tfrm_abd_print.Button1Click(Sender: TObject);
> Var
> sReportName : String; //파일 이름
> sFilePath : String; //파일 경로
> sWorkMan : String; //작업자 (로그인 명)
> from_date : String; // 시작일자
> to_date : String; // 끝일자
> from_hour : String; // 시작 시간
> to_hour : String; // 끝시간
>
> begin
>
> sFilePath := 'C:rpt'; //파일 경로
> sWorkMan := '네이버';
> from_date := Crpe1.DateToStr(DateTimePicker1.Date) ; // 시작일자
> to_date := Crpe1.DateToStr(DateTimePicker2.Date) ; // 끝일자
> from_hour := Crpe1.TimeToStr(DateTimePicker3.Time); // 시작 시간
> to_hour := Crpe1.TimeToStr(DateTimePicker4.Time); // 끝시간
> if RadioButton1.Checked = true then
> sReportName := sFilePath + 'd_abd_call_time'
> else if RadioButton2.Checked = true then
> sReportName := sFilePath + 'd_abd_call_day'
> else if RadioButton3.Checked = true then
> sReportName := sFilePath + 'd_abd_call_mon'
> else if RadioButton4.Checked = true then
> sReportName := sFilePath + 'd_abd_call_week';
>
> if cbCamp.Items.Strings[cbCamp.ItemIndex] = '' then
> begin
> messagedlg('센터명을 확인 하십시오!!! ',mterror,[mbok],0);
> exit;
> end;
> with Crpe1 do
> begin
> Selection.Clear;
> GroupSelection.Clear;
> OutPut:=toWindow; //uses문에 ucrpe32등록하여야 함
> // if Uppercase((Sender as TBitBtn).name) = UpperCase('print_bit') then
> // OutPut:=toPrinter;
> WindowStyle.Title:=caption;
> Connect.ServerName := 'server1';
> Connect.UserID := 'cti';
> Connect.Password := 'cti';
> Connect.DatabaseName:= 'sec';
>
> if cbGroup.Items.Strings[cbGroup.ItemIndex] = '' then
> begin
> ReportName := sReportName + '_1.rpt';
> Selection.Formula[0] := '{d_abd_call_time.campaign_id} like "'+listCenterID.Strings[ cbCamp.ItemIndex ]+'" ' +
> 'and {d_abd_call_time.dd} >= DTSToDate("'+ from_date + '") '+
> 'and {d_abd_call_time.dd} <= DTSToDate("'+ to_date + '") '+
> 'and {d_abd_call_time.hh} = "' + from_hour + '" '+
> 'and {d_abd_call_time.hh} = "' + to_hour + '" ';
>
> end
> else
> begin
> ReportName := sReportName + '.rpt';
> Selection.Formula[0] := '{d_abd_call_time.campaign_id} like "'+listCenterID.Strings[ cbCamp.ItemIndex ]+'" '+
> 'and {d_abd_call_time.group_id} like "'+listGroupID.Strings[ cbGroup.ItemIndex ]+'" '+
> 'and {d_abd_call_time.dd} >= DTSToDate("'+ from_date + '") '+
> 'and {d_abd_call_time.dd} <= DTSToDate("'+ to_date + '") '+
> 'and {d_abd_call_time.hh} = "' + from_hour + '" '+
> 'and {d_abd_call_time.hh} = "' + to_hour + '" ';
> end;
> Formulas.Clear;
> Formulas.Add('기간1');
> Formulas.Formula.Text := from_date ;
> Formulas.Add('기간2');
> Formulas.Formula.Text := to_date ;
> Formulas.Add('시간1');
> Formulas.Formula.Text := from_hour ;
> Formulas.Add('시간2');
> Formulas.Formula.Text := to_hour ;
> Formulas.Add('작업자');
> Formulas.Formula.Text := sWorkMan ;
> Formulas.Add('센터');
> Formulas.Formula.Text := cbCamp.Items.Strings[cbCamp.ItemIndex] ;
> if cbGroup.Items.Strings[cbGroup.ItemIndex] <> '' then
> begin
> Formulas.Add('그룹명');
> Formulas.Formula.Text := cbGroup.Items.Strings[cbGroup.ItemIndex] ;
> end;
>
> Formulas.Send;
> Execute;
> end;
>
>
>
>
>
> end;
>