我正在使用Microsoft SQL Server R2 Express来创建数据库。
当我尝试使用delphi连接到数据库时,我必须使用此连接字符串:
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=db_formation;Data Source=EVILKID-pc\evilkid;';
其中“EVILKID-PC \ evilkid”是我的电脑名称,
你可能看起来这只适用于我的电脑。我该怎么做才能连接到localhost?我已经尝试将“数据源”更改为“localhost”,但它无法连接,我会得到:
[DBNETLIN][ConnectionOpen(Connect()).]SQL Server does not exist or access denied
知道问题出在哪里?
答案 0 :(得分:4)
即使您的实例在localhost上,它仍然是您需要在连接字符串中指定的命名实例:
ADOConnection1.ConnectionString := '... Data Source=localhost\evilkid;';
答案 1 :(得分:1)
你可以通过各种方式解决这个问题。正如迈克尔所说,使用配置文件。其他可能的方法是使用DSN访问数据库。如果它始终是localhost / machinename,您可以使用任意数量的方法检索计算机名称。我在一些较旧的项目中使用TtvAPIThing,JEDI有一个系统信息组件,可以更轻松地访问它们。
答案 2 :(得分: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会),你很安全。
另一种更通用的方法是简单地将服务器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]);
...