Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Proektirovanie_BD_v_Delphi_VTiP.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.82 Mб
Скачать

8.4.8Связной компонент tadoConnection

Компонент TADOConnection осуществляет связь остальных компонентов с MS ADO. Для этих целей у компонента TADOConnection имеется свойство ConnectionString. После того как с помощью свойства ConnectionString связь с данными установлена, на компонент могут ссылаться другие ADO-компоненты, разделяя установленную им связь. Однако роль компонента TADOConnection может быть гораздо шире, чем просто концентрация соединений. С помощью своих свойств и методов он может осуществлять точную настройку соединения, обеспечивать необходимый уровень изоляции транзакций, управлять транзакциями и т. д.

Для установления связи нужно с помощью свойства ConnectionString сформировать связные параметры и затем установить значение True в свойство Active или вызвать метод Open.

Для разрыва связи выполняется метод Close компонента или в его свойство Active устанавливается значение False. Компонент содержит в свойстве ConnectionObject ссылку на базовый ADO-объект, с помощью которого и работает сам компонент. Это свойство открывает возможности детального управления связью, если, разумеется, программист хорошо знаком с техникой ADO.

В свойствах CommandCount и DataSetCount содержится количество соответствующих объектов, которые обслуживаются данным компонентом. В сочетании со свойствами Commands и DataSets программист может получить доступ к любому интересующему его объекту. Например:

var

i: integer;

begin

for i := 0 to (ADOConnection1.DataSetCount - 1) do

ADOConnection1.DataSets[i].Open;

end;

С помощью методов GetProcedureNames и GetTableNames можно получить список всех хранимых процедур и таблиц. Например:

ADOConnection1.Open;

ADOConnection1.GetTableNames(ListBox1.Items)

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

С помощью метода BeginTrans стартует новая транзакция. Методы CommitTrans и RollbackTrans подтверждают или откатывают транзакцию. Разрешается произвольная глубина вложенности транзакций, то есть после старта одной транзакции может немедленно стартовать следующая и т. д. Уровни разграничения транзакций (свойство IsolationLevel) несколько отличаются от аналогичных уровней BDE и в некоторых случаях могут не поддерживаться сервером БД. Транзакция, стартующая с помощью компонента TADOConection, разделяется всеми другими связанными с ним компонентами. С помощью свойства InTransaction программа может определить, завершилась ли ранее начатая транзакция.

8.4.9Компонент tadoCommand

Компонент TADOCommand предназначен в основном для реализации SQL-запросов, не возвращающих никаких данных. К ним относятся практически все запросы языка DLL, т.е. запросы, которые не начинаются зарезервированным словом SELECT.

Примечание. Хотя конкретная реализация транслятора SQL зависит от выбранного провайдера, однако в целом компоненты ADO следуют промышленному стандарту SQL92.

Исполнение запросов языка DLL в ADO идет несколько иначе, чем запросов SELECT. В BDE в компонентах TQuery для реализации запросов SELECT используется метод Open (или свойство Active), в то время как DDL-запросы выполняются методом ExecSQL. В ADO для DDL-запросов выделен специальный компонент TADOCommand. Хотя, при некоторых обстоятельствах (см. ниже) компонент TADOCommand способен возвращать наборы данных, а компонент TADOTable имеет в своем составе метод ExecSQL, позволяющий ему выполнять DDL-запросы. Иными словами, одни и те же запросы в рамках ADO можно выполнять с помощью двух разных компонентов TADOCommand и TADOTable, вернее даже трех компонентов, поскольку рассмотренный выше связной компонент TADOConnection также способен выполнять команду, например:

procedure TForm1.Button1Click(Sender: TObject);

begin

ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'

+ 'Data Source=C:\DATA\dbdemos.mdb';

ADOConnection1.Connected := True;

ADODataSet1.Recordset := ADOConnection1.Execute('SELECT * FROM CUSTOMER')

end;

Текст исполняемой команды хранится в свойстве CommandText компонента TADOCommand. Компонент способен за один прием исполнять одну и только одну команду.

Особенностью компонента TADOCommand является специализированный текстовый редактор, с помощью которого можно сформировать команду. Этот редактор (рисунок 10.14) вызывается щелчком на кнопке с многоточием в строке свойства CommandText инспектора объектов.

Рисунок 7.81 – Редактор команды компонента TADOCommand

Все окно редактора поделено на три части. В левой верхней части окна отображается список таблиц БД, с которой связан компонент, а в нижней левой части — список полей, выделенной таблицы. Для выделенной таблицы, всю остальную часть занимает собственно текстовый Редактор. Справочные окна в левой части лишь облегчают набор текста, который в основном формируется вручную в правом поле. Например, необходимо вручную ввести слово SELECT, выделить в нижнем списке строку * и щелкнуть на кнопке Add Field to SQL. Затем вновь вручную вводится слово FROM, в верхнем списке выделяется таблица BOOKS, выполняется щелчок на кнопке Add Table to SQL и т. д.

Как уже упоминалось, компонент TADOCommand способен возвращать записи. Для этого в него включены целых три реализации метода Execute, две из которых как раз и предназначены для создания наборов записей. Использование возвращаемого НД возможно с помощью компонента-посредника TADODataSet по следующей схеме:

ADODataSet1.Recordset := ADOCommand1.Execute;

Для создания НД множество ExecuteOptions не должно содержать значения eoExecuteNoRecords.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]