function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion

queryMore like functionality in apex



I have a query like


String querySoql = 'Select Id, Name from Account limit 10000';



Now I have the following functionality to implement them..


setCon = new ApexPages.StandardSetController(Database.query(soqlQuery));



where next and prev are used for page wise move..


Since the number of rows in the objects is more than 10000 it is not showing the values in the page instead giving following error


Content cannot be displayed: Too many query rows: 10001


Content cannot be displayed: retrieve id limit reached



Any help on this will be much appreciated.


You will need to pass a querylocator to the setcontroller, something like the code below...



public class QlController {
    public PageReference next() {;
        return null;
    public Integer totalRows {
        get {
            return setCon.getResultSize();
    public PageReference previous() {
        return null;
    public ApexPages.StandardSetController setCon {
        get {
            if(setCon == null) {
                setCon = new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Id, Name from Account LIMIT 10000]));
            return setCon;
    public List<Account> getAccs() {
        return (List<Account>) setCon.getRecords();

 Page code:


<apex:page controller="QlController">
<apex:form id="dataform">
    <apex:commandLink value="Previous" action="{!previous}" rerender="dataform" />
    <apex:commandLink value="Next" action="{!next}" rerender="dataform" /><br /><br />
    <apex:repeat value="{!accs}" var="acc" rows="10">
        {!acc.Name}<br />



Hope this helps





I have been using getQueryLocator as well..still it was giving the problem...same error :smileysad:


The code I posted works like a charm, tested with 12k+ accounts.


OK..that I got but the thing is if the number of rows is 11000 there any chance that I can slide the cursor to the records of 10000 to 11000 portion?


Not sure what the best approach is there, besides filtering the criteria in your selection. You will probably need to get creative. Perhaps create 2 setcontrollers and then check whether you reached the end of setcontroller 1 with hasnext() and switch to setcontroller 2 if you reached the end of the first. Setcontroller 2 could perhaps be ordered in reverse direction as 1....


Just a haunch, not sure if this is the best approach.


Problem will be see if I have 25K records... now with this two controller approach I will get first 10K with ascending and last 10K with descending...the 5K records in between left...


Now even if we set another controller and get the criteria it will be some record specific..


now for another set if I get say 35K set of records..this approach won't work...


I have a blog post with a demo and source code that uses the StandardSetController:


Visualforce Page with Pagination


Jeff Douglas

Appirio, Inc.


Author: The Salesforce Handbook


Thanks a lot Jeff..


I read ur blog during my pagination work..and I am reading again..


the only difference is...I have created page numberwise buttons to navigate... life FIRST PREVIOUS 1 2 3 4 5 NEXT LAST..


Can I send you the code..can tell me is there any wrong there for the navigattion?






Nice blog Jeff, does that approach (although theres a limit of 100 in the query) work on all records, if the object has say 15k+ records?


I have another question is that if I am using getQueryLocator() then how can I test to know that the cursor has actually slided and showing me 12Kth record?

Is there any way to test and ensure it?