- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过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/
我不确定为什么会发生这种情况,所以我将简要解释一下情况(应该很容易理解): Form1 一个执行 sql select 语句并将其显示在通过 TDataSource 组件链接到 ADOQuery1 组
我想请您帮助我的 Delphi 项目(RAD Studio),我是 Delphi 的新手。 我正在使用:TADOConnection(带连接字符串)2x ADOQUERY(设置“连接 = TADOCo
我在 Delphi 2010 应用程序中使用异步 ADO 查询。用户可以请求取消查询,否则查询可能会因错误而失败。这是我用来取消查询的代码: if not Assigned(myADOQuery.Re
尊敬的专家们,我正在尝试过滤连接到 adoquery 的 dbgrid 中的结果,根据用户对 4 个复选框的选择,用户可以选择一个或多个字段来相应地过滤数据我有这段代码,如果用户选择两个或多个复选框,
我想将 ClientDataSet 保存到文件,然后在 AdoQuery (AdoQuery.LoadFromFile()) 中打开该文件。可能吗? 或者如何将数据集保存为 pfADTG 文件格式?
我有一个ADOQuery,它将记录插入到SQL Server 2005表中,该记录已触发将数据插入到另一个表中。我使用以下代码刷新查询并避免使用Row cannot be located for up
我在这里使用的是 Delphi 5 和 SQL Server 2000。 我使用 INSTEAD OF DELETE 触发器在可更新 View 之上创建了一个 ADOQuery。 可更新 View 主
我在快速报告中遇到问题,显示 ADO 查询中的数据不正确。我使用以下 sql.text SELECT * FROM JOB_DATA INNER JOIN CUSTOMER ON JOB_DATA.C
我有这个简单的代码来检查表中是否存在记录,但它总是返回运行时错误: Arguments are of the wrong type, are out of acceptable range, or a
我正在努力寻找执行 SQL 查询的正确过程。 基本上,我有一个文本字段,用户可以在其中输入 SQL 代码,程序将执行它。不幸的是,我不知道是否会返回数据集,因此我无法判断使用哪个函数:ADOQuery
我在 Delphi 7 和 Oracle 中使用 ADOQuery。我在将参数传递给 ADOQuery 时遇到错误。我用过以下行。请帮我找出错误。 ADOQuery.Sql.text:= 'selec
我有这个返回访问冲突的代码('sqloledb.dll' 模块中地址 74417E44 的访问冲突。读取地址 786E3552'),我无法确定问题出在哪里。我唯一的猜测是 ADOQuery 对我们可以
我正在测试一些数据库组件,例如 SDAC 等,我发现了一些有趣的东西: 当我使用 TADOQuery 执行查询并且该查询有很多 blob 字段并且我获取所有行 (fetchall) 时,我的应用程序的
我正在使用 ADO 组件连接到 MS SQL 数据库。我知道如何在 DBGrid 中显示查询结果。但是,例如,我想将结果作为字符串存储在数组中。 这是否可能,或者是否有其他方式使用查询结果? 最佳答案
好的,我有一个查询应该返回所有问题编号。我想要的是获取返回的每个问题编号并将其添加到字符串列表中。 ADOQuery1.SQL.Clear; SQLQuery := 'SELECT issue FRO
我有一个通过数据源链接到 DBGrid 的 ADOQuery。 ADOQuery 和DataSource 位于DataModule 中,并且连接采用另一种形式。 有什么方法可以让我的应用程序在查询获取
我在 ADOQuery2 中有一个查询。现在我想要一个过滤器: ADOQuery2.Filter := 'where Fname like ' + QuotedStr(Txt_Search.Tex
我正在撕扯我的头发!! 即使是像这样简单的事情: procedure MyAdoQueryTest(); const MYSQL_CONNECT_STRING='Driver={MySQL OD
我有一个 Delphi 7 项目,它使用 MySQL 中的数据库来存储一些配置。每当我更改配置时,都会启用“保存”按钮。此按钮中的 OnClick 过程调用 TADOQuery.Edit、Select
我有以下行来定位查询中的一行。 if Query.Locate('Line;Hour;Minute',VarArrayOf([Line-400,AHour,minuteof(Start)]),[])
我是一名优秀的程序员,十分优秀!