Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Компонент ADODataSet




Компонент ADODataSet служит для представления набора данных из хранилища данных ADO. По своим функциональным возможностям компонент в определенной мере аналогичен компонентам SQLDataSet и SQLSimpleDataSet, используемым в технологии dbExpress. Этот компонент позволяет получать данные из таблиц, SQL-запросов, хранимых процедур, файлов и т. д.

Тип команды, указываемой в свойстве CommandText, определяет свойство CommandType типа TCommandType, который определен так:

TCommandType = (cmdUnknown, cmdText, cmdTable, cmdStoredProc, cmdFile,
cmdTableDirect)

Здесь:

r cmdUnknown — тип не известен;

r cmdText — текст SQL-оператора или вызова процедуры (значение по умолчанию);

r cmdTable — имя таблицы;

r cmdStoredProc — имя хранимой процедуры;

r cmdFile — имя сохраненного файла набора данных;

r cmdTableDirect — имя таблицы, все поля которой возвращаются.

Значение свойства CommandText типа WideString определяет команду, которая выполняется. В качестве команды может быть задана строка с SQL-оператором, имя таблицы или имя хранимой процедуры. При необходимости могут быть заданы параметры с помощью свойства Parametrs. Выполнение команды, заданной с помощью свойства CommandText, происходит при открытии набора данных.

Установка соединения с хранилищем данных и управление набором данных аналогичны используемым для компонента ADOTable. Для отображения данных к источнику данных (компоненту DataSource) также подключаются компоненты отображения.

Команды ADO

Для выполнения команд предназначен компонент ADOCommand, являющийся реализацией объекта ADO Command в среде Delphi. Этот компонент служит для выполнения команд, не возвращающих результаты, например, SQL-операторов языка определения данных или хранимых процедур. Для выполнения хранимых процедур и SQL-запросов, возвращающих результаты в виде наборов данных, целесообразно применять компоненты доступа к данным ADODataSet, ADOQuery и ADOStoredProc.

Рассмотрим важнейшие свойства и методы компонента ADOCommand. Отметим, что большинство свойств компонента ADOCommand в Delphi эквивалентны свойствам объекта ADO Command.

Свойство CommandObject типа _Command предоставляет непосредственный доступ к базовому объекту команды ADO Command.

Тип команды, указываемой в свойстве CommandText, определяет свойство CommandType (см. описание компонента ADODataSet). Для свойства CommandType объекта ADOCommand значения cmdFile и cmdTableDirect являются недопустимыми.

Напомним, что значение свойства CommandText типа WideString определяет команду, которая выполняется с помощью метода Execute. В качестве команды может быть задана строка с SQL-оператором, имя таблицы или имя хранимой процедуры. При необходимости могут быть заданы параметры с помощью свойства Parametrs.

Текущее состояние компонента ADOCommand (объекта Command) определяет свойство States типа ObjectStates, который описан так:

TObjectState = (stClosed, stOpen, stConnecting, stExecuting, stFetching);

Здесь:

r stClosed — объект Command не активен и не соединен с хранилищем данных;

r stOpen — объект Command не активен, соединен с хранилищем данных;

r stConnecting — объект Command соединяется с хранилищем данных;

r stExecuting — объект Command выполняет команду;

r stFetching — объект Command получает данные от хранилища данных.

Условия выполнения команды ADO определяет свойство ExecuteOptions типа TExecuteOptions, который описан так:

TExecuteOption = (eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking,
eoExecuteNoRecords);

Здесь:

r eoAsyncExecute — асинхронное выполнение команды;

r eoAsyncFetch — асинхронная передача данных;

r eoAsyncFetchNonBlocking — асинхронная передача данных без блокирования потока;

r eoExecuteNoRecords — выполнение команды ADO без возвращения данных.

Выполнение команды ADO осуществляется с помощью одной из трех перегружаемых версий метода Execute с различными наборами параметров:

r function Execute: _Recordset; overload; — такое объявление метода используется при выполнении команды без параметров;

r function Execute(const Parameters: OleVariant): _Recordset;
overload; — в этом объявлении параметр Parameters определяет параметры команды;

