关于数据库恢复.
当Adoquery的connectionstring的测试链接成功,sql语句可以在查询分析器执行成功时,为什么程序在执行这行代码adoquery1.execsql;时会停滞20秒(正常情况应是没有停滞),20秒过去后,没有报错,程序继续往入执行代码,直到事件结束。而数据库并没有恢复。 值得一提的是,我把这个数据库恢复的模块提出来单独执行,Adoquery的connectionstring不变
Adoquery1.text 不变.
数据库恢复成功。
再一点,这个数据库恢复模块应该是没有改动过的,有一天,突然出现上述情况
(在这句代码停滞adoquery1.execsql).且数据库不恢复.
这是为什么呀~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~?我愿倾家荡产出分,请大家指教,帮在下解决这个问题。不然,老板会干掉我的.
顺便给出QQ号吧:19273210
当Adoquery的connectionstring的测试链接成功,sql语句可以在查询分析器执行成功时,为什么程序在执行这行代码adoquery1.execsql;时会停滞20秒(正常情况应是没有停滞),20秒过去后,没有报错,程序继续往入执行代码,直到事件结束。而数据库并没有恢复。 值得一提的是,我把这个数据库恢复的模块提出来单独执行,Adoquery的connectionstring不变
Adoquery1.text 不变.
数据库恢复成功。
再一点,这个数据库恢复模块应该是没有改动过的,有一天,突然出现上述情况
(在这句代码停滞adoquery1.execsql).且数据库不恢复.
这是为什么呀~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~?我愿倾家荡产出分,请大家指教,帮在下解决这个问题。不然,老板会干掉我的.
顺便给出QQ号吧:19273210
解决方案 »
- 一直很困扰的问题
- FastReport如果要让最终用户修改报表格式,应如何做
- FastReport报表如何导出excel格式
- 怎样为控件增加事件?
- 同样的代码,为什么在普通的窗口程序连接数据库成功,在服务程序里连接失败
- Opengl
- 悲剧了!dfm 文件存在但FORM窗口没了!!
- 高分!如何修改原有控件的事件呢?如修改Tedit控件的keypress事件呢?
- Sql更新问题
- 我们来开一个关于XML的话题好不好(主要用于初学者的,热烈欢迎高手加盟)
- 请问:DBGrid的OnColExit事件怎么会是这样的?!好象只有在同一行中从一个字段离开到另外一个字段的时候才触发!?换行就不触发了,怎么
- 如何根据dbgrid的column的字段名确定其对应列数
:)
楼主是数据库恢复时候出现不能恢复的问题,而我是选择了备份保存路径之后,点击“数据库备份”,提示“备份成功”,然而进入指定的保存文件夹里面后,却发现数据库没有被备份,我想可能是这几句SQL语句有问题,我顺便把源代码贴出来吧,望各位大虾赐教:
==============================================
==============声明部分========================
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzTabs, ComCtrls, StdCtrls, RzLabel, DB, ADODB,IniFiles;type
TForm1 = class(TForm)
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
RzLabel1: TRzLabel;
Search_B: TButton;
Copy_B: TButton;
Edit1: TEdit;
RadioButton1: TRadioButton;
RzLabel2: TRzLabel;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
StatusBar1: TStatusBar;
ADOQuery1: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure Search_BClick(Sender: TObject);
procedure Copy_BClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
db_name,pathname,path1,db_name1:string;
usename,psw,connectionstring:string; { Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
databasename:string;
Ini:TIniFile;begin
Ini:=TInifile.Create(ExtractFileDir(Application.ExeName)+ '\config.INI' );
try
usename:=Ini.ReadString('sqlconfig','usename','sa');
psw:=Ini.Readstring('sqlconfig','psw','1');
connectionstring:=Ini.ReadString('Connection_set','connectionstring','');
// Persist SecurityInfo:=Ini.Readboolean('Form','Persist SecurityInfo',False);
// User ID:=Ini.ReadString('Form','usename','sa');
// Initial Catalog:=Ini.ReadString('Form','usename','data_student');
// Data Source:=Ini.ReadString('Form','usename','LIXIANYING');
// Password:=Ini.ReadString('Form','usename','1');
Ini.Free;
Finally databasename:='data_student';
db_name:='data_student';
StatusBar1.Panels.Items[0].Text:='系统备份/恢复 面板'; end;
if (Trim(Edit1.text)<>'') then
Copy_B.enabled:=True;
ADOQuery1.ConnectionString := connectionstring;
end;
==============================================================
==============================================================
==============================================
其中 “备份”面板就两个按钮
procedure TForm1.Search_BClick(Sender: TObject);begin
if SaveDialog1.Execute then
begin
Edit1.Text:=SaveDialog1.FileName;
pathname:=SaveDialog1.filename;
db_name:=Copy(ExtractFileName(pathname),1 ,Length(ExtractFileName(pathname))-4);
end;
end;procedure TForm1.Copy_BClick(Sender: TObject);begin
{ ADOQuery1:=TADOQuery.create(self);} Copy_B.Enabled:=false;
StatusBar1.Panels.Items[0].Text:='备份中';
if(Trim(db_name)<>'') then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(connectionstring)+','+QuotedStr(Trim(pathname));
try
//ADOQuery1.Open;
ADOQuery1.ExecSQL;
except
ShowMessage('数据库发生异常');
StatusBar1.Panels.Items[0].Text:='备份失败!';
Abort;
end;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='use master EXEC sp_addumpdevice ''disk'','+QuotedStr(db_name)+','+QuotedStr(Trim(pathname));
try
ADOQuery1.ExecSQL;
showmessage('备份成功');
StatusBar1.Panels.Items[0].Text:='备份成功';
except
ShowMessage('数据库发生异常');
StatusBar1.Panels.Items[0].Text:='备份失败';
Abort;
end; showmessage('应用程序将重启,以完成备份');
ADOQuery1.Free;
Application.Terminate;
end;
end;=================
望高手不吝赐教呀。 我的QQ 529998673 先谢谢各位大虾了
function pRestoreDataBase(DataBaseName, BackupFileName : String) : Boolean;
var
TempTab : TADOQuery;
begin
TempTab := TADOQuery.Create(nil);
try
TempTab.Connection := pvADOConn;
TempTab.SQL.Add('USE master');
TempTab.SQL.Add('RESTORE DATABASE '+DataBaseName+' FROM DISK = '''+BackupFileName+'''');
TempTab.ExecSQL;
TempTab.Free;
Result := True;
except
TempTab.Free;
Result := False;
end;
end;
begin
with SqlCommand do
begin
CommandText:='use Master';//
Execute;
ClearMSSQLUser(DBname);
CommandText:='execute sp_helpdevice';//系统存储过程
Execute;
CommandText:='Restore database '+DBname+' From disk='''+SoureName+''' with replace';
Execute;
end;
end;//DBname 备份库名称 //SoureName 那个盘Procedure BakUpdatebameOk(BkDBname,MDFileStr : String);
begin
with SqlCommand do
begin
CommandText:='use Master';
Execute;
CommandText:='execute sp_helpdevice';//系统存储过程
Execute;
CommandText:='backup database '+BkDBname+' to disk='''+MDFileStr+''' with init';
Execute;
CommandText:='Use '+BkDBname;
Execute;
end;
end;
var
SelectQuery : TAdoQuery;
ClearProUser : TAdoQuery;
begin
try
SelectQuery :=TAdoQuery.Create(nil);
ClearProUser:=TAdoQuery.Create(nil);
SelectQuery.Connection :=SqlConnection;
ClearProUser.Connection:=SqlConnection;
SelectQuery.SQL.Clear;
ClearProUser.SQL.Clear;
SelectQuery.SQL.Add('select * from dbo.sysobjects where '+
'id = object_id(N''[dbo].[p_killspid]'') and OBJECTPROPERTY(id, N''IsProcedure'') = 1');
SelectQuery.Open;
if SelectQuery.Eof then
begin
SqlCommand.CommandText:='create proc p_killspid ' +
'@dbname sysname ' +
'as '+
'declare @s nvarchar(1000) ' +
'declare tb cursor local for ' +
'select s=''kill ''+cast(spid as varchar) '+
'from master..sysprocesses '+
'where dbid=db_id(@dbname) '+
'open tb '+
'fetch next from tb into @s '+
'while @@fetch_status=0 '+
'begin '+
' exec(@s) '+
' fetch next from tb into @s '+
'end '+
'close tb '+
'deallocate tb';
SqlCommand.Execute;
end;
SqlCommand.CommandText:='exec p_killspid '''+DBname+'''';
SqlCommand.Execute;
finally
freeandnil(SelectQuery);
freeandnil(ClearProUser);
end;
end;