在Delphi
中使用RAVE報表(四)中講解了和數據庫連接的報表
有朋友提出了問題
所以在用一篇文章講解使用Query動態查詢和存儲過程連接數據庫的報表
因為要使用到存儲過程
我們使用SQL_Server
數據庫
建立數據庫Infotest
建立數據表InfoTable 字段為: {[name]
[sex]
[age]
[province]}
添加數據
數據庫的部分不進行過多地講解
在窗體上放置Database
Query
DataSource
RvQueryConnection
DBGrid組件
連接到數據庫
{查詢所有[陝西]的}按鈕的事件為
procedure TForm
Button
Click(Sender: TObject);
begin
Query
SQL
Clear ;
Query
SQL
Add(
SELECT * FROM InfoTable WHERE (province =:pro)
);
Query
ParamByName(
pro
)
AsString :=
陝西
;
Query
ExecSQL ;
Query
Active :=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