顺便问一下,有没有好的开源Windows程序可以让我可视化和探索我的数据库内容?
对于返回/不返回结果的操作,应该使用哪些组件?
顺便问一下,有没有好的开源Windows程序可以让我可视化和探索我的数据库内容?
对于返回/不返回结果的操作,应该使用哪些组件?
这个说法是正确的。TADODataset和TADOCommand是直接与本地ADO对象进行交互的接口,可以执行其他三种接口能够执行的所有任务,这些接口存在的目的是为了方便移植使用BDE(Borland数据库引擎)编写的应用程序,实现类似的接口 - 最终它们会调用前两个接口。
我会去半个相反的地方!;-)
在某些情况下,TADOQuery适用于两种任务。
如果您的查询将返回数据,请使用TADOQuery.Active := 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,用于探索数据库。
用于发出返回数据集的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;
The ADOCommand will return a native ADO IRecordset. You can use the Recordset
interface directly (it's not that hard), or you can wrap it in a friendly Delphi wrapper class:
ds.Recordset := rs;
or
qry.Recordset := rs;
用于执行不返回数据集的 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: Cannot be done. TADODataSet will throw an exception if no dataset is returned by the statement
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 是发出原始查询的最接近底层的方法。
TADODataSet 和 TADOQuery 使用 Delphi 现有的数据库对象模型来显示 ADO 数据源。
TADODataSet 只能用于表示数据集。
TADOQuery 是一个全能型的工具,可以完成各种任务。