delphi - 通过SQL语句和adoquery在delphi中删除数据库

标签 delphi

我想通过sql语句删除数据库,我的代码是这样的,使用delphi XE和ADO进行数据库访问,服务器是MSSQL

  aDBConnection.ConnectionString :=  'Provider=SQLOLEDB.1;Integrated    

                   Security=SSPI;Persist Security Info=False;Initial Catalog='
                   + DatabaseName + '; Data Source=' + Servername;      

  aDBConnection.Connected := true;  

  aQuery.Connection := aDBConnection;

  aQuery.add.sql (' drop database ' + DatabaseName );

  aQuery.Execsql.

使用此代码序列运行许多其他 sql 语句没问题,但他拒绝删除数据库,因为声称“数据库正在使用中”。

我猜这是真的,因为我确实有一个到数据库的连接,但如何做其他的,我需要查询将 sql 发送到服务器......

最佳答案

不需要显式关闭连接,正如 TLama 提到的,您所需要的只是 USE更改您的连接。也不需要关闭数据集,除非它们是通过 CursorLocation := clUseServer; 打开的。即使在更改为 master (Button_ChangeToMasterClick) 后,您也可以进行编辑打开数据集,但由于 CursorLocation 是 clUseClient,您甚至可以删除数据库。删除后编辑自然会出错。

Const
 aDatabaseName='DeleteMeAfterUse';

procedure TForm3.ButtonCreateOpen_Click(Sender: TObject);
var
  Ads: TAdodataset;
begin
  AC.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=127.0.0.1';
  AC.Connected := true;
  AC.Execute('Create DataBase ' + aDatabaseName);
  AC.Execute('Use ' + aDatabaseName);  // change connection to 'DeleteMeAfterUse'
  AC.Execute('Create Table Test (ID int)'); // will be created in DeleteMeAfterUse
  AC.Execute('Insert into Test Values (1)');
  Ads := TAdodataset.Create(self); // Display data on surface
  // Ads.CursorLocation := clUseServer;  **
  // ** don't use clUseServer if you want to delete the database without closing the datasets
  // default is clUseClient

  With Ads do
  begin
    Connection := AC;
    CommandText := 'Select * from Test';
    Active := true;
  end;
  DataSource1.DataSet := Ads; // Conected to a DBGrid for editing
end;

procedure TForm3.Button_ChangeToMasterClick(Sender: TObject);
begin
  AC.Execute('Use master');  // change connection to master , any other database will work too
end;

procedure TForm3.Button_DropDatabaseClick(Sender: TObject);
begin
  AC.Execute('Drop Database ' + aDatabaseName);
end;

关于delphi - 通过SQL语句和adoquery在delphi中删除数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18981929/

相关文章:

Delphi 2010 - 如何复制和清除 TShape

delphi - 转换 TStringList 中的特殊字符

delphi - 如何将 32 位图标的图像列表导出到单个 32 位位图文件中?

delphi - 将 Delphi 构造函数作为普通方法调用 - 任何隐藏的副作用?

delphi - 在 GLScene 中确定与视锥体的交集

Delphi (2007) ide 将 dproj 文件中的绝对路径更改为相对路径...为什么以及何时?

delphi - 关于工作不正常的 Intraweb 问题(单选按钮)?

delphi - 何时为静态数组评估长度?

delphi - 如何使用 IdHTTP 检查 URL?

delphi - 有 `install all`选项吗?