Данная статья посвящена группированию SQL команд в приложении. Она основана на официальной документации.
При группирове DBMS компилирует инструкции в единый план исполнения. Инструкции выполняются одновременно. Это минимизирует сетевой трафик и загрузку. После исполнения DBMS возвращает клиентские множества.
Управление полученными множествами
FireDAC позволяет управлять множествами одно за другим, используя метод NextRecordSet. Чтобы получить все данные сразу, необходимо включить FetchOptions.AutoClose в False до исполнения команды. Иначе сразу после достижения конца множества EoF для первого курсора, оно будет закрыто. Далее, в документации приводится такой пример для SQL сервера
1 2 3 4 5 |
FDQuery1.FetchOptions.AutoClose := False; FDQuery1.SQL.Add('select * from [Orders]'); FDQuery1.SQL.Add('select * from [Order Details]'); FDQuery1.Open; // [Orders] table rows are accessable here FDQuery1.NextRecordSet; // [Order Details] table rows available here |
Приложение может хранить каждое множество отдельно, для этого могут быть использован компонент TFDMemTable и его свойство Data.
1 2 3 4 5 6 7 8 9 10 11 12 |
FDQuery1.FetchOptions.AutoClose := False; FDQuery1.SQL.Text := 'select * from orders; select * from customers'; FDQuery1.Open; FDQuery1.FetchAll; // assign orders records to FDMemTable1 FDMemTable1.Data := FDQuery1.Data; FDQuery1.NextRecordSet; FDQuery1.FetchAll; // assign customers records to FDMemTable2 FDMemTable2.Data := FDQuery1.Data; |
FireDAC автоматически пропускает пустые множества. Далее приводится таблица особенностей БД с групповой обработкой команд