在 Delphi 中使用 ADOConnection 查看“打印”语句的输出

2023-11-22

我的一些 MS SQL 存储过程使用“print”命令生成消息。在我的 Delphi 2007 应用程序中,使用 TADOConnection 连接到 MS SQL,如何查看这些“打印”命令的输出?

关键要求: 1)我不能多次运行查询;它可能正在更新一些东西。 2)即使返回数据集,我也需要查看“打印”结果。


那是一个有趣的...
The OnInfoMessageADOConnection 中的事件有效,但问题在于细节!

要点:

  • use CursorLocation = clUseServer而不是默认的clUseClient.
  • use Open并不是ExecProc与您的 ADOSstoredProc 一起。
  • use NextRecordset从当前的一项获取以下内容,但请务必检查您是否已打开一项。
  • use SET NOCOUNT = ON在您的存储过程中。

SQL端:你的存储过程

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[FG_TEST]') AND type in (N'P', N'PC'))
  DROP PROCEDURE [dbo].[FG_TEST]
GO
-- =============================================
-- Author:      François
-- Description: test multi ADO with info
-- =============================================
CREATE PROCEDURE FG_TEST
AS
BEGIN
    -- SET NOCOUNT ON absolutely NEEDED
    SET NOCOUNT ON;

    PRINT '*** start ***'

    SELECT 'one' as Set1Field1

    PRINT '*** done once ***'

    SELECT 'two' as Set2Field2

    PRINT '*** done again ***'

    SELECT 'three' as Set3Field3

    PRINT '***finish ***'
END
GO

德尔福方面:
创建一个新的 VCL 表单应用程序。
在表单中添加备忘录和按钮。
复制以下文字,修改Catalog and Data Source并将其粘贴到您的表格上。

object ADOConnection1: TADOConnection
  ConnectionString = 
    'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' +
    'fo=False;Initial Catalog=xxxYOURxxxDBxxx;Data Source=xxxYOURxxxSERVERxxx'
  CursorLocation = clUseServer
  LoginPrompt = False
  Provider = 'SQLOLEDB.1'
  OnInfoMessage = ADOConnection1InfoMessage
  Left = 24
  Top = 216
end
object ADOStoredProc1: TADOStoredProc
  Connection = ADOConnection1
  CursorLocation = clUseServer
  ProcedureName = 'FG_TEST;1'
  Parameters = <>
  Left = 24
  Top = 264
end

In the OnInfoMessageADOConnection 的放置:

Memo1.Lines.Add(Error.Description);

For the ButtonClick,粘贴此代码:

procedure TForm1.Button1Click(Sender: TObject);
const
  adStateOpen = $00000001; // or defined in ADOInt
var
  I: Integer;
  ARecordSet: _Recordset;
