我觉得要能在本机上自动建库(没有用户参与),必须满足以下两个条件之one
NO.1: 用户安装SQL数据库时,选择了“使用windows身份认证”;
NO.2: 用户安装SQL数据库时,选择了“使用windows身份认证或使用SQL SERVER 身份认证”并且SQL的SA用户的密码为空;
做一没有窗体的应用程序SetDBName.exe,做安装程序的时候,让安装程序把应用程序的安装路径写到注册表或ini文件里,这里用一个名为myini.ini的ini文件,设置安装程序在安装完成时自动运行SetDBName.exe,下面说一下的解决方法(假设数据库名称为:YourDBName,SetDBName.exe运行时从myini.ini里读出数据库文件名,如:C:/abc/YourDBName_Data.MDF,数据库日志就不用了。):
var
success:boolean;
myini:tinifile;
myDBfile:string;
begin
success:=false;
try
myini:=tinifile.create(extractfilepath(application.exename)+'myini.ini');
myDBfile:=myini.readstring('aaa','myini','');
finally
myini.free;
end;
with TADOQuery.Create(nil)do
begin
close;
ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False';
sql.Text:='sp_attach_single_file_dB '+QuotedStr( myDBfile)+','+QuotedStr(YourDBName);
try
try
ExecSQL;
success:=true;
except
try
close;
ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa';
execsql;
success:=true;
close;
except
close;
end;
end;
if not success then
begin
ConnectionString:='Provider=SQLOLEDB.1;Password='+InputBox('请输入数据库用户SA的密码','请输入数据库用户SA的密码','')+';Persist Security Info=True;User ID=sa'
execsql;
end;
finally
free;
end;
不好意思程序代码有点乱,也没有调试,但这是思路,也是可行的办法,
本人很菜,QQ:10772221