Различия

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

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

Следующая версия
Предыдущая версия
programmirovanie_v_dx:sql_zaprosy [2018/04/01 13:17]
jurist23rus создано
programmirovanie_v_dx:sql_zaprosy [2019/03/14 19:02]
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>
Строка 63: Строка 63:
 Красным выделено, данные какой формы будут изменяться и поля, которые будут изменены. Красным выделено, данные какой формы будут изменяться и поля, которые будут изменены.
  
-Кроме того класс автоматически определяет генератор, который связан с формой. Так что при добавлении записи, id будет автоматически заполнен. Обращение к генератору тоже занимает какое-то время, поэтому для ускорения массового добавления записей вы можете устанавливать id вручную, без помощи генератора. Для этого установите свойство UseGenerator в FalseПравда, вам все равно придется корректировать генератор для обеспечения нормальной работы формы. Это делается процедурой SQLExecute.+Класс автоматически определяет генератор, который связан с формой. Свойство UseGenerator определяет как будет использован генератор: 
 +  * ugNotUse - генератор не используется, id записи задается вручную; 
 +  * ugAppend - id записи возвращается генератором при каждом добавлении записи
 +  * ugApplyUpdates - перед сохранением изменений в базу значение генератора увеличивается на количество добавленных записей, а id новых записей заполняется значениями. 
 + 
 +===== Выполнение произвольных 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 |Кнопка редактора на панели инструментов}}\\ 
 + 
 +{{ :programmirovanie_v_dx:ris_19.png?nolink&600 |Редактор SQL-выражений}} \\ 
 + 
 +Прямо в редакторе можно проверить выражениеРезультат работы запроса отображается внизу. Нажмите вторую кнопку на панели инструментов, чтобы скопировать выражение в буфер обмена. Теперь вы можете его вставить в скриптСтроки обрамляются в кавычки и соединяются символом''+''. Можно сделать наоборот, вставить скопированный текст SQL из скрипта в редактор. Для этого нажмите третью кнопку на панели инструментов. Лишние кавычки и символы ''+'' удаляются
 + 
 +===== Сводные таблицы, таблицы и SQL-запросы ===== 
 + 
 +Сводные таблицы обычно используются в связке с запросом (TdxQueryGrid). Но если запрос не привязывать, то их можно использовать для отображения произвольных данных, например полученных SQL-запросом
 + 
 +Также можно использовать таблицу (подчиненную форму) для отображения результата SQL-запроса. Эти данные уже можно использовать для печати шаблона.