Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi/ADO:哪些组件?塔多达塞特和塔多克蒙德,还是塔多基里?_Delphi_Ado - Fatal编程技术网

Delphi/ADO:哪些组件?塔多达塞特和塔多克蒙德,还是塔多基里?

Delphi/ADO:哪些组件?塔多达塞特和塔多克蒙德,还是塔多基里?,delphi,ado,Delphi,Ado,根据() ADO的首选方法 组件使用TADODataSet和 塔多克蒙德。TADOQuery(和TADOTable 和TADOStoredProc)提供 兼容性 对返回的SQL使用TADODataSet SQL的结果集和TADOCommand 但事实并非如此 我是一个无能的n00b——即将编写大量ADO代码。上述说法正确吗 p、 有没有好的开源Windows程序可以让我可视化和浏览数据库的内容 对于不返回结果的内容,我应该使用哪些组件?而我将使用一半相反的组件!;-) 在某些情况下,TADOQ

根据()

ADO的首选方法 组件使用TADODataSet和 塔多克蒙德。TADOQuery(和TADOTable 和TADOStoredProc)提供 兼容性

对返回的SQL使用TADODataSet SQL的结果集和TADOCommand 但事实并非如此

我是一个无能的n00b——即将编写大量ADO代码。上述说法正确吗


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;
    
    cmd.CommandText := 'DELETE FROM Users WHERE Name = :username';
    cmd.Parameters.ParamByName('username').Value := 'ian';
    cmd.ExecuteOptions := [eoExecuteNoRecords];
    cmd.Execute;
    
    ADO命令将返回本机ADO IRecordset。您可以直接使用
    记录集
    接口(这并不难),也可以将其封装在友好的Delphi包装类中:

    ds.Recordset := rs;
    

插入、更新、删除语句 用于发出不返回数据集的DML语句(例如INSERT、UPDATE、DELETE)

  • 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公开为数据集)
    TADOCommand是最接近发出原始查询的金属

    TADODataSetTADOQuery使用Delphi现有的数据库对象模型公开ADO数据源

    TADODataSet只能用于表示数据集


    TADOQuery是无所不能的高手。

    我相信链接参考资料和您自己的问题已经为您提供了答案的线索。使用TADOCommand和TADODataSet。此外,在UI中使用DB感知控件。我是一个n00b用户,以至于我发现Delphi的帮助令人困惑:-/我想,当提供替代方案时,一般都是这样,所以我想我应该问问专家。我会想象我的命令类型总是文本。如果你使用Delphi7之后的任何版本,帮助会让最熟练的Delphi开发人员感到困惑。我想这是一种折衷。您可以选择更简单、更老、兼容(即不是特定于ADO)的TADOQuery/TADOStoredProc范式或更“本地”的ADO方式。虽然可以,但尽量不要混用。
    如果您使用Delphi 7之后的任何版本,帮助可能会让最熟练的Delphi开发人员感到困惑。
    非常真实的话……+1谢谢,这看起来不错(当我弄明白如何运行它时;-)您能帮忙吗?当我使用TADODataset.Execute()时;我最终得到了一个_记录集。你能告诉我如何循环这个来查看结果吗?如果你使用TADODataset执行一个SELECT,只需打开它(或将Active设置为True)。现在可以使用First/Last/Next/Prev方法来迭代结果。如果您使用TADOCommand,Execute返回ADO接口,它有MoveXXXX方法来迭代结果集,请检查ADO文档。