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
相关产品推荐
相关产品推荐

