如何启动绿色迷你SQL2000服务

最近在一个项目,要求业务数据存放在本地。 最初考虑了MySQL和SQLite,但是MySQL体积略大,再者本人也不太习惯使用MySQL; SQLite呢功能太弱,效率随着数据量的增大会有所下降;Oracle功能强大,是我的最爱,但是又没有绿色版本的;Access什么的也就算了,不在考虑之列。

无意中找到了一个MiniSQL2000,其实就是多年前的GSQL,大小合适,又是关系型数据库,存储过程什么的都支持,功能足以满足业务需求。 本想联系一下MiniSQL2000的作者,咨询一下核心进程sqlservr.exe的运行原理,谁曾想入群竟然需要先交100块钱!!!! 虽说是小钱,我也尊重这位作者的付出,但是实在是无力吐槽,谁让人家掌握那么一点点我不知道的技术呢!

本着有事没事找度娘的原则,网上搜了一下运行参数和原理,其实很简单,只要虚拟注册一下SQL Server的注册表信息即可。 另外在网上又找到了一段GSQL作者写的注册虚拟注册表的关键代码,所以略加改动做了一个最简单的启用SQL Server 2000服务的小程序,源代码也分享给想学习的同学,希望可以节省大家的时间,少走弯路!

源码下载传送门:https://download.csdn.net/download/valesgubb/10864668

sa用户默认密码admin,SQL实例名:BMSSQL,或者通过8899端口访问。

 

源码说明:

有两个注册表信息RegUnInstall.Bin 和 RegInstall.Bin 放在资源文件里面,通过Brcc32 REG.rc编译到.res文件,程序中释放出来替换实例名和数据库文件路径之后进行虚拟注册。

另外下载的源码里面有两个地方要改一下,否则实例名和端口不能通过配置文件进行配置。

procedure ExecRegFile(AFile: string);

  function FMPath(APath: string): string;
  begin
    Result := StringReplace(APath, '\', '\\', [rfReplaceAll]);
  end;

var
  TempData: string;
  REGBin: TStringList;
  rs: TResourceStream;
begin
  rs := TResourceStream.Create(HInstance, AFile, 'reg');
  rs.Position := 0;
  REGBin := TStringList.Create;
  REGBin.Clear;
  REGBin.LoadFromStream(rs);
  TempData := REGBin.Text;
  TempData := StringReplace(TempData, '$Name', InstanceName, [rfReplaceAll]);
  TempData := StringReplace(TempData, '$Port', InstancePort, [rfReplaceAll]);
  TempData := StringReplace(TempData, '$Path', FMPath(RunPath), [rfReplaceAll]);
  TempData := StringReplace(TempData, '$D', FMPath(RunPath + 'Data\master.mdf'), [rfReplaceAll]);
  TempData := StringReplace(TempData, '$L', FMPath(RunPath + 'Data\mastlog.ldf'), [rfReplaceAll]);
  REGBin.Text := StringReplace(TempData, '$E', FMPath(RunPath + 'Logs\SQL_Logs.log'), [rfReplaceAll]);

  RunRegScript(REGBin);

  FreeAndNil(REGBin);
  FreeAndNil(rs);
end;

 

 

遗留问题:

本代码只适用于Delphi2007及以下版本进行编译,我用Delphi 10编译运行会报版本不一致的错误,这个问题尚未解决,如果哪位牛 人知道原因,请告知解决方案,万分感谢!

 

申明: SQL Server版权归 美国微软公司所有,本实例仅供参考学习!

 

posted @ 2018-12-20 16:50  鬼画符  阅读(1267)  评论(2编辑  收藏  举报