在程序中用语句将文件附加到当前服务器 ( 积分: 50 )

  • 主题发起人 主题发起人 wanwqing
  • 开始时间 开始时间
W

wanwqing

Unregistered / Unconfirmed
GUEST, unregistred user!
文件附加到当前服务器,在Sql Query中手工操作:
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf',
@filename2 = N'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs_log.ldf'
在程序中,用语句怎么将文件附加到当前服务器?
这样便于软件的发布安装
 
文件附加到当前服务器,在Sql Query中手工操作:
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf',
@filename2 = N'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs_log.ldf'
在程序中,用语句怎么将文件附加到当前服务器?
这样便于软件的发布安装
 
用ADOQuery
ADOQuery.Active:=False;
ADOQuery.SQL.Clear;
ADOQuery.SQL.ADD('User Master');
ADOQuery.SQL.ADD('EXEC sp_attach_db @dbname = N'+''''+' pubs'+''''+' ,@filename1 = N'+''''+' c:/pps.mdf'+''''+' ,@filename2 = N'+''''+' c:/pps.ldf'+'''');
ADOQuery.EXECSQL;
 
ADOQuery的ADOConnection....怎么设定?
ADOQuery.SQL.ADD('User Master'); ---------->为什么要Master?
以下两行能否详细点,解释一下,或举个例子说明:
ADOQuery.SQL.ADD('EXEC sp_attach_db @dbname = N'+''''+' >pubs'+''''+' ,@filename1 = N'+''''+' c:/pps.mdf'+''''+' ,@filename2 = N'+''''+' c:/pps.ldf'+'''');
分数一定给
 
还有别的办法吗?
 
拿一段代码给你吧:
const
strDBName = 'ipcamera';
strConn = 'Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;' +
'Initial Catalog=%s;Data Source=%s';
function TForm3.setupDB(DBname,count, psw: string): boolean;
var
str:string;
begin
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:=format(strConn,[psw,count,'master',Dbname]);
try
ADOConnection1.Connected:=true;
adocmd.CommandText:='sp_attach_db ''ipcamera'' ,'''+ExtractFilePath(Application.ExeName)+'ipcamera_data.mdf'','''+ExtractFilePath(Application.ExeName)+'ipcamera_Log.LDF''';
ADOCMD.Execute;

if edit11.text='' then
begin
try
ADOCMD.CommandText:='sp_droplogin ipcamera';
ADOCMD.Execute;
str:=inttostr(random(100000));
ADOCMD.CommandText:='sp_addlogin ''ipcamera'','''+str+'''';
adocmd.Execute;
ADOCMD.CommandText:='sp_addsrvrolemember ''ipcamera'',''sysadmin''';
adocmd.execute;
edit10.Text:=edit1.text;
edit11.text:='ipcamera';
edit12.text:=str;

except
raise;
MessageBox(self.Handle,pchar('数据库操作失败。'),pchar(self.caption),MB_ICONERROR);
exit;
end;
end;
finally
if ADOConnection1.Connected=false then
raise exception.Create('与数据库连接失败。')

// show;
// Screen.Cursor := crDefault;
end;
MessageBox(self.Handle,pchar('数据库设置成功!'),pchar(self.caption),MB_ICONinformation);
end;
 
谢谢张辉明
 
张辉明:
执行你的程序没有反应,而且程序太烦琐。但是根据你的程序结合手工的方法我想到了解决问题的方法:先让ADOConnection1连上master数据库,ADOCommand中采用手工操作的语句,就可以。我已经在程序中调试通过了。谢谢你提供的思路。

另外,问一个简单的问题:
企业管理器中没有名字的数据库怎么删除?(程序中调试过程中一次忘了写数据库名产生的)
 
多人接受答案了。
 
后退
顶部