【问题标题】:PromptDataSource in Delphi 7 is giving different results it did beforeDelphi 7 中的 PromptDataSource 给出了与以前不同的结果
【发布时间】:2017-01-19 19:48:59
【问题描述】:

在我的 Delphi 7 应用程序中,可以建立与 sql server 的连接并将连接字符串存储在配置文件中。
多年来,这一直有效,没有任何麻烦。

构建连接字符串的代码是这样的:

procedure TDataModuleMain.GetADOProviderString;
var
  ConnectionString : string;
begin
  ConnectionString := PromptDataSource(Application.MainForm.Handle, cdsConnectionsADOConnectionString.AsString);

  if ConnectionString <> cdsConnectionsADOConnectionString.AsString then
  begin
    if not (cdsConnectionsADO.State in [dsEdit, dsInsert]) then
      cdsConnectionsADO.Edit;
    cdsConnectionsADOConnectionString.AsString := ConnectionString;
  end;
end;

PromptDataSource 是 ADODB.pas 中的一个函数,它会调出 Microsoft datalink property window 并在配置连接后返回连接字符串。

过去,我可以取消选中 Blank password 并选中 Allow saving password,并且返回的连接字符串中存在密码和 security info=true
但这已经改变了一段时间,不知道什么时候。该函数现在永远不会返回密码并且不再包含安全信息=true。因此,这些复选框总是会恢复并且密码总是空的,就像这个截图一样:

我怀疑某些 Windows 更新已经对我这样做了,或者可能是其他原因?
我希望有人遇到过这个问题并有解决方案。

编辑 1
只有当我选择SQL Server Native Client 11.0 作为提供者时,才会出现问题。当我选择Microsoft OLE DB Provider for SQL Server 时没有问题,一切正常。
有没有办法让 Native Client 运行并返回所需的连接字符串? 我正在测试的操作系统是 Windows 8.1

编辑 2
我尝试按照 cmets 中的建议设置属性持久安全信息 = true,但是在使用本机客户端时再次恢复,但在使用 OLE DB 客户端时不会恢复

编辑 3
按照 cmets 中的建议,我通过制作扩展名为 .udl 的文本文件并双击它来尝试它。结果是一样的,它适用于 OLE DB 提供程序,但不适用于本机客户端

【问题讨论】:

  • 我认为您的 q 缺少几项,即您使用的是哪个操作系统和哪个 ADO 提供商?
  • @MartynA 我在我的问题中添加了提供程序和操作系统。
  • @Sami 谢谢你的链接,但我没有看到任何关于我的问题的信息。我本来可以忽略它的
  • 尝试添加Persist Security Info=True

标签: delphi delphi-7 ado


【解决方案1】:

密钥是Persist Security Info=True(出于安全原因,不建议这样做)。 Native Client 10/11 的问题是,对“数据链接”对话框中的用户名或密码的任何更改都会重置 Persist Security InfoFalse

因此,您必须在更改用户名/密码并将Persist Security Info 更改为True 之后进入All 选项卡。您可能会看到一个信息对话框,指出不建议保存未加密的密码。

【讨论】:

  • 按这个顺序做就可以了,非常感谢。带有警告的对话框没有问题,用户已经习惯了。连接字符串也加密存储在配置文件中,所以也没有问题
猜你喜欢
  • 1970-01-01
  • 2021-05-07
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
相关资源
最近更新 更多