Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Технологии Клиент/Сервер >> Разработка клиентной части >> ТТаblе и SQL

[Назад]    [Содержание ]    [Вперед]

  


ТТаblе и SQL


Компоненты ТTable большей частью используются для доступа к данным в локальной среде. Они разработаны специально для выполнения задач, которых требуют локальные базы данных, например манипулирование всей таблицей, перемещение вперед и назад по таблице или поиск специфической записи в таблицею Эти операции "чужие" по отношению к SQL-серверам баз данных. Реляционные базы данных разработаны так, что доступ к ним осуществляется через наборы данных. Такие понятия, как следующая, предыдущая или последняя запись, неприемлемы к SQL-наборам данных. Хотя некоторые SQL-базы данных поддерживают так называемые "прокручиваемые" (или скроллируемые) курсоры, но и они чаще всего применяются только к полученному результирующему набору данных.

При сравнении компонентов ТТаble и SQL-баз данных особое внимание следует обратить на то, что команды, введенные с помощью компонента ТTаble, должны быть преобразованы в SQL-код, который используется базой данных. А такое преобразование сказывается на общей производительности приложения.

Для того чтобы убедиться в недостатках компонента ТTаble , рассмотрим процесс открытия ТTаble для получения нескольких записей. Время, затрачиваемое для открытия SQL-таблицы с помощью компонента ТTаble , прямо пропорционально числу полей и количеству метаданных (индексы и т.д.), присоединенных к SQL-таблице. Когда вы выполняете команду Tablel.Open;, BDE генерирует несколько SQL-команд к серверу для получения сведений о столбцах таблицы, индексах и т.п. Затем выполняется оператор SELECT для формирования результирующего набора, состоящего из всех столбцов и строк таблицы. Время, за которое открывается таблица, пропорционально размеру SQL-таблицы (количеству ее строк). И хотя компоненту необходимо небольшое количество строк для возврата клиенту, в ответ на запрос в результирующий набор передаются все строки. Это происходит всякий раз, когда открывается компонент ТTаble. В результате в очень больших таблицах, типичных для баз данных клиент/сервер, одна эта простая операция может выполняться около 20 секунд. Имейте также в виду, что некоторые SQL-серверы типа Sybase и Microsoft SQL не позволяют клиенту прерывать процесс возврата результирующего набора!

Несмотря на недостатки использования компонента ТTаble в клиентном приложении, он прекрасно подходит для доступа к таблицам малого размера, расположенным на сервере, а потому вы обязательно должны протестировать приложение, чтобы выяснить, соответствует ли его производительность поставленным задачам.

На заметку MIDAS обрабатывает возвращаемые пакеты данных несколько иначе. Более подробно вы сможете прочесть об этом в главе 31,"Разработка MIDAS".

Теперь рассмотрим методы FindKey() и FindNearest(). Хотя компонент ТTаble может выполнять поиск записей с помощью метода FindKey(), существуют определенные ограничения на его использование в SQL-базах данных. Компонент ТTаble может использовать этот метод только в индексированном поле (или полях, если вы выполняете поиск, основанный на значениях нескольких полей). Компонент TQuery не имеет таких ограничений, поскольку в этом случае вы выполняете поиск записи с помощью SQL.

Получить функциональность метода FindNearest() компонента ТTаble в SQL-коде не просто, однако возможно. Следующий оператор SQL аналогичен по функциональным возможностям методу ТTаble.FindNearest():

SELECT * FROM MPLOYEES
═════WHERE NAME >= "CL"
═════ORDER BY NOMENCLATURE

В данном примере результирующий набор устанавливает запись в искомую или следующую непосредственно за искомой позицию, где он должен быть. Проблема состоит в том, что этот результирующий набор возвращает все записи после искомой позиции. Ограничим поиск так, чтобы результирующий набор состоял только из одной записи:

SELECT * FROM EMPLOYEES
WHERE NAME = (SELECT MIN(NAME) FROM EMPLOYEES
WHERE NAME >= "CL")

В данном примере используется вложенный оператор SELECT. В нем внутренний оператор возвращает результирующий набор внешнему оператору SELECT. Внешний оператор затем использует этот результирующий набор для собственной обработки. Во внутреннем запросе в данном примере используется вычисляемая SQL-функция MIN() для возврата наименьшего значения столбца NAME в таблице EMPLOYEES. Этот результирующий набор из одной строки и одного столбца затем используется во внешнем запросе для получения остальных строк.

Применение компонента TQuery обеспечивает гибкость и эффективность вашего приложения, максимально используя богатые возможности SQL, чего невозможно достичь с помощью компонента Тtаble.



[Назад]    [Содержание ]    [Вперед]

  


  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017