但是当我数据库创建成功时,要马上删除当前创建的数据库text就会出错,无法删除,错误提示,该数据库正在使用,无法删除。请问要怎么办,才可以删除掉这个数据库
8 个解决方案
#1
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add('DROP DATABASE text');
adoquery.execsql;
adoquery.sql.clear;
adoquery.sql.add('DROP DATABASE text');
adoquery.execsql;
#2
我就是这样做的,不行
#3
断开你所要删除的数据库的所有连接,然后:
use master
go
drop database test
go
use master
go
drop database test
go
#4
use master
你需要杀死连在这个库上的进程
go
drop database test
go
你需要杀死连在这个库上的进程
go
drop database test
go
#5
这样:
select spid from MASTER..sysprocesses where dbid=db_id(text)
如果结果大于0则有进程连到text
kill 这个spid(smallint类型的)
select spid from MASTER..sysprocesses where dbid=db_id(text)
如果结果大于0则有进程连到text
kill 这个spid(smallint类型的)
#6
至于断开连接,可以:
with aq1 do
begin
close;
sql.clear;
sql.text:='sp_who';
open;
fileter:='dbname=''text''';
filetered:=true;
first;
end;
while not aq1.eof do
begin
with aq2 do
begin
close;
sql.clear;
sql.text:='kill '+aq1.fieldbyName('spid').AsString;
try
execSQL;
except
end;
aq1.next;
end;
end;
with aq1 do
begin
close;
sql.clear;
sql.text:='sp_who';
open;
fileter:='dbname=''text''';
filetered:=true;
first;
end;
while not aq1.eof do
begin
with aq2 do
begin
close;
sql.clear;
sql.text:='kill '+aq1.fieldbyName('spid').AsString;
try
execSQL;
except
end;
aq1.next;
end;
end;
#7
楼上的几位兄台,我用use master drop database text 这样不行啊,数据库根本没删掉
#8
我找出问题了,原来是在创建完数据库后创建表格,我用的是以下代码(如果我把这些删掉的话,创建好的数据库就可以马上删除)
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语句全部搞到记事本里面,当然,这个功能与实现,现在就是我在创建好数据库后,和这些表和存储过和触发器后,要马上删除当前数据这个数据库时就会提示,该数据库正在使用,如果我关闭改程序,再重新运行该程序就可以删除刚才创建的数据库。当然,我再建一个时,还是不能马上删掉,如果把这一段代码删掉,就不会出错,马上可以删除,这是为什么,要怎么改呢)
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语句全部搞到记事本里面,当然,这个功能与实现,现在就是我在创建好数据库后,和这些表和存储过和触发器后,要马上删除当前数据这个数据库时就会提示,该数据库正在使用,如果我关闭改程序,再重新运行该程序就可以删除刚才创建的数据库。当然,我再建一个时,还是不能马上删掉,如果把这一段代码删掉,就不会出错,马上可以删除,这是为什么,要怎么改呢)
#1
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add('DROP DATABASE text');
adoquery.execsql;
adoquery.sql.clear;
adoquery.sql.add('DROP DATABASE text');
adoquery.execsql;
#2
我就是这样做的,不行
#3
断开你所要删除的数据库的所有连接,然后:
use master
go
drop database test
go
use master
go
drop database test
go
#4
use master
你需要杀死连在这个库上的进程
go
drop database test
go
你需要杀死连在这个库上的进程
go
drop database test
go
#5
这样:
select spid from MASTER..sysprocesses where dbid=db_id(text)
如果结果大于0则有进程连到text
kill 这个spid(smallint类型的)
select spid from MASTER..sysprocesses where dbid=db_id(text)
如果结果大于0则有进程连到text
kill 这个spid(smallint类型的)
#6
至于断开连接,可以:
with aq1 do
begin
close;
sql.clear;
sql.text:='sp_who';
open;
fileter:='dbname=''text''';
filetered:=true;
first;
end;
while not aq1.eof do
begin
with aq2 do
begin
close;
sql.clear;
sql.text:='kill '+aq1.fieldbyName('spid').AsString;
try
execSQL;
except
end;
aq1.next;
end;
end;
with aq1 do
begin
close;
sql.clear;
sql.text:='sp_who';
open;
fileter:='dbname=''text''';
filetered:=true;
first;
end;
while not aq1.eof do
begin
with aq2 do
begin
close;
sql.clear;
sql.text:='kill '+aq1.fieldbyName('spid').AsString;
try
execSQL;
except
end;
aq1.next;
end;
end;
#7
楼上的几位兄台,我用use master drop database text 这样不行啊,数据库根本没删掉
#8
我找出问题了,原来是在创建完数据库后创建表格,我用的是以下代码(如果我把这些删掉的话,创建好的数据库就可以马上删除)
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语句全部搞到记事本里面,当然,这个功能与实现,现在就是我在创建好数据库后,和这些表和存储过和触发器后,要马上删除当前数据这个数据库时就会提示,该数据库正在使用,如果我关闭改程序,再重新运行该程序就可以删除刚才创建的数据库。当然,我再建一个时,还是不能马上删掉,如果把这一段代码删掉,就不会出错,马上可以删除,这是为什么,要怎么改呢)
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语句全部搞到记事本里面,当然,这个功能与实现,现在就是我在创建好数据库后,和这些表和存储过和触发器后,要马上删除当前数据这个数据库时就会提示,该数据库正在使用,如果我关闭改程序,再重新运行该程序就可以删除刚才创建的数据库。当然,我再建一个时,还是不能马上删掉,如果把这一段代码删掉,就不会出错,马上可以删除,这是为什么,要怎么改呢)