SQL = 'select count(*) from sysdatabases where name =''yourdatabasename'''; if fields[0].Asinteger = 0 then CreateDatabaseAndTable;procedure CreateDatabaseAndTable; begin with ADOQuery do begin Close; SQL.Clear; //将你的数据库全部表的Script导出成一个文件. SQL.LoadFromFile('your Create table SQL filename'); ExecSQL; end; end;
忘了,应该这是对SQLServer的master数据库 SQL.Add('use master'); SQL.Add( 'select count(*) from sysdatabases where name =''yourdatabasename'''); if fields[0].Asinteger = 0 then CreateDatabaseAndTable;procedure CreateDatabaseAndTable; begin with ADOQuery do begin Close; SQL.Clear; //将你的数据库全部表,还有其它什么的Script导出成一个文件. SQL.LoadFromFile('your Create table SQL filename'); ExecSQL; end; end;
kingsong(牛大锅)我的数据没有丢失。
restore时选项加个force ....(忘了,option页上第三个)。
我经理的意思是:用户安装时,先联接服务器,检测有没有数据库,if 没有数据库,then ,是否要建。if 要件,指定服务器,建库、表,联接。
//用一个ADOConnection和一个ADOCommand控件//用于得到当前计算机的名称
function ComputerName :string;
var
CNameBuffer :Pchar;
fl_Loaded :Boolean;
Clen :^Dword;
begin
GetMem(CNameBuffer,255);
New(Clen);
Clen^ := 255;
fl_Loaded := GetComputerName(CNameBuffer,Clen^);
if fl_Loaded then
result := strPas(CNameBuffer)
else
result :='unknown'; FreeMem(CNameBuffer);
DisPose(Clen);
end;//检测是否有数据库,如果没有创建
procedure Tdm1.DataModuleCreate(Sender: TObject);
begin//判断数据库文件是否存在
if not FileExists('C:\test.mdf') then
CheckDataBase;end;
//创建数据库。
procedure Tdm1.CheckDataBase;
var
Name : widestring;
AliasList, TableList, MyList :Tstrings;
DataFile,LogFile : string;
begin
Name := ComputerName;
ADOConnection1.Connected := False;
ADOCommand1.ConnectionString :='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=' + Name;//指出你要创建的数据库的位置
DataFile := 'c:\test.mdf';
LogFile := 'c:\test.ldf'; ADOCommand1.CommandText := 'create database test'
+' on primary '
+' (name = test ,filename = '
+ '''' + DataFile + ''','
+' size= 4 , maxsize = 10, filegrowth = 10%)'
+' log on '
+' (name = tianlogfile, filename = '
+ '''' + LogFile + ''','
+' size = 1, maxsize = 4, filegrowth = 10%)'; ADOCommand1.Execute; ADOCommand1.ConnectionString :='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=tianyi;Data Source=' + Name; //为数据库创建相应的表
ADOCommand1.CommandText :='Create Table 部门 (部门名称 char (20) Not Null )';
ADOCommand1.Execute;end;
这是我原来用的一段代码。可能会有些问题,看能不能帮是忙。希望会有高手来帮你!祝你好运!
2 数据库用户及其权限的建立呢?
3 当表很多呢?
4 要建存储过成呢?
。
完善了这几点,会是一个不错的安装程序。
SQL = 'select count(*) from sysdatabases where name =''yourdatabasename''';
if fields[0].Asinteger = 0 then CreateDatabaseAndTable;procedure CreateDatabaseAndTable;
begin
with ADOQuery do
begin
Close;
SQL.Clear;
//将你的数据库全部表的Script导出成一个文件.
SQL.LoadFromFile('your Create table SQL filename');
ExecSQL;
end;
end;
SQL.Add('use master');
SQL.Add( 'select count(*) from sysdatabases where name =''yourdatabasename''');
if fields[0].Asinteger = 0 then CreateDatabaseAndTable;procedure CreateDatabaseAndTable;
begin
with ADOQuery do
begin
Close;
SQL.Clear;
//将你的数据库全部表,还有其它什么的Script导出成一个文件.
SQL.LoadFromFile('your Create table SQL filename');
ExecSQL;
end;
end;
我直接将information.mdf & information.ldf 拷贝到应用程序中,或拷贝到目标数据库服务器上能不能行?
然后在应用程序中调用存储过程sp_attachdb将数据库恢复到服务器中
(当然要保证客户端和服务器已经联通)至于用户权根还是用程序调用
系统存储过程建立用户和权限就OK了