我使用TAdoconnection访问数据库。 在开发期间,我将connectionstring设置为我的本地数据库,并将connected连接设置为true以获取其他dbcomponents的信息。
当我为客户完成程序时,我有时会忘记重置参数,这会导致客户计算机出现异常,因为连接字符串无效。
我试图把数据模块的oncreate事件(第一行)放入一个连接的:= false但似乎迟到了。 如何确保程序具有客户的严格设置? 我试图在条件编译短语中设置一些参数,如:
{$IFDEF PRODUCT}
param1:=..
....
{$ENDIF}
但我不知道如何为视觉组件做这件事。
答案 0 :(得分:3)
您可以在事件TADOConnection.OnBeforeConnect上设置运行时的真正ConnectionString:
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;
答案 1 :(得分:0)
如果是dfm文件,则无法使用条件。这意味着如果您在设计时设置属性,那么它们将在运行时无条件地应用。
如果您必须避免使用某些属性设置运送软件,那么您必须完全停止这样做。运行时的程序化解决方案不是一种选择。
就个人而言,我会使用我的版本控制流程来提供帮助。每当我提交更改时,我都会审核所有更改。我检查dfm更改是我日常工作的一部分。
最重要的是,我在发布之前测试软件。此测试需要在洁净室环境中进行。您将需要一个代表目标部署环境的虚拟机快照。在您的开发机器上进行测试显然不是一个可行的选择。
答案 2 :(得分:0)
正如其他人所说,源控制系统可以帮助检测.DFM文件的更改,但是,您也可以使用其他一些工具/想法。
以下是一些不会过多影响您当前部署过程的想法:
1)已连接属性:GExperts GExperts包含一个IDE加载项,可以在编译时检测打开的连接,并自动将connected属性设置为false。至少,您可以使用该工具手动检测和更改,或让工具为您执行此操作。该功能可在GExperts菜单中找到:配置,设置组件属性,然后添加TAdoConnection,属性:已连接,值:false。
2)ConnectionString:将您的连接字符串移动到.ini文件或注册表,并有两个值,一个用于开发,另一个用于生产。在您的代码中,根据标志设置每个,或使用:
if debughook <> 0 then
// fetch design-time connection string
else
// fetch production connection string
我还建议您使用FinalBuilder等软件自动化构建过程。