r function Execute(var RecordsAffected: Integer; const Parameters: OleVariant): _RecordSet; overload; — здесь параметр RecordsAffected возвращает общее число обработанных запросом записей.

Пример приложения

Рассмотрим пример (рис. 18.6) приложения для работы с БД, использующего технологию ADO. Пусть назначением приложения является организация доступа к различным таблицам из базы данных, их редактирование и сохранение внесенных изменений на сервере.

 

Рис. 18.6. Вид формы при выполнении приложения

Основными компонентами приложения, используемыми для установления сое-
динения с базой данных и отображения данных, являются следующие: ADOConnection1, ADODataSet1, DataSource1 и DBGrid1. Кроме того, имеется ряд вспомогательных компонентов, служащих для управления работой приложения.

Соединение с хранилищем данных компонента ADODataSet1 выполнено через его свойство Connection, указывающее на имя ADOConnection1 компонента соединения. Для компонента ADOConnection1 с помощью его свойства ConnectionString установлено соединение с хранилищем данных. При этом использован файл связи с данными. Для наглядности в процедуре обработки события создания формы приведен оператор задания нужного значения свойству ConnectionString компонента ADOConnection1.

Для компонента DataSource1 его свойству DataSet установлено значение
ADODataSet1. Для компонента DBGrid1, используемого для отображения набора данных, его свойству DataSource установлено значение DataSource1.

Код модуля формы для решения поставленной задачи приводится далее (листинг 18.1).

Листинг 18.1. Пример приложения для работы с базами данных по технологии ADO

unit ADODataSet;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls;

 

type

TForm1 = class(TForm)

ADODataSet1: TADODataSet;

DataSource1: TDataSource;

DBGrid1: TDBGrid;

ADOConnection1: TADOConnection;

Panel1: TPanel;

UpdateButton: TButton;

GetTableButton: TButton;

Button1: TButton;

Edit1: TEdit;

procedure Form1Create(Sender: TObject);

procedure Form1CloseQuery(Sender: TObject; var CanClose: Boolean);

procedure UpdateButtonClick(Sender: TObject);

procedure GetTableButtonClick(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

public

procedure UpdateData;

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

const

BaseFileName = 'EMPLOYEE.ADTG';

 

procedure TForm1.UpdateData;

begin

{ Обновление данных на сервере }

ADODataSet1.UpdateBatch;

end;

 

procedure TForm1.Form1Create(Sender: TObject);

begin

ADOConnection1.ConnectionString:= 'FILE NAME=' + DataLinkDir + '\DBDEMOS.UDL';

ADODataSet1.Open;

end;

 

procedure TForm1.UpdateButtonClick(Sender: TObject);

begin

UpdateData;

end;

 

procedure TForm1.Form1CloseQuery(Sender: TObject; var CanClose: Boolean);

begin

if ADODataSet1.Active then

try

{ Обновление данных на сервере при закрытии формы }

UpdateData

except

on E: Exception do

begin

Application.HandleException(Self);

CanClose:= MessageDlg('Данные не сохранены/обновлены, выйти?',

mtConfirmation, mbYesNoCancel, 0) = mrYes;

end;

end;

end;

 

procedure TForm1.GetTableButtonClick(Sender: TObject);

begin

{ Повторное открытие табличного набора данных 'Country'}

ADODataSet1.Close;

ADODataSet1.CommandType:= cmdTable;

ADODataSet1.CommandText:= 'Country';

ADODataSet1.Open;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

ADODataSet1.Close;

ADODataSet1.CommandType:= cmdTable;

ADODataSet1.CommandText:= Edit1.Text;

try

ADODataSet1.Open;

except

on E: Exception do

begin

MessageDlg('Исправьте имя таблицы', mtError,[mbOK],0);

ADODataSet1.Close;

end;

end;

end;

end.

 

Первоначально при запуске приложения автоматически открывается таблица с именем 'Country'. При необходимости открыть другую таблицу для просмотра и редактирования ее имя следует ввести в однострочном редакторе (компонент Edit1) и затем нажать кнопку с заголовком Открыть таблицу с именем.

Обновление внесенных в открытую таблицу изменений происходит при нажатии на кнопку с заголовком Сохранить на сервере или автоматически при закрытии формы приложения.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных