Delphi 7中的PromptDataSource提供的结果与

时间:2017-01-19 19:49:00

标签: delphi delphi-7 ado

在我的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并在配置连接后返回connectionstring。

过去,我可以取消选中Blank password并检查Allow saving password,并在返回的连接字符串中显示密码和security info=true
但这已经改变了一段时间,不确定何时。该函数现在永远不会返回密码,并且不再包含security info = true。因此,这些复选框始终还原,密码始终为空,如此屏幕截图所示:enter image description here

我怀疑有些Windows更新已经对我这么做了,或者它可能是别的吗? 我希望有人遇到过此问题,并为此提供解决方案。

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

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

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

1 个答案:

答案 0 :(得分:2)

密钥是Persist Security Info=True(出于安全原因,不建议使用BTW)。关于Native Client 10/11的事情是,对数据链接对话框中的用户名或密码的任何更改都将重置 Persist Security InfoFalse

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

enter image description here