熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi 7 中使用RAVE報表(五)

2022-06-13   來源: Delphi編程 
 在Delphi 中使用RAVE報表(四)中講解了和數據庫連接的報表有朋友提出了問題所以在用一篇文章講解使用Query動態查詢和存儲過程連接數據庫的報表

  因為要使用到存儲過程我們使用SQL_Server數據庫建立數據庫Infotest建立數據表InfoTable 字段為: {[name][sex][age][province]} 添加數據

  數據庫的部分不進行過多地講解在窗體上放置DatabaseQueryDataSourceRvQueryConnectionDBGrid組件連接到數據庫{查詢所有[陝西]的}按鈕的事件為

procedure TFormButtonClick(Sender: TObject);
begin
QuerySQLClear ;
QuerySQLAdd(SELECT * FROM InfoTable WHERE (province =:pro) );
QueryParamByName(pro)AsString :=陝西;
QueryExecSQL ;
QueryActive :=True;
end;

  運行點擊後可以查看到DBGrid顯示了查看的結果這樣完成了第一步動態查詢的過程

  將程序運行[查詢]然後打開Rave記住不要關掉查詢的程序

  [File]=〉New Data Object=〉Direct Data View=〉選擇RvQueryConnection=〉 [Finish]=〉看到報表設計導航區的Data View Dictionary增加了DataView擴展後可以看到數據字段

  選[Tools]=〉Report Wizards=〉Single Table=〉選DataView選擇數據庫字段=〉Report Title改為個人情況報表好了之後可以看到在page中生成了報表

   然後保存*rav文件關閉程序添加[報表預覽]按鈕事件以及RvQueryConnection的GetCols和GetRow事件

procedure TFormButtonClick(Sender: TObject);
begin
With RvProjectProjMan do
begin
RvProjectOpen ;
RvQueryConnectionExecGetCols ; //得到列名
RvQueryConnectionExecGetRow ; //得到記錄
RvProjectExecuteReport(Report);
Close ;
end;
end;

procedure TFormRvQueryConnectionGetCols(
Connection: TRvCustomConnection);
begin
ConnectionWriteField(namedtString);
ConnectionWriteField(sexdtString);
ConnectionWriteField(agedtInteger);
ConnectionWriteField(provincedtString);
end;

procedure TFormRvQueryConnectionGetRow(Connection: TRvCustomConnection);
begin
ConnectionWriteStrdata(DBGridFields[]value);
ConnectionWriteStrdata(DBGridFields[]value);
ConnectionWriteIntdata(DBGridFields[]value);
ConnectionWriteStrdata(DBGridFields[]value);
end;

  在運行程序這樣就完成了一個根據動態查詢生成的報表

  使用存儲過程的報表方法如下:

  首先你要建立你的存儲過程建立存儲如下雖然這樣的簡單的查詢用存儲過程沒有必要這裡也只是簡單的示例:

ALTER procedure pr_test
as
DECLARE @chrnSQL nvarchar()
SELECT @chrnSQL=select * FROM InfoTable where age>
EXEC sp_ExecuteSql @chrnSQL

  在上例的程序中增加DBGrid StoredProcDataSourceRvDataSetConnection[運行存儲過程]按鈕和[報表預覽]按鈕DataSource的dataset屬性設置為StoredProcDBGrid的DataSource設置為DataSourceStoredProc連接數據庫StoredProcName := pr_test; RvDataSetConnection的dataset屬性設置為StoredProc[運行存儲過程]按鈕的click事件為

with StoredProc do begin
prepare;
StoredProcActive :=True;
end;

  運行程序看到DBGrid顯示了存儲過程查詢的結果

  將程序運行[運行存儲過程]然後打開Rave記住不要關掉查詢的程序然後用和上例相同的方法添加如下代碼

[File]=〉New Data Object=〉Direct Data View=〉 選擇RvDataSetConnection=〉 [Finish]=〉

  看到報表設計導航區的Data View Dictionary增加了DataView擴展後可以看到數據字段
選[Tools]àReport WizardsàSingle Tableà 選DataView選擇數據庫字段àReport Title改為個人情況報表好了之後可以看到在page中生成了報表

  保存文件關閉程序添加[報表預覽]按鈕事件以及RvDataSetConnection的GetCols和GetRow事件

procedure TFormButtonClick(Sender: TObject);
begin
With RvProjectProjMan do
begin
RvProjectOpen ;
RvDataSetConnectionExecGetCols ; //得到列名
RvDataSetConnectionExecGetRow ; //得到記錄
RvProjectExecuteReport(Report);
Close ;
end;
end;

procedure TFormRvDataSetConnectionGetCols(
Connection: TRvCustomConnection);
begin
ConnectionWriteField(namedtString); {列名}
ConnectionWriteField(sexdtString);
ConnectionWriteField(agedtInteger);
ConnectionWriteField(provincedtString);
end;
procedure TFormRvDataSetConnectionGetRow(
Connection: TRvCustomConnection);
begin
ConnectionWriteStrdata(DBGridFields[]value);
ConnectionWriteStrdata(DBGridFields[]value);
ConnectionWriteIntdata(DBGridFields[]value);
ConnectionWriteStrdata(DBGridFields[]value);
end;

  好了這篇的講解應該大家都明白和數據庫有關的報表怎麼設計了總結一下通過DBGrid數據感應組件得到查詢的結果通過和rave的連接組件(RvDataSetConnectionRvQueryConnection等)的GetCols和GetRow事件往報表當中添加數據


From:http://tw.wingwit.com/Article/program/Delphi/201311/24721.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.