You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi7+BDE连接SQL Server2019成功后tQuery无法获取结果求助

问题排查与解决方法

1. 替换系统视图,适配SQL Server 2019

master.dbo.sysdatabases是SQL Server的旧兼容视图,在新版本中可能存在访问限制或解析问题。建议使用官方推荐的sys.databases系统视图,修改SQL语句如下:

SELECT NAME as DBxxx 
FROM sys.databases  
ORDER BY Name DESC

该视图无需指定master.dbo前缀,在任意数据库上下文均可访问。

2. 验证查询上下文与权限

  • 确认当前连接的数据库上下文:执行SELECT DB_NAME(),确保返回master,保证查询环境正确。
  • 检查SA用户权限:执行SELECT IS_SRVROLEMEMBER('sysadmin'),返回1表示拥有系统管理员权限(默认SA具备该权限,若返回0需重新赋予权限)。

3. 排查BDE驱动的SQL语法兼容问题

BDE的SQL Server驱动对多行SQL或特殊格式可能存在解析异常,可尝试将SQL改为单行格式:

SELECT NAME as DBxxx FROM sys.databases ORDER BY Name DESC

避免换行引入的多余空格或特殊字符干扰驱动解析。

4. 优化ODBC DSN配置

确认ODBC DSN使用的是适配SQL Server 2019的驱动(如SQL Server Native Client 11.0或更高版本),而非老旧的"SQL Server"驱动。在ODBC数据源管理器中重新配置DSN,选择对应新版本驱动。

5. 捕获具体错误信息定位问题

在代码中添加异常捕获,获取精准错误提示,便于针对性排查:

cbDBname.Items.Clear;

Q := TQuery.Create(nil);
try
  Q.DataBaseName := 'MASTER';
  Q.SQL.Text := ' SELECT NAME as DBxxx FROM sys.databases ORDER BY Name DESC ';
  try
    Q.Open;
    while not Q.Eof do
    begin
       cbDBname.Items.Add(Q.FieldByName('DBxxx').AsString);
       Q.Next;
    end;
  except
    on E: Exception do
    begin
      ShowMessage('错误详情:' + E.Message);
      raise;
    end;
  end;
finally
  Q.Free;
end;

内容的提问来源于stack exchange,提问作者Jasen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:32:42