Delphi/ADO:哪些组件?塔多达塞特和塔多克蒙德,还是塔多基里?
根据() ADO的首选方法 组件使用TADODataSet和 塔多克蒙德。TADOQuery(和TADOTable 和TADOStoredProc)提供 兼容性 对返回的SQL使用TADODataSet SQL的结果集和TADOCommand 但事实并非如此 我是一个无能的n00b——即将编写大量ADO代码。上述说法正确吗Delphi/ADO:哪些组件?塔多达塞特和塔多克蒙德,还是塔多基里?,delphi,ado,Delphi,Ado,根据() ADO的首选方法 组件使用TADODataSet和 塔多克蒙德。TADOQuery(和TADOTable 和TADOStoredProc)提供 兼容性 对返回的SQL使用TADODataSet SQL的结果集和TADOCommand 但事实并非如此 我是一个无能的n00b——即将编写大量ADO代码。上述说法正确吗 p、 有没有好的开源Windows程序可以让我可视化和浏览数据库的内容 对于不返回结果的内容,我应该使用哪些组件?而我将使用一半相反的组件!;-) 在某些情况下,TADOQ
p、 有没有好的开源Windows程序可以让我可视化和浏览数据库的内容
对于不返回结果的内容,我应该使用哪些组件?而我将使用一半相反的组件!;-) 在某些情况下,TADOQuery很适合这两种工作。 如果您的查询将导致数据使用
TADOQuery.Acvite:=True
,
如果需要执行更新\插入\删除,请使用TADOQuery.ExecSQL.
例如,您可以编写一个查询来更新\插入并选择一条记录,然后在一个组件中执行,而不是引入两个组件
DECLARE @ID int, @Mode int, @SomeValue varchar(20)
SET @ID = :ID
SET @Mode = :Mode
SET @SomeValue = :SomeValue
IF (@Mode = 1) //INSERT
BEGIN
INSERT INTO dbo.YourTable(ID, SomeColumn) VALUES(@ID, @SomeValue)
END ELSE
IF (@Mode = 2) //UPDATE
BEGIN
UPDATE dbo.YourTable SET SomeValue = @SomeValue WHERE ID = @ID
END ELSE
IF (@Mode = 3) //DELETE
BEGIN
DELETE FROM dbo.YourTable WHERE ID = @ID
END ELSE
IF (@Mode = 4) //SELECT
BEGIN
IF (@ID = -1) //SELECT ALL
BEGIN
SELECT * FROM dbo.YourTable
END ELSE
BEGIN
SELECT * FROM dbo.YourTable WHERE ID = @ID
END
END
只是一个例子,现在就写。我希望你能明白。你使用哪个数据库。
SqlBuddy是探索数据库的开源IDE。根据SQL对象的性质(TADOTable、TADOQuery和TadoRedProc)或操作/结果(TADODataSet和TADOCommand)
历史上的德尔菲方法更多地是第一种方法,而ADO本质上更多地是第二种方法 这两种方法都很有用,具体取决于您想做什么 我建议您阅读关于ADO组件的Delphi帮助。
例如,您会发现有用的注释,如: ADOdb.TADODataSet和SQLExpr.TSQLDASET具有CommandType属性,可用于指定它们是表示表、查询还是表示存储过程。属性和方法名称与查询类型数据集最为相似,但TADODataSet可用于指定类似于表类型数据集的索引 如果您确信坚持使用ADO,并且不需要更改和移植到其他数据层,则使用TADODataSet和TADOCommand执行“ADO路径”
您将充分利用ADO,使用MS文档和示例将更加容易 那句话是正确的。TADODataset和TADOCommand是本机ADO对象的直接接口,可以执行其他三个对象所做的所有任务,它们的存在是为了简化为BDE(Borland数据库引擎)编写的应用程序的移植,实现一个类似的接口-它们最终调用前两个。SELECT语句 用于发出返回数据集的DQL语句(例如SELECT)
- TADOQuery
qry.Sql.Text := 'SELECT * FROM Users WHERE Name = :username'; qry.Parameters.ParamByName('username').Value := 'ian'; qry.Open;
qry.Sql.Text := 'DELETE FROM Users WHERE Name = :username'; qry.Parameters.ParamByName('username').Value := 'ian'; qry.ExecuteOptions := [eoExecuteNoRecords]; qry.ExecSql;
- 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;
ADO命令将返回本机ADO IRecordset。您可以直接使用cmd.CommandText := 'DELETE FROM Users WHERE Name = :username'; cmd.Parameters.ParamByName('username').Value := 'ian'; cmd.ExecuteOptions := [eoExecuteNoRecords]; cmd.Execute;
接口(这并不难),也可以将其封装在友好的Delphi包装类中:记录集
或ds.Recordset := rs;
- TADOQuery
qry.Sql.Text := 'SELECT * FROM Users WHERE Name = :username'; qry.Parameters.ParamByName('username').Value := 'ian'; qry.Open;
qry.Sql.Text := 'DELETE FROM Users WHERE Name = :username'; qry.Parameters.ParamByName('username').Value := 'ian'; qry.ExecuteOptions := [eoExecuteNoRecords]; qry.ExecSql;
- TADOCommand
cmd.CommandText := 'SELECT * FROM Users WHERE Name = :username'; cmd.Parameters.ParamByName('username').Value := 'ian'; rs: _Recordset; rs := cmd.Execute;
cmd.CommandText := 'DELETE FROM Users WHERE Name = :username'; cmd.Parameters.ParamByName('username').Value := 'ian'; cmd.ExecuteOptions := [eoExecuteNoRecords]; cmd.Execute;
- TADODataSet:无法完成。如果语句未返回数据集,TADODataSet将引发异常
继承层次
- t组件
- TADOCommand(接近本机ADO访问)
- TDataSet(Delphi的基本数据集模型)
- TCustomADODataSet(将ADO公开为数据集)
- TADODataSet(无法发布DML)
- TADOQuery(可以发布DML和DQL)
- TCustomClientDataSet(将内存中的表作为数据集公开)
- TBDEDataSet(将BDE公开为数据集)
- TCustomSQLDataSet(将dbExpress公开为数据集)
- TCustomADODataSet(将ADO公开为数据集)
TADOQuery是无所不能的高手。我相信链接参考资料和您自己的问题已经为您提供了答案的线索。使用TADOCommand和TADODataSet。此外,在UI中使用DB感知控件。我是一个n00b用户,以至于我发现Delphi的帮助令人困惑:-/我想,当提供替代方案时,一般都是这样,所以我想我应该问问专家。我会想象我的命令类型总是文本。如果你使用Delphi7之后的任何版本,帮助会让最熟练的Delphi开发人员感到困惑。我想这是一种折衷。您可以选择更简单、更老、兼容(即不是特定于ADO)的TADOQuery/TADOStoredProc范式或更“本地”的ADO方式。虽然可以,但尽量不要混用。
非常真实的话……+1谢谢,这看起来不错(当我弄明白如何运行它时;-)您能帮忙吗?当我使用TADODataset.Execute()时;我最终得到了一个_记录集。你能告诉我如何循环这个来查看结果吗?如果你使用TADODataset执行一个SELECT,只需打开它(或将Active设置为True)。现在可以使用First/Last/Next/Prev方法来迭代结果。如果您使用TADOCommand,Execute返回ADO接口,它有MoveXXXX方法来迭代结果集,请检查ADO文档。如果您使用Delphi 7之后的任何版本,帮助可能会让最熟练的Delphi开发人员感到困惑。
- t组件