Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将Delphi连接到SQL数据库_Sql Server_Delphi_Sql Server 2008r2 Express - Fatal编程技术网

Sql server 将Delphi连接到SQL数据库

Sql server 将Delphi连接到SQL数据库,sql-server,delphi,sql-server-2008r2-express,Sql Server,Delphi,Sql Server 2008r2 Express,我正在使用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是我的电脑的名称,

我正在使用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,但它无法连接,我会得到:

[DBNETLIN][ConnectionOpenConnect.]SQL Server不存在或访问被拒绝


知道问题出在哪里吗?

即使您的实例在本地主机上,它仍然是一个命名实例,您需要在连接字符串中指定:

ADOConnection1.ConnectionString := '... Data Source=localhost\evilkid;';

即使您的实例位于localhost上,它仍然是一个命名实例,您需要在连接字符串中指定:

ADOConnection1.ConnectionString := '... Data Source=localhost\evilkid;';

有几种方法可以解决这个问题。正如Michael所说,使用配置文件。其他可能的方法是使用DSN访问数据库。如果总是localhost/machinename,则可以使用任意数量的方法检索机器名。我在一些较老的项目中使用了TtvAPIThing,而绝地有一个系统信息组件,可以更容易地访问这些项目。

有几种方法可以解决这个问题。正如Michael所说,使用配置文件。其他可能的方法是使用DSN访问数据库。如果总是localhost/machinename,则可以使用任意数量的方法检索机器名。我在一些较旧的项目中使用TtvAPIThing,而JEDI有一个系统信息组件,可以更轻松地访问这些项目。

我会在您电脑的本地应用程序数据路径中创建一个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连接对话框。现在设置服务器、实例、登录凭据,测试连接并保存

完成了

你的应用程序会很好地打开文件,连接会很好,你也很安全

另一种更通用的方法是简单地将服务器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]);
...

我会在您电脑上的本地应用程序数据路径中创建一个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连接对话框。现在设置服务器、实例、登录凭据,测试连接并保存

完成了

你的应用程序会很好地打开文件,连接会很好,你也很安全

另一种更通用的方法是简单地将服务器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]);
...

是的,我试过了,而且很有效,但是如果我不得不在另一台计算机上使用它呢?它没有相同的实例名?@yassine_hell那么你必须配置连接字符串,并从.config文件或其他位置读取它,当你的应用程序移动到其他环境时,你可以修改它。@yassine_hell对不起,我完全不熟悉delphi。。。但是在高层次上,您只需将连接字符串放入一个平面文件,然后将其读入应用程序并将其分配给connectionString属性,而不是使用硬编码字符串……是的,我尝试过了,它可以工作,但是如果我必须在另一台计算机上使用它呢?它没有相同的实例名?@yassine_hell那么你必须配置连接字符串,并从.config文件或其他位置读取它,当你的应用程序移动到其他环境时,你可以修改它。@yassine_hell对不起,我完全不熟悉delphi。。。但在较高级别上,您只需将连接字符串放入平面文件,然后将其读入应用程序并将其分配给connectionString属性,而不是使用硬编码字符串。。。。