如何在程序中用 数据库的备份文件 创建数据库?环境:已装SQL Server
数据库名和数据文件存放路径动态提供
数据库名和数据文件存放路径动态提供
解决方案 »
- [急]小妹真心求助Delphi高手,幫忙修改一段Delphi7寫出來的代碼~~ .
- 记录中的数值可否用打勾来代替?
- delphi7 udpsocket的問題
- 在数据库中如何做or的查询呢?
- Access中的自动编号在delphi中怎么用
- 请问:如何按星期/自定义月份起始终止日期对数据库进行统计(一条SQL语句)?
- 真正的模拟键盘!有人动懂吗?
- 怎么在程序里控制写卡器
- 怎么样判断光驱是否是准备就绪哪
- 请问如何从一个字符串中提取特定的一段文字,如:s:='hello, http://abc.com.cn ok'中提取http://abc.com.cn出来?
- 急,在线等.关于stringgrid颜色问题.
- 一个删除和添加数据库的问题!
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
--恢复数据库(RESTORE DATABASE)
RESTORE DATABASE Sales--名称
FROM TAPE = '\\.\tape0'--路径
procedure TLoginForm.InitDatabase();
var
FileName:string;
begin
CreateDir('c:\DataBaseData'); DM.ADOQuery.CommandTimeout := 500000;
FileName := gsProgramPath+'\Backup';
try
ExecuteSql('use master');
ExecuteSql(Format('RESTORE DATABASE %s FROM DISK =''%s'' with replace',[g_sDefaultdb,FileName]));
ExecuteSql(Format('backup log %s with no_log',[g_sDefaultdb]));
ExecuteSQL(Format('use %s',[g_sDefaultdb]));
except
bsSkinMessage1.MessageDlg('初始化数据库失败,请检查数据库是否安装完整!',mtInformation,[mbOK],0);
Application.Terminate;
end;
end;
var sqlstr :string;
begin
ADOQuery1.ConnectionString :='Provider=SQLOLEDB.1;Password='+EDIT3.TEXT+';Persist Security Info=True;User ID='+EDIT2.TEXT+';Initial Catalog=master;Data Source='+Edit1.TEXT+'';//连接数据库
with ADOQuery1 do
begin
if active then close;
sql.clear;
sqlstr :=' RESTORE FILELISTONLY FROM DISK = '+QuotedStr(Edit13.text) ;//得到逻辑文件名
sql.Add(sqlstr);
open;
first;
Edit12.text:= fields[0].asstring;
next;
Edit14.text := fields[0].asstring ;
close;
end;
end;procedure TForm1.Button4Click(Sender: TObject);//还原成新的数据库
var sqlstr :string;
begin
sqlstr :='RESTORE DATABASE '+Edit10.text;
sqlstr :=sqlstr+' FROM DISK = '+QuotedStr(Edit13.text);//备份文件位置
sqlstr :=sqlstr+' WITH MOVE '+QuotedStr(Edit12.text)+' TO '+QuotedStr(Edit11.text)+',';//mdf逻辑文件名Edit12.text,新的mdf存放位置Edit11.text
sqlstr :=sqlstr+' MOVE '+QuotedStr(Edit14.text)+' TO '+QuotedStr(Edit15.text);//log逻辑文件名Edit14.text,新的log存放位置Edit12.text
ADOCommand1.ConnectionString:='Provider=SQLOLEDB.1;Password='+EDIT3.TEXT+';Persist Security Info=True;User ID='+EDIT2.TEXT+';Initial Catalog=master;Data Source='+Edit1.TEXT+'';
ADOCommand1.CommandText:=sqlstr;
ADOCommand1.Execute;
showmessage('执行成功');
end;
var S:String;
begin
s:='EXEC sp_attach_db @dbname = N'+char(39)+'数据库名'+char(39)+','+
'@filename1 = N'+char(39)+ExtractFilePath(paramstr(0))+'数据库名_Data.MDF'+char(39)+
','+'@filename2 = N'+char(39)+ExtractFilePath(paramstr(0))+'数据库名_Log.LDF'+char(39);
ADOCommand.CommandText := s;
ADOCommand.Execute();
Messagebox(handle,'数据库安装成功!','提醒',MB_OK+MB_ICONINFORMATION);
end;
ron_xin(星雨)
sqlstr :='RESTORE DATABASE '+Edit10.text;
_______
如果Edit10.text和备份数据库里的数据库名称不一样会出错!
Error:
服务器: 消息 3141,级别 16,状态 1,行 1
要还原的数据库先前命名为 'bs2'。请用 WITH REPLACE 选项重新发出该语句以重写数据库 'selfdb'。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。
var sqlstr :string;
begin
ADOQuery1.ConnectionString :='Provider=SQLOLEDB.1;Password='+EDIT3.TEXT+';Persist Security Info=True;User ID='+EDIT2.TEXT+';Initial Catalog=master;Data Source='+Edit1.TEXT+'';//连接数据库
with ADOQuery1 do
begin
if active then close;
sql.clear;
sqlstr :=' RESTORE FILELISTONLY FROM DISK = '+QuotedStr(Edit13.text) ;//得到逻辑文件名
sql.Add(sqlstr);
open;
first;
Edit12.text:= fields[0].asstring;
next;
Edit14.text := fields[0].asstring ;
close;
end;
end;//你没有执行这个事件,代码是经过测试的...留下Email我可以发给你原代码
selfdb是新创建的数据库名称 如果用 WITH REPLACE 选项重新发出该语句以重写数据
备份文件里的数据库名称如何获取?
sqlstr :='RESTORE DATABASE '+Edit10.text;
sqlstr :=sqlstr+' FROM DISK = '+QuotedStr(Edit13.text);//备份文件位置
sqlstr :=sqlstr+' WITH MOVE '+QuotedStr(Edit12.text)+' TO '+QuotedStr(Edit11.text)+',';//mdf逻辑文件名Edit12.text,新的mdf存放位置Edit11.text
sqlstr :=sqlstr+' MOVE '+QuotedStr(Edit14.text)+' TO '+QuotedStr(Edit15.text);//log逻辑文件名Edit14.text,新的log存放位置Edit12.text
sqlstr :=sqlstr+‘,REPLACE’ **********
结帖了 !!!