1

Microsoft SQL ServerR2Expressを使用してデータベースを作成しています。

delphiを使用してデータベースに接続しようとすると、次の接続文字列を使用する必要があります。

ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=db_formation;Data Source=EVILKID-pc\evilkid;';

ここで、「EVILKID-PC\evilkid」は私のPCの名前です。 ここに画像の説明を入力してください

お分かりのように、これは私のPCでのみ機能します。ローカルホストに接続するにはどうすればよいですか?「データソース」を「localhost」に変更しようとしましたが、接続されず、次のようになります。

[DBNETLIN][ConnectionOpen(Connect()).]SQL Server does not exist or access denied

問題がどこにあるか考えていますか?

4

3 に答える 3

4

インスタンスがローカルホスト上にある場合でも、接続文字列で指定する必要がある名前付きインスタンスです。

ADOConnection1.ConnectionString := '... Data Source=localhost\evilkid;';
于 2012-11-20T19:51:35.860 に答える
1

これを回避する方法はいくつかあります。Michaelが言ったように、設定ファイルを使用します。他の可能性は、DSNを使用してDBにアクセスすることです。常にlocalhost/machinenameの場合は、任意の数のメソッドを使用してマシン名を取得できます。私はいくつかの古いプロジェクトでTtvAPIThingを使用していますが、JEDIにはこれらに簡単にアクセスできるようにするシステム情報コンポーネントがあります。

于 2012-11-20T20:58:21.270 に答える
1

PCのローカルアプリデータパスにUDLファイル(Connection.UDL)を作成し、アプリケーションの接続文字列にそれを使用させます

Var
  plainAppName : String;
  appDataPath : String;

Begin
  plainAppName := ChangeFileExt(ExtractFilePath(ParamStr(0)),'.EXE','');
  appDataPath := IncludeTrailingBackslash(GetSpecialFolderLocation(CSIDL_APPDATA))+plainAppName+'\';
  ADOConnection.Connectionstring := 'FILE NAME = '+appDataPath+'Connection.UDL';

そして、Connection.UDLには

[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=YourPC\InstanceName

実際、それは空である可能性があります。ただし、ユーザー(または顧客)がファイルをダブルクリックすると、oleDB接続ダイアログが開きます。次に、サーバー、インスタンス、ログイン資格情報を設定し、接続をテストして保存します。

終わり。

アプリがファイルを開き(まあ、ADOConnectionが開きます)、安全です。

もう1つのより一般的なアプローチは、サーバーPCのIP /名前をINIファイルに保存し、それをコードに置き換えることです。

CONST
  adoStr = 'Provider=SQLOLEDB.1;Integrated Security=SSPI;'
          +'Persist Security Info=False;Initial Catalog=test;'
          +'Data Source=%s';

ADOConnection.ConnectionString := Format(adoStr,[TheIPOrNameOfThePC]);
...
于 2012-11-20T22:22:39.363 に答える