原谅我的天真,但我对使用Delphi与数据库(这可能看起来有些奇怪)是新手。如何返回存储过程中的所有值?
我已经使用TADOConnection建立了与我的数据库(MSSQL)的连接。我正在使用TADOStoredProc来访问我的存储过程。
我的存储过程返回2列,一列填满服务器名称,第二列填满服务器上的用户。它通常返回大约70条记录......不是很多数据。
如何以编程方式枚举此存储过程?我能够在我的表单上放置一个DBGrid并将其附加到TDataSource(然后附加到我的ADOStoredProc),并且我可以验证数据是否正确检索。
理想情况下,我想枚举返回的数据并将其移入TStringList。
目前,我使用下面的代码来枚举ADOStoredProc,但它只返回 '@RETURN_VALUE':
ADOStoredProc1.Open;
ADOStoredProc1.ExecProc;
ADOStoredProc1.Parameters.Refresh;
for i := 0 to AdoStoredProc1.Parameters.Count - 1 do
begin
Memo1.Lines.Add(AdoStoredProc1.Parameters.Items[i].Name);
Memo1.Lines.Add(AdoStoredProc1.Parameters.Items[i].Value);
end;
当代码循环访问Parameters集合时SP是否返回结果集是否重要?即这个代码不会返回与OP相同的结果吗? (免责声明:我不是Delphi程序员,所以也许我误解了这个问题......) – Matt 2009-05-29 23:44:09
当然很重要。 OP使用Open获得结果集,然后使用ExecSQL丢弃结果集,不留任何循环。删除ExecSQL并使用Open(或Active:= True)会留下结果集进行迭代。 IOW,这与OP的结果并不相同。 :-) – 2009-05-29 23:54:03