Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
Последняя версия Следующая версия справа и слева
programmirovanie_v_dx:sql_zaprosy [2018/04/01 13:17]
jurist23rus создано
programmirovanie_v_dx:sql_zaprosy [2018/04/23 11:12]
7bit Форматирование кода
Строка 1: Строка 1:
-====== SQL-запросы ======+====== 24. SQL-запросы ======
  
 Синтаксис SQL-выражений в DataExpress (DX-SQL) почти такой же, как в Firebird-SQL.  Синтаксис SQL-выражений в DataExpress (DX-SQL) почти такой же, как в Firebird-SQL. 
Строка 34: Строка 34:
 with SQLSelect('select id, [название] from [запчасти] order by [название]') do  with SQLSelect('select id, [название] from [запчасти] order by [название]') do 
 begin begin
- while not EOF do  +  while not EOF do  
- begin +  begin 
-  // Какие-то действия +    // Какие-то действия 
-  …  +    …  
-  MoveNext; +    MoveNext; 
- end; +  end; 
- Free;+  Free;
 end; end;
 </code> </code>
Строка 64: Строка 64:
  
 Кроме того класс автоматически определяет генератор, который связан с формой. Так что при добавлении записи, id будет автоматически заполнен. Обращение к генератору тоже занимает какое-то время, поэтому для ускорения массового добавления записей вы можете устанавливать id вручную, без помощи генератора. Для этого установите свойство UseGenerator в False. Правда, вам все равно придется корректировать генератор для обеспечения нормальной работы формы. Это делается процедурой SQLExecute. Кроме того класс автоматически определяет генератор, который связан с формой. Так что при добавлении записи, id будет автоматически заполнен. Обращение к генератору тоже занимает какое-то время, поэтому для ускорения массового добавления записей вы можете устанавливать id вручную, без помощи генератора. Для этого установите свойство UseGenerator в False. Правда, вам все равно придется корректировать генератор для обеспечения нормальной работы формы. Это делается процедурой SQLExecute.
 +
 +===== Выполнение произвольных SQL-инструкций =====
 +
 +Процедура SQLExecute позволяет выполнить произвольный SQL-скрипт, передаваемый в параметр SQL.
 + 
 +''procedure SQLExecute(const SQL: String)''
 +
 +Инструкции отделяются точкой с запятой. Процедура не понимает имена форм и полей в квадратных скобках, поэтому придется использовать только реальные имена таблиц и полей базы данных. 
 +
 +Понять какая таблица связана с формой можно по ее идентификатору (свойство Id). К идентификатору добавляется префикс «t»:
 +
 +'''t' + IntToStr(Form.Id)''
 +
 +Поле таблицы можно определить по идентификатору dx-компонента:
 +
 +'''f' + IntToStr(dxEdit.Id)''
 +
 +===== Редактор SQL-выражений =====
 +
 +Редактор поможет вам составить выражение SQL. Откройте редактор:\\
 +
 +{{ :programmirovanie_v_dx:ris_18.jpg?nolink&600 |Рис 18}}\\
 +
 +{{ :programmirovanie_v_dx:ris_19.png?nolink&600 |Рис 19}} \\
 +
 +Прямо в редакторе можно проверить выражение. Результат работы запроса отображается внизу. Нажмите вторую кнопку на панели инструментов, чтобы скопировать выражение в буфер обмена. Теперь вы можете его вставить в скрипт. Строки обрамляются в кавычки и соединяются символом''+''. Можно сделать наоборот, вставить скопированный текст SQL из скрипта в редактор. Для этого нажмите третью кнопку на панели инструментов. Лишние кавычки и символы ''+'' удаляются.
 +
 +===== Сводные таблицы, таблицы и SQL-запросы =====
 +
 +Сводные таблицы обычно используются в связке с запросом (TdxQueryGrid). Но если запрос не привязывать, то их можно использовать для отображения произвольных данных, например полученных SQL-запросом.
 +
 +Также можно использовать таблицу (подчиненную форму) для отображения результата SQL-запроса. Эти данные уже можно использовать для печати шаблона.