begin
  Memo1.Lines.Add('==========================');

  ADOStoredProc1.Open; // not ExecProc !!!!!

  ARecordSet := ADOStoredProc1.Recordset;
  while Assigned(ARecordSet) do
  begin
    // do whatever with current RecordSet
    while not ADOStoredProc1.Eof do
    begin
      Memo1.Lines.Add(ADOStoredProc1.Fields[0].FieldName + ': ' + ADOStoredProc1.Fields[0].Value);
      ADOStoredProc1.Next;
    end;
    // switch to subsequent RecordSet if any
    ARecordSet := ADOStoredProc1.NextRecordset(I);
    if Assigned(ARecordSet) and ((ARecordSet.State and adStateOpen) <> 0) then
      ADOStoredProc1.Recordset := ARecordSet
    else
      Break;
  end;

  ADOStoredProc1.Close;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Delphi 中使用 ADOConnection 查看“打印”语句的输出 的相关文章

  • SQL Server:如果存在会大大减慢查询速度

    正在使用SQL Server 2012 我找到了一些关于查询优化的主题 并将 EXISTS 与 COUNT 进行比较 但我找不到这个确切的问题 我有一个看起来像这样的查询 select from tblAccount as acc join
  • 如果加载 dll 找不到依赖项,有什么方法可以捕获错误吗?

    我正在编写一个 Windows 32 位程序 可以使用多个可能的 dll 之一 所以它尝试依次加载每个 dll 使用SysUtils SafeLoadLibrary如果加载成功 它就会使用该 dll 不幸的是 其中一些 dll 静态链接到其
  • 为什么 ISNUMERIC('.') 返回 1?

    最近我在 SQL Server 中使用 ISNUMERIC 时遇到了一个问题 导致找到了这段代码 SELECT ISNUMERIC 这会返回 1 如 true 所示 难道不应该像 false 一样返回 0 吗 See Numeric 损坏了
  • 替换字符串中的多个字符,而不使用任何嵌套替换函数

    我的表中存储了一个方程 我一次获取一个方程 并希望将所有运算符替换为任何其他字符 输入字符串 N 100 6858 6858 N 100 0 2 N 35 运算符或模式 替换字符 输出字符串 N 100 6858 6858 N 100 0
  • 如何在按键时识别 unicode 键?

    我的应用程序使用 unicode 字符 并且我有几个文本字段 我想限制用户输入特殊字符 例如 begin if not Key in a z A Z 0 9 13 8 then Key 0 if Key 13 then bOk Click
  • 使用 Delphi 读取 Excel 电子表格

    我需要使用 Delphi 2010 读取和写入 Excel 电子表格 没什么花哨的 只需读取和写入不同工作表上特定单元格和范围的值 需要在没有安装 Excel 的情况下工作并支持 Excel 2007 我看过的一些东西 我尝试过使用ADO
  • 似乎有时 Delphi 是区分大小写的 - “覆盖方法应该与祖先的大小写匹配”

    今天我遇到了一个 奇怪 的提示 覆盖方法 xxxx 应匹配祖先 yyyy 的大小写 解决方案是完全按照祖先中的方式声明方法名称 我相信这是自 Delphi Net 编译器以来编译器中保留的东西 与祖先中完全相同的方法声明方法使编译器 沉默
  • TFrame继承重构

    我提出的另一个 TFrame IDE 注册组件问题 感谢各位程序员的帮助 尝试 Darrian 的 TFrame 继承建议here https stackoverflow com questions 382562 delphi visual
  • 如何将枚举类型放入字符串列表中?

    这行代码 ShowMessage GetEnumName TypeInfo TAlign 1 返回 alTop 当我想使用字符串变量 TAlign 而不是TAlign时 如何将枚举类型的所有值放入字符串列表中 就像是 ShowMessage
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • 从完整路径解析文件名和路径

    我需要使用 SQL 查询从完整路径解析文件名和文件路径 例如 完整路径 SERVER D EXPORTFILES EXPORT001 csv FileName Path EXPORT001 csv SERVER D EXPORTFILES
  • 有用的 Delphi 代码模板

    我用 Delphi 编程已经两年多了 我大概只有 5 个自定义模板 我觉得我应该有更多 如果有人有任何特别有用的东西 那么在 stackoverflow 上有一个很好的存储库就太好了 我不在乎您使用的是 Delphi 2009 语法还是 D
  • SQL Server 中全文搜索的奇怪行为

    我的 MyTable 带有列消息 NVARCHAR MAX ID 为 1 的记录包含消息 0123456789333444 Test 当我运行以下查询时 DECLARE Keyword NVARCHAR 100 SET Keyword 01
  • 当两个表非常相似时,什么时候应该将它们合并?

    我有事件和照片 然后对两者进行评论 现在 我有两个评论表 一个用于与事件相关的评论 另一个用于照片评论 架构与此类似 CREATE TABLE EventComments CommentId int EventId int Comment
  • Java 和 SQL Server 中的精度噩梦

    我一直在与 Java 和 SQL Server 中的精确噩梦作斗争 直到我不再知道了 就我个人而言 我理解这个问题及其根本原因 但向地球另一端的客户解释这一点是不可行的 至少对我来说 情况是这样的 我在 SQL Server 中有两列 Qt
  • 从头开始构建 OLAP 解决方案时应该注意什么?

    我在一家运行基于 MS SQL 数据库服务器的软件产品的公司工作 多年来我已经用 PHP 开发了 20 30 个相当高级的报告 直接从数据库获取数据 这非常成功 人们对此感到高兴 但它有一些缺点 对于新的变化 它可能是相当开发密集型的 用户
  • Razor C# - 从数据库获取数据

    我正在使用 WebMatrix 我创建了一个数据库并放置了一个包含几行数据的表 我可以连接到它并获取数据WebGrid 但它只提供了一种使用表格输出数据的方法 这是我的 shows cshtml 代码 var db Database Ope
  • 如何安全地使用保留的 SQL 名称?

    我正在使用 Cakephp 3 使用 sqlserver 作为数据源服务器 我确信我的数据库连接没有问题 因为 home ctp 提示我已连接到我的数据库 并且我还使用迁移插件来创建我的表 似乎使用它没有问题这些工具 但是在我烘焙 MVC
  • SSRS ReportViewer 与 XML 嵌入数据源相关的问题

    我有 C WPF 应用程序 我想在 ReportViewer 控件中显示 SSRS 报告 本地报告文件中嵌入了 XML 数据源 从 SQL Server Business Intelligence Development Studio 运行
  • 如何重置 SQL Server 中表的 IDENTITY 列? [复制]

    这个问题在这里已经有答案了 我怎样才能重置我的IDENTITY我已经填充的表中的列 我尝试过类似的方法 但它不起作用 WITH TBL AS SELECT ROW NUMBER OVER ORDER BY profile id AS RN

