我是在一个程序里想复盖正在用的数据库,如果没有任何程序访问数据库时就不会出错一旦有程序访问过数据库是系统就会出错,我是用ado连接的没有任何数据库连接的控件所以不知道在一个新的程序里怎样关闭数据库连接!
解决方案 »
- 急!delphi中,Pascal语言有没有类似SQL语言中like的关键字或者函数
- mysql 有没有一行命令可以删除mytable表中的记录,并且保留表结构。
- 为什么我用delphi编的播放器不能实现连续播放
- 使用ADO,三层结构。在客户端通过5个TClientDataSet导出几张表。如果都修该了,我想在一个事务内进行。该怎样
- 两个DBGrid,两个关联表!
- 如何编写带参数的windows应用程序
- 各位老大:问一个关于TREEVIEW的问题!
- 请问: 发布 midas 服务端 需要购买版权 是什么意思? 谁可以提供控件使用的详细资料
- ★大喊★谁有串口通讯的构件及例子FOR DELPHI5 的★本人有80分,晚了就没分了
- 关于sql server?
- 如何把DELPHI的QREPORT组件的QRLABEL的CAPTION属性的横写文字改为竖写!!!
- TClientSocket出现丢失数据包的问题,您是怎么解决的?
然后再在程序运行时adoconnection1.Connected := true;
Create Procedure killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
这个存储过程主要是断开所有数据库的连接,
然后在你覆盖数据库之前执行
with frmDataModul.query do
begin
sql.clear
sql.add(' use master');
sql.Add('exec killspid ''yourDBname''');
ExecSQL ;
end
我就是这样做的,你可以试试
Connected 为False或使控件的Active为False;
如果是别的应用程序则提出警告(可以通过try 覆盖 except 警告 end 的方式)
要不将更新的数据库命名成一个别的文件名,然后检查此文件,若文件存在删除原文件,改命
这种维护性的工作最后放在管理工具里面,或者使用sql server直接操作
个人观点
不行,我正在用。
根本做不到啊!
我试了,可它还是提示这个库正在被使用啊!!
或运行新程序关掉连接数据库的程序