事情是这样的 我做一个人事管理系统 d7+sql2000
现在做到了一个块 数据库备份和还原 备份正常 还原有问题
因为一进入这个系统 就当然要进行数据库的连接 我的连接用的是
datamodule1.ADOConnection1 (用adoconnection连接的) 现在的情况是
如果我删除了ADOConnection1 或者是把ADOConnection1的初始属性connected 设为false
connectsting 设为'' 数据库就可以正常还原 不过除还原外的其他模块也就用不了了
于是我就想 在初始状态下呢 设置ADOConnection1的初始属性connected 设为true
在还原时将其关闭(也就是切断数据库 只有切断才能还原)
我的语句如下:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
datamodule1.ADOConnection1.Connected := False;
datamodule1.ADOConnection1.ConnectionString:='';
datamodule1.ADOConnection1.close;//以上这几条断库语句有问题 实际上他无法彻底,完全,干脆的关闭数据库cre_peo_ma
ADOQuery1.Close;
ADOQuery1.ConnectionString:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master';
try
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('restore database cre_peo_ma from disk = ''c:\ jj.bak'''); //要还原数据库 cre_peo_ma 从 ''c:\ jj.bak''
ExecSQL;
end;
ShowMessage('还原成功。');
except
On e: exception do
ShowMessage('还原失败。');
end;
datamodule1.ADOConnection1.open;
end;现在问题是 我的datamodule1.ADOConnection1.close; 或是datamodule1.ADOConnection1.Connected := False;有问题 他不能彻底关闭或是断开数据库cre_peo_ma
一旦执行还原就提示“数据库连接被使用 无法使用还原”
请大家帮我想想用个语句怎么样彻底与数据库断开
当然还原后 还因该可以再连上 谢谢
现在做到了一个块 数据库备份和还原 备份正常 还原有问题
因为一进入这个系统 就当然要进行数据库的连接 我的连接用的是
datamodule1.ADOConnection1 (用adoconnection连接的) 现在的情况是
如果我删除了ADOConnection1 或者是把ADOConnection1的初始属性connected 设为false
connectsting 设为'' 数据库就可以正常还原 不过除还原外的其他模块也就用不了了
于是我就想 在初始状态下呢 设置ADOConnection1的初始属性connected 设为true
在还原时将其关闭(也就是切断数据库 只有切断才能还原)
我的语句如下:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
datamodule1.ADOConnection1.Connected := False;
datamodule1.ADOConnection1.ConnectionString:='';
datamodule1.ADOConnection1.close;//以上这几条断库语句有问题 实际上他无法彻底,完全,干脆的关闭数据库cre_peo_ma
ADOQuery1.Close;
ADOQuery1.ConnectionString:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master';
try
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('restore database cre_peo_ma from disk = ''c:\ jj.bak'''); //要还原数据库 cre_peo_ma 从 ''c:\ jj.bak''
ExecSQL;
end;
ShowMessage('还原成功。');
except
On e: exception do
ShowMessage('还原失败。');
end;
datamodule1.ADOConnection1.open;
end;现在问题是 我的datamodule1.ADOConnection1.close; 或是datamodule1.ADOConnection1.Connected := False;有问题 他不能彻底关闭或是断开数据库cre_peo_ma
一旦执行还原就提示“数据库连接被使用 无法使用还原”
请大家帮我想想用个语句怎么样彻底与数据库断开
当然还原后 还因该可以再连上 谢谢
解决方案 »
- delphi 7开发 Web service供sap r/3系统调用,sap不认wsdl
- ClientTCP: TIdTCPClient;为什么我的ClientTCP想停停不下来
- 关于Delphi2005的IndyNet
- 怎么得出TREEVIEW里面被选节点的所有子节点(包括子节点的子节点)的个数???
- (简单问题紧急求救)当DBGRID组件Columns.State的属性为csDefault的时候如何指定DBGRID显示的Column
- 急!如何选择ListBox里的文件进行操作?
- 还想问个问题,如何实现半透明菜单呢(不好意思拉)
- 谁是powerdesigh设计高手?请来这里!高分相送!
- 開發方法﹐高手給點思路﹗
- 在DBGrid中使用了LookUP字段,会提示堆栈出错!怎么回事?
- 如何获取XP系统进程的句柄??
- 新手请问:怎样实现DBGrid中的单元格也可以下拉选择,有个条件,从A表中查,最后这些数据要与另一些数据存入到B表中去的。
: zjcxc(邹建) ( ) 信誉:316
/*
关闭用户打开的进程处理
*/
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 '数据库名'
=======================================================
用的delphi执行上面的脚本之后,在使用restore命令恢复
不过还是想请你把上面的语句进行解释一下
我是很菜的 请说的最好详细些 谢谢
MySQL := 'ALTER DATABASE station_monthticket SET OFFLINE WITH ROLLBACK IMMEDIATE'; //关闭数据库
with QueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := MySQL;
try
ExecSQL;
except end;
end;
RestorStr := 'RESTORE DATABASE Station_Monthticket FROM DISK = ''' + DataPath+ ''' WITH REPLACE';
with QueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := RestorStr;
try
ExecSQL;
Application.MessageBox('恢复数据库成功!','提示!',mb_ok+mb_iconinformation);
a1.Active:=false;
self.Caption:=application.Title+'-备份与恢复';
except
Application.MessageBox('恢复数据库出错!','错误!',mb_ok+mb_iconError);
end;
end;
MySQL := 'ALTER DATABASE Station_Monthticket SET ONLINE WITH ROLLBACK IMMEDIATE';
with QueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := MySQL;
try
ExecSQL;
except end;
end;
DM.Sta_MonthTicketDB.Connected := True;这是我一个管理软件..BDE+SQL 2000的还原代码...
比如你要还原的数据库叫DB1,那么你用cn这个对象连接了DB1,要执行还原语句之前呢,你写一个cn.execute('use master'),然后执行还原的操作,保证你还原的没问题。
之所以connected=false不能完全关闭连接,是因为你设成false之后,SQL并不立刻断开你的连接,所以还原时会被认为还在使用中。删除也是如此,一定要把连接到要删除的数据库的所有连接都use master一下,不然一定删除不了!!!
就是这句 ADOQuery1.ConnectionString:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User
ID=sa;Initial Catalog=master';我是这样写的
adorestore.ConnectionString:=' Provider=SQLOLEDB.1;'+'Persist Security Info=False;User ID='+GetRegInfo(3)+';Password='+GetRegInfo(4)+';'+
'Data Source='+GetRegInfo(1);
你自己改一下就可以了,GetRegInfo(3)='sa',GetRegInfo(4)=密码,GetRegInfo(1)=服务器名
下面这个是我以前做的原码:参考一下可能有用
procedure TForm1.suiButton17Click(Sender: TObject);
var adorestore:TAdocommand;
begin
if suiEdit6.Text='' then
begin
Application.MessageBox('请选择恢复文件!','提示',64);
exit;
end;
if application.MessageBox('此操作将使上次备份以来的所有数据丢失,是否继续?','恢复数据',33)=IDCANCEL then exit;
dm.Free;//这个就是数据模块的释放
adorestore:=TAdocommand.Create(application);
adorestore.ConnectionString:=' Provider=SQLOLEDB.1;'+'Persist Security Info=False;User ID='+GetRegInfo(3)+';Password='+GetRegInfo(4)+';'+
'Data Source='+GetRegInfo(1);
adorestore.CommandText:='restore database MMDATA from disk='''+suiEdit6.Text+''' with replace';
try
adorestore.Execute;
adorestore.Free;
if Application.MessageBox( '恢复成功! 现在需要重新登陆软件,请按“确定” ','提示',64)=IDOK then Close;
except
Application.MessageBox('恢复失败!请确认恢复文件的路径和名称是否正确,或是否已关闭其它正在使用此数据库的程序!','提示',64);
adorestore.Free;
exit;
end;//end tryend;
cn.execute('use master') 是什么意思 如果说是释放数据库的话 我试过了 没有用的
毛病依旧 还是不行阿 我都快崩溃了 怎么就是断不了呢?
ADOQuery1.SQL.Add(''restore database MMDATA from disk='''+suiEdit6.Text+''' with replace');
ADOQuery1.ExecSQL;调用存储过程:
ADOQuery1.SQL.Add('execute 存储过程名 参数1,参数2,...');
ADOQuery1.ExecSQL;