找出它是否是本地机器

时间:2011-01-07 11:36:48

标签: windows delphi delphi-7 firebird

我的app中有一个实现,只有当我的可执行文件与数据库在同一台机器上时才能运行。

我的连接字符串包含服务器地址。如果本地机器可能是127.0.0.1,localhost或其他东西(例如别名)。

有没有办法断言测试连接字符串中的服务器是否恰好是本地计算机?

3 个答案:

答案 0 :(得分:3)

强制local transport protocol(请参阅connection string FAQ)将强制建立本地连接。

请注意,使用FireBird 2.0时,local transport protocol的基础实现已更改为XNET 你不应该注意到任何差异。

注意:请勿尝试将TCP/IPlocal transport protocol混合用于InterBase 6.0及更低版本,因为错误可能导致数据损坏。
将这两者与Firebird混合应该没问题。

- 的Jeroen

答案 1 :(得分:0)

只需在连接中将数据库的IP地址设置为127.0.0.1。如果失败,那不是本地机器。

注意:如果您在托管该数据库+未正确配置数据库的计算机上执行代码,这也可能会失败...

答案 2 :(得分:0)

对于完全不同的方法:

在数据库中创建两个存储过程。

  • 返回运行数据库的计算机本地文本文件的(可配置的)完整文件路径。
  • 将一些文本传递给此文件的人。

在你的应用中:

  • 调用返回文件名的存储过程
  • 在运行可执行文件的计算机上删除该文件
  • 调用写入文件的存储过程并为其提供一些唯一的文本(每次调用存储过程时最好是唯一的)
  • 检查您是否可以从本地位置读取该文件,并且该文件包含您提供给存储过程的文本

请注意驱动器映射(以便检查返回的文件名中的驱动器是否是本地驱动器而不是映射驱动器)和unc文件名(检查机器名称是否与本地计算机相同)。 / p>