小弟我想通过ADOQuery创建新的SQL server数据库,在创建之前要先检验要创建的数据库是否存在,如果存在的话就先删除再创建。我用下面的语句完成,但是总是报错。
SQL.Clear;
SQL.Add('if exists(select * from sysdatabases where name='''+trim(edit1.text)+''') drop database '+trim(edit1.text));
ExecSql;报错说数据库正在使用,不能执行删除操作,小弟想请问应该怎么写才能接这个问题,谢谢。
SQL.Clear;
SQL.Add('if exists(select * from sysdatabases where name='''+trim(edit1.text)+''') drop database '+trim(edit1.text));
ExecSql;报错说数据库正在使用,不能执行删除操作,小弟想请问应该怎么写才能接这个问题,谢谢。
解决方案 »
- 菜鸟问题:delphi 启用word 为何启用不了?急!
- 如何发消息关机或重启?
- 学习时,关于OnClick,OnKeyDown事件中参数的疑问.
- 关于TIdCookieManager的问题,请大虾进来看看,不胜感激
- +++如何判断ADOConnection是否可以连接到数据库?+++
- 关于'Image'控件
- 郁闷,用qreport做的b4的报表只能手工改为a4了,可是四个报表啊,放分,顺便请大家推荐几个好的报表控件
- 高手!给没有Canvas的控件加上Canvas的非可视控件怎么写啊?
- 怎样编写动态创建的控件的事件响应?
- DB 和 DBF 使用起来有很大分别
- Edit的maxlength问题
- 上海求购全新《DELPHI5开发人员指南》要求带光盘
试试
你分开来写吧!先查询是否存在,然后关闭掉查询,数据库,再删除。
SQL.Add('if exists(select * from sysdatabases where name='''+trim(edit1.text)+''') drop database '+trim(edit1.text));
execsql;
/*
关闭用户打开的进程处理
*/
use master
goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GOcreate proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @sql nvarchar(500)
declare @spid nvarchar(20) declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go--用法
exec p_killspid '数据库名'
在删除