忘记为生产版本重置参数

Forget to reset parameter for production version

我使用TAdoconnection 访问数据库。 在开发过程中,我将连接字符串设置为我的本地数据库并将连接设置为 true 以获取其他 dbcomponents 的信息。

当我为客户完成程序时,有时会忘记重新设置参数,导致客户计算机出现异常,因为连接字符串无效。

我试图在数据模块的 oncreate 事件(第一行)中放入一个 connected:=false 但似乎晚了。 我如何确保程序具有适合客户的正确设置? 我试图在条件编译短语中设置一些参数,如:

{$IFDEF PRODUCT}
param1:=..
....
{$ENDIF} 

但我不知道如何为可视组件执行此操作。

您可以在事件运行时设置 true ConnectionString TADOConnection.OnBeforeConnect:

procedure TDM1.ADO1BeforeConnect(Sender: TObject);
begin
  ADO1.ConnectionString := 'Provider=SQLOLEDB;......';
end;

或者您可以延迟连接

var CanConnect: Boolean;
procedure TDM1.ADO1BeforeConnect(Sender: TObject);
begin
  if not CanConnect then Abort;
end;

您不能在 dfm 文件中使用条件语句。这意味着如果您在设计时设置属性,那么它们将在 运行 时无条件地应用。

如果您必须避免发布带有特定属性集的软件,那么您必须阻止自己这样做。 运行 时间的编程解决方案不是一个选项。

就我个人而言,我会使用我的版本控制流程来提供帮助。每当我提交更改时,我都会检查所有更改。我会把检查 dfm 更改作为我日常工作的一部分。

最重要的是,我会在发布软件之前对其进行测试。此测试需要在洁净室环境中进行。您需要一个代表目标部署环境的虚拟机快照。在您的开发机器上进行测试显然不是一个可行的选择。

正如其他人所说,源代码控制系统可以帮助检测您的 .DFM 文件的更改,但是,还有一些其他 tools/ideas 供您使用。

这里有一些想法不会对您当前的部署过程产生太大影响:

1) 已连接 属性:GExperts GExperts 包含一个 IDE 插件,可以在编译时检测打开的连接,并自动为您将已连接的 属性 设置为 false。至少,您可以使用该工具手动检测和更改,或者让该工具为您完成。该功能可以在 GExperts 菜单上找到:Configuration,Set Component Properties,然后添加 TAdoConnection,属性: Connected, Value: false.

2) ConnectionString: 将您的连接字符串移动到 .ini 文件或注册表,并有两个值,一个用于开发,一个用于生产。在您的代码中,根据标志设置每个,或使用:

 if debughook <> 0 then
   // fetch design-time connection string
 else
   // fetch production connection string

我还建议您考虑使用 FinalBuilder 等软件自动化构建过程。