以下带买在Sybase中通过
......
StoredProc.Parameters.CreateParameter('',ftString,pdInput,Length(Head),Head);
StoredProc.Open; TempQuery.Recordset := StoredProc.Recordset;
while ADataSet >= 0 do
begin
if ADataSet = 0 then // 第一个结果集
begin
FRecord := TempQuery.Fields[0].Value;
Result := True;
end; if ADataSet >0 then // 第二个结果集
begin
for i := 0 to TempQuery.RecordCount - 1 do
begin
FieldValue := '';
for j := 0 to TempQuery.FieldCount - 1 do
begin
FieldValue := FieldValue + String(TempQuery.Fields[j].Value) + ColFlag;
end;
TempQuery.Next;
RecValue := RecValue + FieldValue + RecFlag;
end;
NRecord := RecValue;
end;
end;
TempQuery.Recordset := StoredProc.NextRecordset(ADataSet);
end;
上述代码在调用Sybase的有多个结果集返回的存储过程是可以的。但是调用SQL Server的时候始终只能返回一个结果集,在第一个结果集返回的时候ADataSet就等于-1了。问题一:SQL Server中是否和sybase有区别,该如何写。问题二:在调用Oracle的存储过程时是否能用上述写法还是必须这样写:TempQuery.Sql.Add(Call ProcName(?,?...) )。等待高手解决。
......
StoredProc.Parameters.CreateParameter('',ftString,pdInput,Length(Head),Head);
StoredProc.Open; TempQuery.Recordset := StoredProc.Recordset;
while ADataSet >= 0 do
begin
if ADataSet = 0 then // 第一个结果集
begin
FRecord := TempQuery.Fields[0].Value;
Result := True;
end; if ADataSet >0 then // 第二个结果集
begin
for i := 0 to TempQuery.RecordCount - 1 do
begin
FieldValue := '';
for j := 0 to TempQuery.FieldCount - 1 do
begin
FieldValue := FieldValue + String(TempQuery.Fields[j].Value) + ColFlag;
end;
TempQuery.Next;
RecValue := RecValue + FieldValue + RecFlag;
end;
NRecord := RecValue;
end;
end;
TempQuery.Recordset := StoredProc.NextRecordset(ADataSet);
end;
上述代码在调用Sybase的有多个结果集返回的存储过程是可以的。但是调用SQL Server的时候始终只能返回一个结果集,在第一个结果集返回的时候ADataSet就等于-1了。问题一:SQL Server中是否和sybase有区别,该如何写。问题二:在调用Oracle的存储过程时是否能用上述写法还是必须这样写:TempQuery.Sql.Add(Call ProcName(?,?...) )。等待高手解决。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货