The amount of data that was returned by a data connection has exceeded the maximum limit that was configured by the server administrator - sharepoint-2010

I have infopath form with SharePoint designer approval workflow.
I am showing some details on that form. but when I have more data in SharePoint List it is giving bellow error
"The amount of data that was returned by a data connection has exceeded the maximum limit that was configured by the server administrator"
I guess Infopath form is getting all the data from the list instead of particular row. can any one please suggest me to filter on current item ?

Resolution: Ensure to follow the below steps.
i. Open the central administration
ii. Go to General Application Settings
iii. InfoPath Form Services
iv. Configure InfoPath Form Services
v. Click on Data Connection Response Size
vi. By default it is 1500 kilobytes
vii. Change the Response Size in kilobytes (Increase the number).

In this case what can be happening is that the amount of data you’re pulling back in your queries has grown to an unmanageable size.
Another possibility is that you’re including additional columns that perhaps you don’t actually need to include – by removing the unnecessary fields this could immediately resolve your issue if you don’t require all the columns.
For office 365 this one going to work.
including additional columns that perhaps you don’t actually need to include – by removing the unnecessary fields this could immediately resolve your issue if you don’t require all the columns.

Related

How to force a cache refresh in MS Access

I am working on migrating a MS Access Database over to a newer SQL platform.
But, with all of the users who are currently using it, we're migrating slowly/carefully.
The first step is that we are re-writing the VBA code into C#, which is then deployed in a .dll along with the database.
Now, the VBA code calls into the C# to do the business logic, then the VBA continues to do the displays/UI, while Access still hosts the database.
The problem comes in that I have a report that is being run after the business logic from the C# in one place, and apparently MS Access has a cache, which clears every 5 seconds. So, the transaction that occurs in the C# code writes to the database, but the VBA code is still using the cache. This is causing errors, as the records added to the database (which the VBA report is trying to report on) don't exist in the cache yet...
I'm guessing that the C# .dll must be getting treated as a "second connection" to the MS Access database, which is what seems to typically cause this error in my searches (thinks that one process is writing, and the other is reading).
Since the cache is cleared out every 5 seconds, we can just put the process to sleep, and wake it up after 5 seconds, and then run the report, but that's pretty terrible for an end user.
And, making things difficult, the cache seems like it only gets used in the deployed version (so, when running from source / in debug mode, the error never happens).
Doing some searches, there seems to be plenty of people who have said "just refresh the cache." But, the question is: within VBA, how do you refresh the cache?
Any advice would be welcome.
Thanks
I've been fighting the same issue for years as I write a lot of tools around an old Powerbuilder application that has an Access MDB back end.
The cache does exist and it is VERY real. When data is inserted on a different connection than it is queried on, the cache can be directly observed and measured. It was also documented by Microsoft before they blackholed a bunch of their old articles...
Microsoft Jet has a read-cache that is updated every PageTimeout milliseconds (default is 5000ms = 5 seconds). It also has a lazy-write mechanism that operates on a separate thread to main processing and thus writes changes to disk asynchronously. These two mechanisms help boost performance, but in certain situations that require high concurrency, they may create problems.
I've found a couple workarounds that are not the best, but somewhat make due until I find something better or can re-write the app with a better back end database.
The seemingly best answer I've found (that may actually work for you since you say you need VBA) is to use JRO.RefreshCache. I've been trying to figure out how to implement this using C# or VB.net without any luck. Below is a link to a code example where you execute the RefreshCache method on your 2nd connection that needs to pull the data. I have not tested this myself.
https://documentation.help/MSJRO/jrmthrefreshcachex.htm
A workaround I've found that will deliver the query results within 500ms to 1000ms of insert time (instead of anywhere between 500 and 5000 ms - or more):
Use System.Data.ODBC instead of OleDB, with connection string: Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=;
If someone knows how to use the JRO.RefreshCache method with OLEDB and C# or VB.net, I'd be forever grateful. I believe the issue is it's looking for an ADO connection to be passed in, not an OLEDB connection.
I not aware of ANY suggesting that some 5 second cache exits? Where did this idea come from????
Furthermore, if you have 5 users, then you not going to be able to update their cache, are you?
In other words, the issue of some cache for one user still not going to solve or work with mutli-users anyway, is it?
The simple matter is if you load up a form with 100 reocrds, and then other users are ALSO working on that 100 rows, then all users will not see other changes until such time you tell access to re-load the form.
You can do this with a me.Refresh in the form, and then it will show changes made by other users (or even your c# code!!!).
However, that not really the soluion here.
How does near EVERY system deal with this issue?
Answer:
You don't, you "design" the software to take the user work flow into account.
So, in place of loading up a form with 100 rows of data? (which you should not, unless SUPER DUPER reason exists for doing that).
The you provide a UI in which the user FIRST searches for whatever it is they want to work on.
In other words, say you just booked a user on a tour. Now, they call the office back, and want to change some details of that tour. But, a different tour staff might pick up the phone. So, now a 2nd user opens the tour?
So, you solve that issue by NOT loading all the tours into that form in the first place.
you provide a search screen, so they can search for the user, find the user, maybe type in a invoice number or whatever.
You display the results in a pick list, and then launch the form to the ONE record (and perhaps detail records from child tables).
So there no concpet of a cache in Access anymore then there is in c#.
However, if you load up a datatable in c#, and then display that data?
Well, what about the other users on that system. They will not see changes to that data ANY MORE then the current access form.
So, if you want to update some data in c#? Then fine, but you need/want to do two things:
First, before you call any c# code that may update the current form reocrd? You need to FORCE a data save of that current record BEFORE you call any code, be it VBA code, or c# code that going to update that current reocrd the user is working on.
You can in Access save the current reocrd in MANY different ways, but the typical approach is:
' single record save - current record
if me.dirty then me.dirty = false
' VBA or c# code goes here.
' optional refresh the current form to reflect changes
me.Refresh
So, in most cases, it is the "design" of your software that will solve this issue.
For example, in the tour example, or in fact ANY system, the user can't work, can't update, and can't do their job UNLESS they first find/search and have a means to bring up that form + record data in the first place.
So, ANY typical good design will:
Ask the user for that name, invoce number or whatever.
Display the results of the search, and THEN allow the user to pick the record/data to work on. When they are done, they close that form and are RIGHT BACK to the search form to do battle with the next customer or task or phone call or whatever.
So, a search form might look like this:
In above, I typed in smi, and then displayed a pick list.
The user can further type in say part of the first name, and thus now get this:
So, maybe they type in a invoice number, customer number, booking number or whatever.
So, you display the results, and then they can select the row or "thing" to work on.
thus, we click on the row (or above glasses button), and then jump to the ONE record.
so, the user does whatever they have to do with the customer. Now, when done, they close the ONE thing, the ONE main reocrd.
This not only saves the data (so others in the office can now use that booking data), but it also means the data is saved. and they are NOW right back at the search screen, ready to do battle with the next customer.
So, not only does this mean we have a VERY bandwith friednly design (we only pull the one main reocrd into that form), but it also is better for work flow.
The Access form's cache thus becomes a non issue, since we only dealing with the one record.
And as I pointed out, if the system is multi-user, then you NOT going to be able to udpate and deal with multiple users cached data anyway, are you?
Think of ANY system you EVER used from a software point of view.
When you use google, does it download the WHOLE internet, and then you use ctrl-f to search megs and megs of data in the browser?
Nope!
you search first, get a list of that search, and THEN pick one!!
And when that list is display, maybe others on the internet are udpateing, and add new data - but if that was cached in your browser, then it would not work!!!
And same goes for a desktop accounting system. You don't load up all accounts, and THEN have the user go ctrl-f to search all the data. You search for the customer, invoice number and PICK ONE to work on.
And it does not make sense to load up a form with 1000 customers, and then go ctrl-f to find that customer. Same goes for a instant banking machine. It does not download ALL customers and THEN let you search. It asks you FIRST to get what you need. So, be it browser based, desktop based, or JUST ABOUT ANY software you use?
You quite much elminate the cache issue, since not pre-loading boatloads of data, but asking and letting the user search for the data they need.
So, in regards to the Access form data and cache?
If you are on a form, and call VBA code, or c# code or whatever?
If that code update the current form, you have NO MORE OR LESS of a issue when calling VBA code, or c# code!!!! If that code updates the current form, and the reocrd is dirty (has pending edits), then you get that message about the current form's reocrd having been udpated by another user!!!
So, your cache issue does NOT IN ANY WAY exist MORE or LESS as a issue in typical Access software.
As a genreal rule, if you are on a form with pending edits, and say want to pop up some form to edit releated data?
You have to ensure that pending edits are SAVED before you launch an form that can edit the same data, or run code that can/may edit that data.
As a result, ZERO cache issues should exist, and they no more or no less exist when calling sql or VBA update code in a form then calling some c# code from that form.
So, write the pending update for that form.
Then run your VBA, SQL, or c# code.
And then do a me.Refresh to display any changes made by those external routines.
there is no documetjion, or ANY article I can find that suggests some kind of 5 seocnd cache or update - it is a urban myth, and your software challenge here in regards to use c# or VBA, or even SQL server stored procedures?
They are all the same issue, and I dare say that often access is used as a front end to SQL server, and ALL OF the SAME issues exist when using SQL server with ms-access.

Unbound checkbox in continuous form

I'm beating a dead horse here, but I still haven't found the answer I am looking for. I am throwing together an Access Database that deals with lockout procedures for our various machines at work. I have a continuous form setup so that it dynamically populates based on various complex/machine criteria. Since only portions of the machines need to be locked out at a given time, it is necessary to select the various devices from the list that was populated dynamically. When users select the various devices that they wish to lockout, they will then be able to automatically print tags for the selected devices. Which is where the unbound checkbox conundrum comes in... Yay!!!
Since it is possible for multiple users to be using the database at a given time, I don't believe that binding the checkbox to a yes/no selection within my table is the correct path to take. This is due to the fact that having multiple users picking various devices would result in additional/unnecessary tags being printed out to each user. I know that it's possible to have an unbound checkbox within a continuous form, but I have not come across any sample code that has this functionality.
If there is another path that I can take, please offer any suggestions as I am an Access novice, and am open to new ideas.
EDIT
I should mention that the database will reside within Citrix. I am not sure if this affect anything, but its worth mentioning at least.
I am assuming that you are using a client server setting, where the application file resides on a local machine. (Or on a local instance in the case of RDP / Citrix)
In that case, you can have a local table to save the checkbox information without causing any conflicts between users.
You will be using a bound checkbox, so problem solved.

exceeds the list view threshold 5000 items in Sharepoint 2010

I'm upgrade my sp 2007 to sp 2010 and I have a form library has more then 5000 items.
Default view of form library filter items and show only 10-20 item to users.
After upgrade sp2010 All users get below error when going to form library expect site collection admins.
I think this is a permission issue but i did not find any source to solve this issue, have any idea ?
This view cannot
be displayed because it exceeds the
list view threshold (5000 items)
enforced by the administrator.
To view items, try selecting another view or creating a new view.
If you do not have sufficient
permissions to create views for this
list, ask your administrator to modify
the view so that it conforms to the
list view threshold.
You can increase the List View Threshold beyond the 5,000 default, but it is highly recommended that you don't, as it has performance implications. The recommended fix is to add an index to the field or fields used in the query (usually the ID field for a list or the Title field for a library).
When there is an index, that is used to retrieve the item(s); when there is no index the whole list is opened for a scan (and therefore hits the threshold). You create the index on the List (or Library) settings page.
This article is a good overview: http://office.microsoft.com/en-us/sharepoint-foundation-help/manage-lists-and-libraries-with-many-items-HA010377496.aspx
The setting for the list throttle
Open the SharePoint Central
Administration,
go to Application
Management --> Manage Web
Applications
Click to select the web application that hosts your list (eg. SharePoint - 80)
At the Ribbon, select the General Settings and select Resource Throttling
Then, you can see the 5000 List View Threshold limit and you can edit the value you want.
Click OK to save it.
For addtional reading:
http://blogs.msdn.com/b/dinaayoub/archive/2010/04/22/sharepoint-2010-how-to-change-the-list-view-threshold.aspx
I had the same problem.please do the following it may help you:
By Default List View Threshold set at only 5,000 items this is because of Sharepoint server performance.
To Change the LVT:
Click SharePoint Central Administration,
Go to Application Management
Manage Web Applications
Select your application
Click General Settings at the ribbon
Select Resource Throttling
List View Threshold limit --> change the value to your need.
Also change the List View Threshold for Auditors and Administrators.if you are a administrator.
Click OK to save it.
SharePoint lists V: Techniques for managing large lists :
Tutorial By Microsoft
Level: Advanced
Length: 40 - 50 minutes
When a SharePoint list gets large, you might see warnings such as, “This list exceeds the list view threshold,” or “Displaying the newest results below.” Find out why these warnings occur, and learn ways to configure your large list so that it still provides useful information.
After completing this course you will be able to:
Learn what the List View Threshold is, and understand its benefits.
Create an index so that you can see more information in a view.
Create folders to better organize your large list.
Use Datasheet view for fast filtering and sorting of a large list.
Learn what the Daily Time Window for Large Queries is.
Use Key Filters for fast filtering within Standard view.
Sync a large list to SharePoint Workspace.
Export a large list to Excel. Link a large list in Access.

How to enable a view in SharePoint2010 where there can be more than 8 Lookup columns present?

I have a SharePoint2010 list which contains around 15 lookup columns. I have created a view in which all 15 are present. When I try to open that view I get the following message:
This view cannot be displayed because
the number of lookup and workflow
status columns it contains exceeds the
threshold (8) enforced by the
administrator.
Is there a way to remove or change this limitation? Thanks.
I've discovered that this limitation is not a limitation, but a setting - and it can be altered! Go to Central Administration and then browse to:
Application Management > Manage Web Application.
In the Web Application list, select the web application you need.
Then go to General Settings > Resource Throttling.
In the Resource Throttling window, scroll down to List View Lookup Threshold and change the value to the number that suits your needs.
Of course, increasing this value degrades the performance, as there's more drilling through SQL tables, so be careful not to go too far. And one more thing: changing this value not only affects the list views, but it also changes the behavior of the methods that work with list items. E.g. having this option set to 8 will result in returning a maximum number of 8 lookup fields for a list item, when the GetListItems(query); method is called (Client Object Model). Increasing this number to, say 15, would consequently increase the maximum number of returned lookup fields for a list item. Pretty neat!
You're right, Boris. Though, everyone, keep in mind that this setting cannot be changed in SharePoint 365/Online.
That's true Boris, but keep in mind that increasing this threshold will impact the performance heavily
Please check this article from MSDN

Cache data in SQL CE database

Background
I have an SQL CE database, that is constantly updated (every second).
I have a (web) application that allows a user to look at the data in real-time. At some point a user can click "take a snapshot" button, and it will open the snapshot in a different window.
And then on that form, there is "print" and "download" buttons that will either generate a page for printing, or will stream the data as CSV file - but same data snapshot has to be used, i.e. I can't go to the DB to get latest data for that.
Details
SQL CE dabatase is exposed through WCF web service.
Snapshot consists of up to 500 records, 10 columns each. Expiration time on the snapshot of 2 hours is sufficient.
It is a low-traffic application, so I don't expect more than few (5) connections at the same time.
Loosing snapshot is not a big deal, user can simply generate new one.
database is accessed by self-hosted WCF web service using Linq-to-SQL.
Web site is ASP.NET MVC hosted on UltiDev Cassini.
database, and web site are most likely be on the same box, when deployed. The entire app is intranet bound.
Problem
I need to cache the snapshot of the data at the moment user pressed "take a snapshot" button, so that I can use same data to generate print page, or generate a file for download.
Solution 1:
Each time there is a need to generate a snapshot, I will create a table in the database. Since there are no temp tables in SQL CE, I will need to clean it up myself.
Solution 2:
Cache the snapshot in-memory on either DB server, or web server.
Question:
Is there anything wrong with proposed solutions? Any different solution suggestions?
A consideration is the typical usage pattern. Do most snapshots eventually result in either being printed or exported or both?
If such is the case, we might as well "get it in memory" (temporarily) in the form of a non blocking (asynchronous) select statement from the device to the server. In this fashion the data will "be there" or well on its way when user decides to use it.
If on the other hand many snapshot end up not being effectively used, Solution #1 seems quite ok (maybe the table could be named after the account/user, hence guaranteeing "self clean up" based on the number of snapshot a user can maintain at a given time (though it seems to be just one, with even the tolerance of loosing it sometimes).
500 rows by 10 columns isn't really very large at all. For the sake of simplicity in this case, I might just generate the CSV data at the same time I generate the initial snapshot page, and then place the CSV data in a hidden field in the snapshot page. The "Print" and "Download CSV" buttons would then POST the form that contains the CSV data to a Print page that generates the printable version from the posted CSV data, or a page that streams the CSV directly back to the client's browser, respectively. This way, at least, you wouldn't have any clean-up issues to deal with, and you avoid having to cache something on the server (either in the cache proper or in the database) that might well end up never being used at all.
If you cached the CSV data in a hidden field client-side, you could even handle both the printing and the CSV display completely client-side with javascript, although I don't know if that's worth the trouble or not.