function IPDOStatement.getNumberRows: Int64;
IPDOStatement.getNumberRows returns the number of rows returned by a SELECT statement. This behaviour is not guaranteed for all databases and should not be relied on for portable applications.
Examples
Example 1. Return the number of selected rows
procedure example1;
var
count: Int64;
begin
stmt = db.query_as_is('SELECT * FROM fruit');
stmt.execute;
count := stmt.getNumberRows;
writeln (format('Number of rows that were selected: %d',[count]));
end;
The above example will output:
Number of rows that were selected: 167
Example 2. Counting rows returned by a SELECT statement
For most databases, IPDOStatement.getNumberRows does not return the number of rows affected by a SELECT statement. Instead, use TPDO.query_as_is to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then retrieve the number of rows that will be returned. Your application can then perform the correct action. Note: When MySQL is set to PREFETCH the result set, the IPDOStatement.getNumberRows result is accurate.
procedure example2;
var
sql: AnsiString;
begin
sql := 'SELECT COUNT(*) FROM fruit WHERE calories > 100';
stmt := db.query_as_is(sql);
stmt.fetch(row);
if (row.column[0].asInt64 > 0) then
begin
sql := 'SELECT name FROM fruit WHERE calories > 100';
stmt := db.query_as_is(sql);
while (stmt.fetch(row)) do
writeln ('name = ' + row.hash('name').asString);
end
else
writeln ('No rows matched the query.');
end;
The above example will output:
apple banana orange pear