【问题标题】:TADOQuery Error While Executing The SQL Second Time第二次执行 SQL 时出现 TADOQuery 错误
【发布时间】:2012-05-14 17:49:12
【问题描述】:

我在 Windows XP 和 Windows7 操作系统上的 Delphi 7 中遇到了 TADOQuery 组件的奇怪行为。以下问题在 Windows7 操作系统上运行良好,但在 XP 操作系统上出现错误。

让我解释一下这个场景,我有一个 TADOConnection 组件和两个 TADOQuery 组件。 TADOConnection 组件具有ConnectionString 属性的值,如下所示:

ADOConnection1.ConnectionString := 'Provider = MSDASQL.1; Password = My Password; User ID = My User ID; Data Source = My Data Source';

我已经将角色/授予的权限应用于我登录应用程序的用户 ID/密码。

我已使用Connection 属性将 TADOConnection 组件连接到 TADOQuery 组件。

当我执行第一个 sql 时,它可以正常工作,没有任何错误,但是当我执行第二个 sql 时,我在 Windows XP 操作系统上遇到以下错误。

[Microsoft] [SQL Server Native Client 10.0] [SQL Server] SELECT 对象“我的表名”、数据库“我的”权限被拒绝 数据库名称',架构'dbo'

如果我在 Windows7 操作系统上执行相同的代码,它可以正常工作,没有任何错误。

任何人都可以关注可能缺少的内容或问题所在吗?


我添加了“Persist Security Info = False;”连接字符串如下:

ADOConnection1.ConnectionString := 'Provider = MSDASQL.1; Persist Security Info = False; Password = My Password; User ID = My User ID; Data Source = My Data Source';

现在,每当我使用 TADOQuery 组件执行 sql 时,我每次都需要编写以下语句,即使我在开始时已经设置了 TADOQuery 的“连接”属性,但我仍然需要在每次执行时设置这个属性sql。

ADOQuery1.Connection := ADOConnection1; 

但正如我所说,在 Windows7 上,无需更改 TADOConnection 组件的“ConnectionString”属性,也无需设置任何 TADOQuery 组件的“Connection”属性。

谁能告诉我到底要做什么?

如果您的应用程序太大并且需要在很多地方进行编码更改,有人会同意吗?那么测试工作呢?在所有地方都必须进行测试,对吗?

所以,我仍在寻找合适的解决方案。这个问题仍然没有答案。

如果有人有任何线索或提示或适当的解决方案,将不胜感激。

【问题讨论】:

    标签: delphi tadoquery


    【解决方案1】:
    1. 您必须使用 SQL Profiler 检查发生了什么。
    2. 我敢打赌,ADO 会在内部克隆一个连接或使用一个连接池,然后下一个查询会获取另一个物理连接。所以,你得到了错误。要禁用池,请将 OLE DB Services=-4 添加到您的连接字符串中。

    【讨论】:

    • 您好 da-soft,我非常感谢您的回复,这就是我猜测可能肯定缺少的是“ConnectionString”属性,这似乎是问题所在。我将能够在星期一测试这个解决方案,所以如果我得到解决方案,你将是第一个被告知的人。感谢您并致以最诚挚的问候。维沙尔
    • 您好,da-soft,我尝试使用您建议的连接字符串,但仍然出现相同的错误。还有其他线索吗?最诚挚的问候。维沙尔
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多