I have grid control on form and when current record change i need to load RTF stored in DB. It works fine in general, but when i switch records i can see changes of mouse cursor to hourglass and back to regular:
function TComments.GetDocument(AID: integer; ADst: TStream):Boolean;
begin
try
SelectQuery.Close;
SelectQuery.Params.Clear;
SelectQuery.SQL.Text :=
'SELECT Dokument from Kommentarer ' +
'WHERE ID = :ID';
SelectQuery.ParamByName('ID').AsInteger := AID;
SelectQuery.Open;
Result := SelectQuery.RecordCount > 0;
if Result then
(SelectQuery.Fields[0] as TBLOBField).SaveToStream(ADst);
finally
SelectQuery.Close;
end;
end;
If i comment "SelectQuery.Open;" then cursor doesn't switch. I supposed there should be option in TFDQuery (or connection), but i can't find anything. Any help?
UPDATE. As TLama suggested, i placed WaitCursor:TFDGUIxWaitCursor at my form (one place for app) and use it this way:
StoredCursor := WaitCursor.ScreenCursor;
WaitCursor.ScreenCursor := gcrNone;
try
// access DB with queries
finally
WaitCursor.ScreenCursor := StoredCursor;
end;
UPDATE2: Two more ways to do it.
TFDQuery.ResourceOptions.SilentMode=True
(simplest way to disable hourglass cursor for specific queries, property name is bad, but according to doc it doesn't block any dialogs, only changes of cursor).FADGUIxSilentMode=True
from unit FireDAC.UI.Intf (not best, but probably simplest way to disable changes of cursor globally for FireDAC).This is covered in this FAQ
set:
How can I turn off the SQL hourglass completely ?
a) To disable the wait cursor completely for an application, use TFDGUIxWaitCursor with Provider = 'Console'. The 'Console' provider contains an empty wait cursor implementation and the wait cursor will no longer be shown by FireDAC. If a mouse cursor is still changing, then check that only FireDAC.ConsoleUI.Wait unit is included into your application and FireDAC.VCLUI.Wait and FireDAC.FMXUI.Wait are not included. Note that you will not have the ability to turn the wait cursor on again.
b) To disable the wait cursor, but to have the ability to enable it again later, use code like the following:
FDWaitCursor1.ScreenCursor := gcrNone;
or
FDManager.ResourceOptions.SilentMode := True;
c) To disable the wait cursor and FireDAC dialogs, but to have the ability to enable them again later, set the FDManager.SilentMode property to True. This will disable all wait cursors and FireDAC dialogs, including:
- The error dialog
- Async execution dialog
- Login dialog
- Script progress dialog
Setting ResourceOptions.SilentMode to True disables only wait cursors.
Since you want to turn off that cursor only for that query execution, use the option b and wrap your code with something like this:
var
OldCursor: TFDGUIxScreenCursor;
begin
OldCursor := FDWaitCursor1.ScreenCursor;
FDWaitCursor1.ScreenCursor := gcrNone;
try
// your code goes here
finally
FDWaitCursor1.ScreenCursor := OldCursor;
end;
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With