2017-01-19 3 views
3

Dans mon application Delphi 7, il est possible de créer des connexions au serveur sql et de stocker les connectionstrings dans un fichier de configuration.
Cela a toujours fonctionné sans aucun problème depuis des années.PromptDataSource dans Delphi 7 donne des résultats différents auparavant

Le code pour la construction de la chaîne de connexion est la suivante:

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 est une fonction des ADODB.pas et apporte la Microsoft datalink property window et après avoir configuré la connexion ConnectionString est retourné.

Dans le passé, j'ai pu décocher Blank password et vérifier Allow saving password et le mot de passe et security info=true était présent dans le connectionstring retourné.
Mais cela a changé depuis quelque temps, je ne sais pas quand. La fonction ne renvoie plus jamais le mot de passe et ne contient plus d'info de sécurité = true. Par conséquent, ces cases à cocher reviennent toujours et le mot de passe est toujours vide comme dans cette capture d'écran: enter image description here

Je suppose que certaines mises à jour de Windows me l'ont fait ou pourraient-elles être quelque chose d'autre?
J'espère que quelqu'un a rencontré cela et a une solution pour cela.

EDIT 1
Il semble que le problème ne se produit que lorsque je choisis SQL Server Native Client 11.0 comme fournisseur. Quand je choisis Microsoft OLE DB Provider for SQL Server il n'y a pas de problème et tout fonctionne bien.
Existe-t-il un moyen de faire en sorte que le client natif se comporte et renvoie également la chaîne de connexion souhaitée? Le système d'exploitation que je teste sur est Windows 8.1

EDIT 2
J'ai essayé de définir la propriété des informations de sécurité persistante = true comme suggéré dans les commentaires, mais encore une fois cela se est revenu lorsque vous utilisez le client natif, mais pas lorsque vous utilisez le client OLE DB

EDIT 3
je l'ai essayé en faisant un fichier texte avec l'extension .udl et sur elle doubleclicking, comme suggéré dans les commentaires. Le résultat est le même, cela fonctionne pour le fournisseur OLE DB mais pas pour le client natif

+1

Je pense que votre q manque quelques éléments, à savoir quel système d'exploitation et quel fournisseur ADO utilisez-vous? – MartynA

+0

@MartynA J'ai ajouté le fournisseur et l'OS dans ma question. – GuidoG

+0

https://msdn.microsoft.com/fr-fr/library/ms130978.aspx – Sami

Répondre

2

La clé est Persist Security Info=True (ce qui est BTW non recommandé pour des raisons de sécurité). La chose à propos de Native Client 10/11 est que toute modification du nom d'utilisateur ou du mot de passe dans la boîte de dialogue Liaison de données réinitialiseraPersist Security Info à False.

Vous devez entrer l'onglet Allaprès vous modifiez le nom d'utilisateur/mot de passe et de modifier Persist Security Info-True. Une boîte de dialogue d'information peut vous indiquer que l'enregistrement d'un mot de passe non crypté n'est pas recommandé.

enter image description here

+0

Le faire dans cet ordre a fait l'affaire, merci beaucoup. La boîte de dialogue avec l'avertissement n'est aucun problème les utilisateurs sont déjà habitués à cela. De plus, la chaîne de connexion est stockée cryptée dans le fichier de configuration, donc pas de problème – GuidoG