sql server版本的进销存软件是如何用程序初始化数据库和创建账套的?我发现一般的进销存软件的创建步骤是这样的:
1、建一个总数据库:提示用户输入数据库服务器名、数据库登陆用户名、登陆密码,先创建一个总数据库,用来存放将来要存放的账套数据库的数据库名称和路径。
2、建账套:客户端输入要创建的账套的名称,创建账套数据库。我虽然知道创建的过程,但我不知道它具体是如何创建的,使用脚本创建的?还是用还原数据库的方式?还是用附加数据库的方式?它是如何做到既安全又高效的?
1、建一个总数据库:提示用户输入数据库服务器名、数据库登陆用户名、登陆密码,先创建一个总数据库,用来存放将来要存放的账套数据库的数据库名称和路径。
2、建账套:客户端输入要创建的账套的名称,创建账套数据库。我虽然知道创建的过程,但我不知道它具体是如何创建的,使用脚本创建的?还是用还原数据库的方式?还是用附加数据库的方式?它是如何做到既安全又高效的?
var
i : integer;
strCmdText,strSQL : string;
lstSQL : Tstringlist;
begin
lstSQL := TStringList.Create;
try
lstSQL.LoadFromFile(ScriptFile);
pb.MaxValue := lstSQL.Count;
pb.MinValue := 0;
pb.Progress := 0;
strCmdText := '';
strSql := '';
for i:=0 to lstSQL.Count-1 do
begin
strCmdText:=lstSQL[i];//读取一行
strCmdText := Trim(strCmdText);
if (Length(strCmdText)>0) and//屏蔽空行
(copy(strCmdText,1,2) <> '/*') and (copy(strCmdText,1,2) <> '--') then//屏蔽注释行
begin
if UpperCase(copy(strCmdText,1,2)) <> 'GO' then
begin
strSQL:=strSQL+#13#10+strCmdText;
end
else
begin
conn.Execute(strSQL);
strSQL:='';
end;
end;
pb.Progress := pb.Progress + 1;
Application.ProcessMessages;
end;
finally
lstSQL.Free;
end;
end;上边是执行指定文件脚本的例子。其中conn是个数据库连接。
给你个脚本例子:CREATE DATABASE Branch_mis
GO
USE Branch_mis
GO----********权限管理部分的建表******************CREATE TABLE [tchtc].[t_subsys] (
[f_subsys_name] [varchar] (20) NULL ,
[f_subsys_id] [int] NOT NULL ,
[f_qxbz] [varchar] (20) NULL
) ON [PRIMARY]
GOCREATE TABLE [tchtc].[t_module] (
[f_module_id] [int] NOT NULL ,
[f_subsys_id] [int] NOT NULL ,
[f_module_name] [varchar] (20) NULL,
[f_module_entry] [varchar] (20) NULL
) ON [PRIMARY]
GO
基本的思路就是通过
create database 建立数据库
create table 建立表
剩下的就是T-sQl的事情了
.....
filestream 读取脚本文件
使用adocommand执行
GO
USE Branch_mis
GO
if pos('%s',一行脚本) > 0 then
begin
if Length(strSQL) = 0 then
strSQL:=Format(一行脚本,[BandDBName])
else
strSQL:=strSQL+#13#10+Format(strCmdText,[BandDBName]);
end;
执行strSQL
GO
USE Branch_mis
GO
if pos('%s',一行脚本) > 0 then
begin
if Length(strSQL) = 0 then
strSQL:=Format(一行脚本,[BandDBName])
else
strSQL:=strSQL+#13#10+Format(strCmdText,[BandDBName]);
end;
执行strSQL
========================================
不好意思,你上面的程序我不太看得懂,能否详细解释一下
我看懂了,不必解释了