我用adoconnection连接当前SQL服务器,再用adoquery连接adoconnection,在delphi里面用CREATE DATABASE text代码成功创建SQL数据库和一些表格。
但是当我数据库创建成功时,要马上删除当前创建的数据库text就会出错,无法删除,错误提示,该数据库正在使用,无法删除。请问要怎么办,才可以删除掉这个数据库
但是当我数据库创建成功时,要马上删除当前创建的数据库text就会出错,无法删除,错误提示,该数据库正在使用,无法删除。请问要怎么办,才可以删除掉这个数据库
adoquery.sql.clear;
adoquery.sql.add('DROP DATABASE text');
adoquery.execsql;
select spid from MASTER..sysprocesses where dbid=db_id(text)
如果结果大于0则有进程连到text
kill 这个spid(smallint类型的)或者写成存储过程也是很方便的
Sql:='use Master drop database xxx'
execsql
m_datamodule1.ADOConnection4.Close;
m_datamodule1.ADOConnection4.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='+trim(edit4.text)+';Data Source='+s;
m_datamodule1.adoconnection4.connected:=true;
m_datamodule1.adocommand2.commandtext := '';
str1:= TStringList.Create;
str1.LoadFromFile(ExtractFilePath(application.ExeName)+'文本\table.TXT');
for i := 0 to str1.count-1 do
if uppercase(str1.strings[i])='GO' then
if i > 0 then
begin
m_datamodule1.adocommand2.execute;
m_datamodule1.adocommand2.commandtext := '';
end
else
else m_datamodule1.adocommand2.commandtext := m_datamodule1.adocommand2.commandtext + str1.strings[i]+#13#10;
if m_datamodule1.adocommand2.commandtext <> '' then
m_datamodule1.adocommand2.execute;
str1.free;其中的table.text是一个记事本(我是把创建表格,过程和触发器的sql语句全部搞到记事本里面,当然,这个功能与实现,现在就是我在创建好数据库后,和这些表和存储过和触发器后,要马上删除当前数据这个数据库时就会提示,该数据库正在使用,如果我关闭改程序,再重新运行该程序就可以删除刚才创建的数据库。当然,我再建一个时,还是不能马上删掉,如果把这一段代码删掉,就不会出错,马上可以删除,这是为什么,要怎么改呢)