網上對該問題的帖子很多,但是經常不是很全面,筆者在使用時也遇到了很多實際問題,比如參數不存在啊、類型沒有引用啊等等。下面我盡量細致地來通過例子實現一下,如果還有不正確的地方,希望得到高手指點,
首先,我們使用一種簡單的方式,即通過控件的方式來定義存儲過程和數據源。
新建一個單元,命名為: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;