Solved

eoAsyncExecute on ADO Stored Proc. not updating RecordSetState

Posted on 2001-06-19
3
1,310 Views
Last Modified: 2007-11-27

When running a query asynchronously, using ExecuteOptions eoAsyncExecute, I thought I could check the state of the component, to see whether it is done or not, by checking RecordSetState.  Unfortunately, it is always an EmptySet.  I have the latest ADO patch for Delphi 5 and I am running against a SQL 7.0 database.  Is there a bug here or am I doing something wrong?

Thank you,

ARW
0
Comment
Question by:ARW
  • 2
3 Comments
 
LVL 7

Accepted Solution

by:
Motaz earned 100 total points
ID: 6209211
I turn AsyncExecute and AsyncFetch options to True and it works:

  AdoStoredProc1.Open;
  Memo1.Clear;


this is on a timer event:


  Caption:= IntToStr(Byte(AdoStoredProc1.State));
  if Byte(AdoStoredProc1.state) = 1 then
  begin
  with AdoStoredProc1 do
  while not Eof do
  begin
    Memo1.Lines.Add(Fields[0].AsString);
    Next;
  end;
  AdoStoredProc1.Close;
  end;
0
 

Author Comment

by:ARW
ID: 6212865
Interesting implementation.

Thanks for pointing out to me that I had to set two properties of the execute options, not just one.  it still did not work though.  I had to change to client side cursor and ctKeyset cursor type.  Still did not work.  Finally, I noticed that your code snippet used an open.  My stored proc returns no records.  It calls a bunch others that update a temp table, so I used ExecProc method instead of Open.

You have to do an Open to get it to work.  Here is what mine looks like.

procedure TdmData.GetClientData;
var
work : tobjectstates;
begin
with spGetClientItems do
  begin
  Close;
  CommandTimeout := 3000;
//     spGetClientItems.ExecuteOptions := [eoAsyncfetch];
  Parameters.ParamValues['@CustID'] := CurrentClient;
  Parameters.ParamValues['@Modality'] := CurrentModality;
  Parameters.ParamValues['@StartDate'] := StartDate;
  Parameters.ParamValues['@EndDate'] := EndDate;
  Parameters.ParamValues['@SourceDB'] := SourceDB;
work := Tcustomadodataset(spGetClientItems).recordsetstate;
   open;  // was execproc
   while ( (RecordsetState = [stConnecting] ) OR
              (RecordsetState = [stExecuting] ) OR
             (RecordsetState = [stFetching]) ) do
      begin  // if get in here it is working
      Sleep(200);
      Application.ProcessMessages;
      end;    // while
   Close;
  End;
end;



Thanks for your help,

ARW
   
0
 

Author Comment

by:ARW
ID: 6216419
I seem to have the asynchronous behavior I am looking for, except when the query gets done, it closes itself without an explicit close by me.  Then I have to reopen it, which defeats the purpose.

Any ideas?
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Using idhttp to login to instagram 2 118
can't find the executable in Simulator 1 112
scroll down TListBox component in Delphi 1 30
Firemonkey BASS_Init into a thread 17 52
A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…

713 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question