随机推荐

  • 我可以在canvas元素中绘制表格吗?

    有没有什么方法 插件 工作解决方案等 来绘制HTML table into a
  • 使用 Objective-C 对字符串进行 URLEncoding

    我正在尝试对字符串进行 URL 编码以形成来自 Objective C 的 GET 请求 NSString params Decoded data foo bar baz NSRunAlertPanel Error params urlEn
  • 什么是应用程序加载器中的托管内容包?

    我想为我的应用程序启用应用程序内购买 购买类型是非消耗品我用 Apple 标记了主机内容 当我想通过 Apple 托管内容时 我需要提供托管内容包 我无法找到此内容包中应包含哪些内容的更多信息 但它不能大于 2GB 并且扩展名应该是 pkg
  • Java中字符串到二进制输出

    我想从字符串中获取二进制 011001 但我得到了 B addbf1 必须有一个简单的转换来做到这一点 但我没有看到它 public static String toBin String info byte infoBin null try
  • 可以在同一台机器上安装两个不同版本的Android Studio吗?

    我只有一台机器 Mac OS 10 9 5 我目前拥有 Android Studio 的金丝雀版本 但遇到了一些错误 所以我也想安装稳定版的Android Studio 有人这样做过吗 在同一台机器上安装多个版本是否有问题 是的 但您必须更
  • 如何为 binned_statistic 制作用户定义的函数

    我正在使用 scipy stats 包沿轴进行统计 但我在使用百分位统计时遇到问题binned statistic 我概括了下面的代码 我尝试在一系列 x bin 中获取具有 x y 值的数据集的第 10 个百分位数 但它失败了 我当然可以
  • Java 7 Update 25 的 rmi 线程中的 AppContext 为 null

    我们最近从 Update 21 更新到 Java 7 Update 25 并且现在在从 rmi 线程调用 SwingUtilities isEventDispatchThread 时遇到空指针异常 因为 AppContext getAppC
  • 7 段显示 OCR

    我正在使用 Tesseract 一个 OCR 库 构建一个 iOS 应用程序 拍照并在其上运行 OCR 并且它可以很好地处理书写良好的数字和字符 使用常用字体 我遇到的问题是 如果我在 7 段显示器上尝试 它会给出非常非常糟糕的结果 所以我
  • zend 文本元素中的占位符文本

    我正在开发一个 Zend 表单应用程序 其中我的表单包含带有水印的文本框 我们可以通过以下代码在 HTML 中实现这一点
  • 如何在wpf文本块中显示一行文本

    我是 wpf 的新手 我想在 wpf 文本块中的一行中显示文本 例如
  • .net 的替代 Oracle 驱动程序

    我必须用 C 开发一个工具来从 Oracle DB 检索一些数据 由于我们的 IT 支持人员在安装 Oracle 客户端时遇到了一些问题 因此我希望能够在不安装客户端的情况下连接到数据库 这个想法是只安装 也许注册 一个额外的库与应用程序一
  • 如何在 TypeORM 中查询数组

    我想创建用户权限管理 我将 TypeORM 与 PostgreSQL 结合使用 这是用户实体内权限的列定义 Column type text array true permissions UserPermission 这是UserPermi
  • 从 Bash 中的文件中读取行并将单词解析为 mailx 参数的变量

    我有一个 bash 脚本 它从 4 列 无标题 的文本文件中读取行 行数最多可以为 4 行或更少 每行中的单词由空格字符分隔 email protected email protected email protected Sub1 Mail
  • PyCharm IPython 控制台中的嵌入式图表

    有没有办法允许在 PyCharm 中激活的 IPython 控制台中嵌入 Matplotlib 图表 我正在寻找与 IPython 的 QT 控制台版本可以完成的类似行为 即ipython qtconsole matplotlib inli
  • 将自定义 HTML Helper 添加到 MVC 项目

    我一直在浏览网页 试图找到一个很好的示例 教程 详细说明如何为我的 MVC 3 Razor 应用程序创建和使用我自己的自定义 HTML 帮助程序 我发现了这个示例 教程 如下所示 在 ASP NET MVC 3 中添加您自己的 HtmlHe
  • 哪些 SDK 可用于创建 iPad/iPhone 离线地图应用程序?

    我们正在使用 Cloudmade SDK 开发适用于 iPad 的离线城市地图应用程序 我很好奇 是否还有其他可用于离线应用程序的 SDK 对我来说更好的解决方案是 1 生成您自己的地图TileMill从 Mapbox 导出 然后导出为 M
  • 在 Angular 6 项目中使用 jquery 库好吗?

    我正在创建一个 Angular 6 项目 该项目之前使用 jquery 开发 现在我陷入困境 好像在 Angular 6 中使用 jquery 很好 或者我应该删除所有 jquery 代码并将其替换为 Angular 不 这不是一个好主意
  • 初始化器列表返回的生命周期扩展

    所以我有一个 lambda 其返回类型是auto我在阵列支持方面遇到问题initializer list在这里被摧毁 const auto foo const auto a const auto b const auto c return
  • Django:i18n - 更改语言

    我安装了 model translation rosetta locale url 但改变语言不起作用 我的设置 py LANGUAGE CODE ru MODELTRANSLATION TRANSLATION REGISTRY proje
  • 在 Delphi 中使用 ADOConnection 查看“打印”语句的输出

    我的一些 MS SQL 存储过程使用 print 命令生成消息 在我的 Delphi 2007 应用程序中 使用 TADOConnection 连接到 MS SQL 如何查看这些 打印 命令的输出 关键要求 1 我不能多次运行查询 它可能正