Why TSQLQuery can not handle multiple result sets? lazarus / 16-Databases ---------------------------------------------------------------------- nocoder · 2016-08-28 02:32 Sometimes I had to return one or more result sets from the stored procedure, but TSQLQuery only get the first one. Many databases support returning multiple result sets, but this feature is not reflected in TSQLQuery. I hope that future versions can add this feature. ---------------------------------------------------------------------- markus_ja · 2016-08-28 08:48 You just need to iterate the records. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i SQLQuery1.First;while not SQLQuery1.EOF dobegin   SQLQuery1.Next;end; ---------------------------------------------------------------------- nocoder · 2016-08-28 11:07 The meaning of multiple result sets does not refer to multiple records. Suppose you have a stored procedure: Code: SQL  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i CREATE proc sp_getdataAS -- Perform some complex calculations ... -- ... SELECT * FROM table1 -- First resultset SELECT * FROM table2 -- Second resultset   When you execute the statement: EXEC sp_getdata, then returns two resultsets. TSQLQuery only take the first one currently. How can I take the second? ---------------------------------------------------------------------- Abelisto · 2016-08-28 12:54 As I know such thing is MS SQL Server specific, most of other databases does not supports several results from the single call. ---------------------------------------------------------------------- miab3 · 2016-08-28 13:12 ZEOS (7.2) suports MySQL(MariaDB) stored procedures returning multiple ResultSets:  Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i    { Multiple ResultSet support API }    function HasMoreResultSets: Boolean;    function GetFirstResultSet: IZResultSet;    function GetPreviousResultSet: IZResultSet;    function GetNextResultSet: IZResultSet;    function GetLastResultSet: IZResultSet;    function BOR: Boolean;    function EOR: Boolean;    function GetResultSetByIndex(const Index: Integer): IZResultSet;    function GetResultSetCount: Integer; Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure TZStoredProc.ExecProc;begin  Connection.ShowSQLHourGlass;  try    if Active then      Close;    ExecSQL;    RetrieveParamValues;  finally  Connection.HideSQLHourGlass;  end;end; {**  Procedure the First retrieved resultset if the givens}procedure TZStoredProc.FirstResultSet;begin  if Assigned(Statement) then    if (Statement as IZCallableStatement).HasMoreResultSets then      SetAnotherResultset((Statement as IZCallableStatement).GetFirstResultSet);end; {**  Procedure the Previous retrieved resultset if the givens}procedure TZStoredProc.PreviousResultSet;begin  if Assigned(Statement) then    if (Statement as IZCallableStatement).HasMoreResultSets then      SetAnotherResultset((Statement as IZCallableStatement).GetPreviousResultSet);end; {**  Procedure the Next retrieved resultset if the givens}procedure TZStoredProc.NextResultSet;begin  if Assigned(Statement) then    if (Statement as IZCallableStatement).HasMoreResultSets then      SetAnotherResultset((Statement as IZCallableStatement).GetNextResultSet);end; {**  Procedure the Last retrieved resultset if the givens}procedure TZStoredProc.LastResultSet;begin  if Assigned(Statement) then    if (Statement as IZCallableStatement).HasMoreResultSets then      SetAnotherResultset((Statement as IZCallableStatement).GetLastResultSet);end; {**  Retrieves a ResultSet by his index.  @param Integer the index of the Resultset  @result IZResultSet of the Index or nil.}procedure TZStoredProc.SetResultSet(const Index: Integer);begin  if Assigned(Statement) then    if ( Index < 0 ) or ( Index > (Statement as IZCallableStatement).GetResultSetCount -1 ) then      raise Exception.Create(Format(SListIndexError, [Index]))    else      SetAnotherResultset((Statement as IZCallableStatement).GetResultSetByIndex(Index));end; {**  Returns the Count of retrived ResultSets.  @result Integer Count}function TZStoredProc.ResultSetCount: Integer;begin  Result := 0;  if Assigned(Statement) then    if (Statement as IZCallableStatement).HasMoreResultSets then      Result := (Statement as IZCallableStatement).GetResultSetCount;end; {**  First ResultSet?  @result True if first ResultSet}function TZStoredProc.BOR: Boolean;begin  Result := True;  if Assigned(Statement) then    if (Statement as IZCallableStatement).HasMoreResultSets then      Result := (Statement as IZCallableStatement).BOR;end; {**  Last ResultSet?  @result True if Last ResultSet}function TZStoredProc.EOR: Boolean;begin  Result := True;  if Assigned(Statement) then    if (Statement as IZCallableStatement).HasMoreResultSets then      Result := (Statement as IZCallableStatement).EOR;end; Michal ---------------------------------------------------------------------- bylaardt · 2016-08-28 13:25 if you have the same set of fields, try this: Code: SQL  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i SELECT * FROM table1 -- First resultsetUNION SELECT * FROM table2 -- Second resultset ---------------------------------------------------------------------- nocoder · 2016-08-28 13:35 I wrote some code on github, it seems works (only TODBCConnection). https://github.com/UnlicensedCoder/sqldb_odbc_multiresultsets