SELECT операторов
Для выдачи операторов DQL, которые возвращают набор данных (например, SELECT)
TADOQuery
qry.Sql.Text := 'SELECT * FROM Users WHERE Name = :username';
qry.Parameters.ParamByName('username').Value := 'ian';
qry.Open;
TADODataSet
ds.CommandText := 'SELECT * FROM Users WHERE Name = :username';
ds.Parameters.ParamByName('username').Value := 'ian';
ds.Open;
TADOCommand
cmd.CommandText := 'SELECT * FROM Users WHERE Name = :username';
cmd.Parameters.ParamByName('username').Value := 'ian';
rs: _Recordset;
rs := cmd.Execute;
ADOCommand вернет собственный ADO IRecordset. Вы можете напрямую использовать интерфейс Recordset
(это не так сложно) или обернуть его в дружественный класс-оболочку Delphi:
ds.Recordset := rs;
или
qry.Recordset := rs;
операторы INSERT, UPDATE, DELETE
Для выдачи операторов DML, которые не возвращают набор данных (например, INSERT, UPDATE, DELETE)
TADOQuery
qry.Sql.Text := 'DELETE FROM Users WHERE Name = :username';
qry.Parameters.ParamByName('username').Value := 'ian';
qry.ExecuteOptions := [eoExecuteNoRecords];
qry.ExecSql;
TADOCommand
cmd.CommandText := 'DELETE FROM Users WHERE Name = :username';
cmd.Parameters.ParamByName('username').Value := 'ian';
cmd.ExecuteOptions := [eoExecuteNoRecords];
cmd.Execute;
TADODataSet : не может быть сделано. TADODataSet сгенерирует исключение, если оператор не возвращает набор данных
ds.CommandText := 'DELETE FROM Users WHERE Name = :username';
ds.Parameters.ParamByName('username').Value := 'ian';
ds.ExecuteOptions := [eoExecuteNoRecords];
ds.Open; // <-- Exception: "CommandText does not return a result set"
Форма диаграммы
| Component | Issue command | Return rows |
|-------------|---------------|-------------|
| TADODataSet | No | Yes |
| TADOCommand | Yes | Yes¹ |
| TADOQuery | Yes | Yes |
¹ Recordset interface
Иерархия наследования
- ТСотропепЬ
- TADOCommand (рядом с собственным доступом ADO)
- TDataSet (модель базового набора данных Delphi)
- TCustomADODataSet (представление ADO как DataSet)
- TADODataSet (не может выдать DML)
- TADOQuery (может выдавать DML и DQL)
- TCustomClientDataSet (отображение таблиц в памяти как набора данных)
- TBDEDataSet (отображение BDE в качестве DataSet)
- TCustomSQLDataSet (отображение dbExpress в качестве DataSet)
TADOCommand является ближайшим к металлу для выдачи необработанных запросов.
TADODataSet и TADOQuery использовать существующую объектную модель базы данных Delphi для предоставления источников данных ADO
TADODataSet может использоваться только для представления наборов данных
TADOQuery - мастер на все руки, который может делать все.