網上對該問題的帖子很多,但是經常不是很全面,筆者在使用時也遇到了很多實際問題,比如參數不存在啊、類型沒有引用啊等等。下面我盡量細致地來通過例子實現一下,如果還有不正確的地方,希望得到高手指點,有興趣的可以和我一同探討。[email]zyf0808@yeah.net[/email]。QQ:65127444?
首先,我們使用一種簡單的方式,即通過控件的方式來定義存儲過程和數據源。java如何調用存儲過程?
新建一個單元,命名為:DataMConn,在加入一個ADO單元下的ADOStoredProc,這里命名為ADOSPTempAbove ,再加入Data Access單元下的一個DataSource,這里命名為DataSourceAbove,設置DataSourceAbove的DataSet屬性為ADOSPTempAbove,當然這個屬性也可以在程序中指定。
下面,可以在另一個單元中添加一個DataGrid,這里的命名為dgAbove。下面的代碼加了詳細注釋。
With DataMConn.ADOSPTempAbove do
??? begin
????? ProcedureName := 'GetAbove';?? //指定存儲過程名稱
????? Parameters.Clear;????????????? //清除原有參數
????? //以下創建了兩個新的參數,關于如何傳遞表名做為參數請參我在 數據庫 分類的高級應用中寫的文章。數據庫調用存儲過程,
????? Parameters.CreateParameter('@tableName',ftString,pdinput,20,0);
????? Parameters.CreateParameter('@strDate',ftString,pdinput,20,0);
????? //以下為參數賦值
????? Parameters.ParamByName('@tableName').Value := tempTableName;
????? Parameters.ParamByName('@strDate').Value := strDate;
????? try
??????? Open;?? //返回結果集用open,否則用EexcProc;
????? except
?????? begin
???????? ShowMessage('打開表錯誤');
???????? Exit;
?????? end;
????? end;
??? //如果沒有在控件屬性中設置DataSourceAbove的DataSet屬性,可以在這里設置:
??? //DataSourceAbove.DatSet := DataMConn.ADOSPTempAbove?
??? dgAbove.DataSource := DataMConn.DataSourceAbove;
? end;