【发布时间】:2015-07-23 23:08:47
【问题描述】:
我正在用 Delphi XE8 编写一个客户端和两个服务器。 一台服务器是带有表单的普通程序,第二台是 Windows 服务。 两者都公开了相同的三个功能:简单的“ping”、文件传输和对 MS SQL 2008 R2 数据库的查询。
当我使用客户端和“程序”服务器时,一切正常,我可以在客户端上编写查询,将查询发送到服务器,并接收数据。
当我使用客户端和“服务”服务器时,某些部分可以工作,但是如果我可以在客户端上编写查询,将查询发送到服务器,服务器会收到查询,但无法访问数据库.
我在 VMWare 虚拟机 Win7 32 位上工作,使用 Delphi XE8 和 TMS Sparkle 作为传输系统,以及 DBExpress 和 DB 访问。 我已经关闭了防病毒和防火墙。 SQL Server 配置良好,协议、端口、浏览器正在运行。 该服务在 LOCAL SYSTEM 下运行(对于所有其他用户,该服务无法启动,我不明白为什么)。
我认为TMS每次收到请求时都会创建一个线程,而我的代码就在这个线程内。 在线程中,我创建了一个表单、一个拥有表单所有者的 TSQLConnection 和一个 TSQLQuery,并尝试打开连接。
在我的日志中,我发现“SQL 错误代码:53”:找不到服务器或...(“或”后没有任何内容)。
我想这可能是权限问题,但我不确定。
一些想法?
【问题讨论】:
-
"在线程内部我创建了一个表单" 在服务内部?顺便说一句,您的服务是否尝试使用 UNC 路径名访问任何资源?
-
尝试在“services.msc”上定义具有管理员权限的用户和密码。此外,由于无法调试服务应用程序,您可以实现一个例程来保存一些关键事件中的文件日志。这有助于您更准确地获取错误内容。
-
@R.PSilveira Delphi 服务应用程序可以使用运行菜单中的
Attach to process项进行调试。 IDE 需要以管理员权限运行。
标签: sql-server multithreading sql-server-2008 delphi tms