![]() | ![]() Products ![]() ![]() ![]() ![]() |
Home » Technical Support » DBISAM Technical Support » Support Forums » DBISAM Client/Server » View Thread |
Messages 21 to 30 of 40 total |
![]() |
Mon, Mar 1 2010 8:03 AM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | Robert,
How many BLOB fields are being loaded in this scheduler ? It appears that the issue is repeated loadings of BLOB fields, which are done on a per-record, per-BLOB field basis. -- Tim Young Elevate Software www.elevatesoft.com |
Mon, Mar 1 2010 11:52 AM | Permanent Link |
Robert Rowlands | Tim.
There are 2 blob fields. One stores information about recurrence of events the other stores info about which Resources the events are associated with. I do not see why the Scheduler cannot download the lot and then do it's thing. As noted earlier I have used the DevExMemData component that is apparently like a TClientDataSet. I open the query for the events and then load the ExpressMemData from the query. I then connect it to the Scheduler. This has reduced load time for the 60 or so records to 26 seconds. That's just for one month - I only load a month and have to reload if the user wants dates outside of this. I was wondering about loading more data but in a different thread and am about to post a new question in regard to this. Rob. |
Mon, Mar 1 2010 12:00 PM | Permanent Link |
Robert Rowlands | Raul.
I've looked at you message and have made sure all machines have the same MTU (1458). I'm unable to log in without the VPN as I'm also checking folders and loading other files as well as using the DBISAM ports. Rob. |
Tue, Mar 2 2010 6:31 AM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | Robert,
<< There are 2 blob fields. >> Hmm, then it appears as though the scheduler is not caching the BLOB fields. The big problem with this is that DBISAM does not do so either (our other product, ElevateDB does). << As noted earlier I have used the DevExMemData component that is apparently like a TClientDataSet. I open the query for the events and then load the ExpressMemData from the query. I then connect it to the Scheduler. This has reduced load time for the 60 or so records to 26 seconds. That's just for one month - I only load a month and have to reload if the user wants dates outside of this. >> Yep, the repeated BLOB field references are probably eliminated when using the in-memory dataset. Another thing that you can do is enable cached updates for the dataset before trying to connect it to the scheduler: http://www.elevatesoft.com/manual?action=viewtopic&id=dbisam4&product=d&version=7&topic=Cached_Updates -- Tim Young Elevate Software www.elevatesoft.com |
Tue, Mar 2 2010 6:51 AM | Permanent Link |
Bruno Krayenbuhl | Robert,
> DBISAM 4.29b2 + BDS2006 < Do you have CalcFields or OnGetText refering to the blob fields ? If you do, every time you access a BlobField with AsString or any other similar method a request is send to the server thus generating a lot of network trafic. This is DELPHI behavior (TDataLink and TDataSet stuff in unit DB). If the physical network is slow, then the application becomes dramatically slow. If your query loads a limited number of records for display,I would suggest that you load it in a big gulp in a MEMORY TDBISAMTable stored in the client workstation and use that memory table data to display your information. To do that you need : - your TDBISamQuery say qryDevExEvents - a TDBISAMTable say mtblDevExEvents with DataBaseName=Memory, SessionName='', TableName=MemDevExEvents (for example) Fields : At least all the fields returned by the query with types and names exactly matching the query fields. Plus (not sure) any field you would like your grid to display. Define Indexes as it suits your needs. Make sure that AutoincField (ID in your case) is defined as IntegerField in mtblDevExEvents so you do not lose its value. Additional note : I have tried many 'in memory' tables but 'in memory' TDBISAMTable is the one I always go back to. Now methods that will handle the gulps : procedure TfmVPNTest.FormDestroy(Sender: TObject); begin DeleteMtblDevExEvents; // Make sure to delete the memory table end; procedure TfmVPNTest.DeleteMtblDevExEvents; // Clean up memory table begin if mtblDevExEvents.Exists then begin mtblDevExEvents.Close; mtblDevExEvents.DeleteTable; end; end; // Stuff all the result query in the local memory table procedure TfmVPNTest.qryDevExEventsAfterOpen(DataSet: TDataSet); var lMemoryStream:TMemoryStream; begin DeleteMtblDevExEvents; mtblDevExEvents.CreateTable; lMemoryStream:=nil; try lMemoryStream:=TMemoryStream.Create; qryDevExEvents.SaveToStream(lMemoryStream); // Sip query in MemoryStream qryDevExEvents.Close; // Not needed anymore. mtblDevExEvents.LoadFromStream(lMemoryStream); // Stuff it in local memory table mtblDevExEvents.Open; // TDBISAMTable (in memory) ready for use finally lMemoryStream.Free; end; end; Bruno. |
Tue, Mar 2 2010 10:10 AM | Permanent Link |
Robert Rowlands | Thanks Bruno .
I'll check the events and test out a DBISAM memory table. I was considering using these but assumed they are always on the Server. How do I get them to be on the Client machine? Rob. |
Tue, Mar 2 2010 10:19 AM | Permanent Link |
Robert Kaplan | <Robert Rowlands> wrote in message news:95B77720-4D31-45E1-95A3-62C6FE045F19@news.elevatesoft.com... > Thanks Bruno . > > I'll check the events and test out a DBISAM memory table. > > I was considering using these but assumed they are always on the Server. > > How do I get them to be on the Client machine? Local session. Robert |
Tue, Mar 2 2010 10:33 AM | Permanent Link |
Roy Lambert NLH Associates ![]() | Robert
>I'll check the events and test out a DBISAM memory table. > >I was considering using these but assumed they are always on the Server. > >How do I get them to be on the Client machine? They are (even in ElevateDB - at least at the moment), and since a different session would be involved you can't do a simple query to get them across. You have to run the query client side then stream the result set across. I've never done it myself but its a question that has been answered several times on these newsgroups. I just shoved stream client server local in at the new on-line search tool and got some useful stuff. Roy Lambert [Team Elevate] |
Tue, Mar 2 2010 12:10 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | Robert,
<< How do I get them to be on the Client machine? >> You can use the SaveToStream/LoadFromStream methods: http://www.elevatesoft.com/manual?action=viewtopic&id=dbisam4&product=d&version=7&topic=Loading_Saving_Streams Something like this will do what you want: procedure LoadFromTable(Source: TDBISAMTable); var TempStream: TMemoryStream; begin TempStream:=TMemoryStream.Create; try Source.SaveToStream(TempStream); MyLocalMemoryTable.LoadFromStream(TempStream); finally TempStream.Free; end; end; -- Tim Young Elevate Software www.elevatesoft.com |
Tue, Mar 2 2010 12:26 PM | Permanent Link |
Robert Rowlands | Thanks everyone for your help.
I'll try out on a couple of the tables I need to get across. With respect to blob caching Tim, I purchased ElevateDB v1 but it sits on my machine as I need a driver for the security component used for logging in. I think one may be out soon. |
« Previous Page | Page 3 of 4 | Next Page » |
Jump to Page: 1 2 3 4 |
This web page was last updated on Wednesday, August 14, 2024 at 07:31 PM | Privacy Policy![]() © 2024 Elevate Software, Inc. All Rights Reserved Questions or comments ? ![]() |