在 C++ Builder 10.1 Berlin 中使用 DataSnap 技术访问远程数据库

2023-12-05

如何在 C++ Builder 10.1 Berlin 中使用 DataSnap 技术查询并获取远程数据库结果?

我想构建一个简单的解决方案,有两个 VCL 表单应用程序,例如客户端(1)和服务器(2),在两台不同的 Windows 操作系统计算机上运行,​​连接在同一本地网络上。

但我无法完成这个简单的任务,这就是我试图做的:

在服务器应用程序 (2) 上,我使用:

TSQLConnection *SQLConnection1;
TSQLQuery *SQLQuery1;

我将加载 SQLite 数据库版本 3:

 if (SQLConnection1->Params->IndexOf("Database") == -1)
     {
        SQLConnection1->Params->Add("Database="+Form->DataBaseFile );
     }
     else
     {
        SQLConnection1->Params->Values["Database"] = Form->DataBaseFile;
     }

     try
     {
        SQLConnection1->Connected = true;
     }
     catch (EDatabaseError& E)
     {
       ShowMessage("Exception raised with message" + E.Message);
     }

并执行sql查询:

 try
 {
   SQLQuery1->SQL->Text = "query from client app(1)";
   SQLQuery1->Active = false;
   SQLQuery1->ExecSQL();


 }
 catch (Exception& E)
 {
    ShowMessage( "SQLite exception raised with message:\n\n" + E.Message);
    SQLConnection1->Connected = false;
 }

我需要将 SQLQuery1 结果返回给客户端应用程序(1)

在客户端应用程序上,我认为我应该执行如下操作,但我不确定,我不知道如何正确执行此操作:

TSQLServerMethod *SQLServerMethod1;

SQLServerMethod->SQLConnection = SQLConnection1;

   try{
     SQLServerMethod.ServerMethodName = "TDSUtilityMethods.echoOutStr";
     SQLServerMethod->Params[0]->AsString = "123";
     SQLServerMethod->ExecuteMethod();
     memoOutput->Text = SQLServerMethod->Params[1]->AsString;
  }
   finally{
     SQLServerMethod->Close();
   }

因此,目的是创建一个服务器应用程序 (2),它托管并执行来自客户端应用程序 (1) 的 sql 查询,客户端应用程序 (1) 发送 sql 查询并等待结果。发送 sql 查询的应用程序(1)是 chromium 客户端的包装器。我尝试在服务器应用程序(2)上使用 TIdHTTPServer 和来自 chromium 客户端应用程序(1)的 WebSockets 来实现所有这些解决方案,并发布了一个相关问题here但是实现WebSocket协议(编码/解码数据包)对于业余开发人员来说有点困难。然后我发现一个更简单的解决方案是使用 DataSnap 技术。我读过关于开发 DataSnap 应用程序,但仍然无法构建这个简单的解决方案,在 embarcadero 网站上描述了每个组件,但因为我是业余开发人员,我发现完成一个简单的任务感到困惑和困难,而使用 DataSnap 技术比 WebSockets 似乎可以更容易地构建这个任务。但现在我发现DataSnap技术很难实现,因为有很多新东西,没有例子就让人困惑。

如果您知道如何在 C++ Builder 10.1 Berlin 中执行此操作,请在此处显示一个简短的示例。


None

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

在 C++ Builder 10.1 Berlin 中使用 DataSnap 技术访问远程数据库 的相关文章

  • Move() 从动态字符串数组中插入/删除项目

    使用 System Move 从字符串数组中插入 删除项目并不像从其他简单数据类型数组中插入 删除项目那么容易 问题是 字符串在 Delphi 中是引用计数的 在引用计数数据类型上使用 Move 需要对内部编译器行为有更深入的了解 这里有人
  • 可以在delphi数据集中创建一个假数据字段吗?

    我想在 DataSet 不是 ClientDataSet 中创建一个 假 数据字段 该字段不应存储在数据库中 它不是计算字段 应允许用户输入输入数据 该字段具有业务逻辑含义 因此用户更新其值后应该更新其他字段 使用 OnFieldChang
  • 线程关闭期间 Win64 Delphi RTL 中的内存泄漏?

    很长一段时间以来 我注意到我的服务器应用程序的 Win64 版本存在内存泄漏问题 虽然 Win32 版本工作正常 内存占用相对稳定 但 64 位版本使用的内存却定期增加 可能 20Mb 天 没有任何明显的原因 不用说 FastMM4 没有报
  • 如何仅在某些列中设置带有复选框的 TListView?

    我正在使用 Delphi 2010 并且我试图允许用户在 TListView 中的每行 2 个选项之间进行选择 使用 TListView 我可以将样式设置为 vsReport 并启用复选框 但这只会让我每行有 1 个复选框 我需要的是每行
  • 启动时系统托盘图标不出现

    我在 FormCreate 事件处理程序中使用以下代码来创建系统托盘图标 当我运行程序时 系统托盘图标显示正常 我将应用程序设置为在 Windows 启动时自动启动 当我重新启动计算机时 我的应用程序进程已启动 但系统托盘图标从未出现 我认
  • TControlState.csDesignerHide 与 TControlStyle.csNoDesignVisible

    VCL 似乎提供了两种向表单设计者隐藏控件的机制 TControlState csDesignerHide and TControlStyle csNoDesignVisible 就 IDE 而言 它们之间有什么区别 什么时候应该使用哪个
  • 如何正确实现TBitmap的扫描线访问?

    我正在尝试根据以下方式访问位图的扫描线关于内河码头的文章 http edn embarcadero com article 29173 使用像这样的扫描线 for y 0 to n do begin line bitmap scanline
  • Indy FTP 传输类型

    我正在使用 IdFTP Indy 10 组件从远程位置下载一些文件 zip 和 txt 在获取每个文件之前 我将 TransferType 设置为二进制 IdFTP TransferType ftBinary IdFTP Get ASour
  • 在 Outlook 中创建带有附件的邮件并显示它

    我想在 Outlook 中创建一封带有附件的邮件并在发送之前显示它 但我想我已经尝试了几乎在网上找到的所有示例 但没有任何运气 我可以使用 Indy 但我非常想使用 Outlook 来确保邮件正确 因为它是用于商业用途 函数的任何输入 该函
  • 能否从 Vista Shell 获取 48x48 或 64x64 图标?

    如果 Vista Shell 中存在 48x48 或 64x64 图标 如何使用 SHGetFileInfo 获取在 TImage 中显示图标的句柄 我想从图像列表中选择一个代表文件夹路径的图标 并在 Timage 中显示 48x48 或
  • 如何允许表单接受文件删除而不处理 Windows 消息?

    在 Delphi XE 中 我可以允许我的表单接受文件 拖放 但不必处理裸窗口消息吗 您不需要处理消息来实现这一点 你只需要实施IDropTarget并打电话RegisterDragDrop RevokeDragDrop 这真的非常非常简单
  • 使用 StretchDIBits 使用 Delphi 6 处理条形码图像 - 输出中缺少条形线

    我的应用程序是在 Delphi 6 中开发的 由于后台处理和大量数据 它消耗大约 60MB 120MB 物理内存 这是一个资源密集型应用程序 该应用程序的功能之一是在进行某些处理后创建条形码图像 如果用户继续生成条形码 那么至少十分之一的条
  • 获取字符、整数和日期字段的字段 oldValue 和 newValue

    我试图只保留表更改的历史记录 所以我想获取一个字段在更改为oldValue之前的值 然后获取它更改为newValue的值 两个值都应转换为字符串 因此 这是该表的一个示例 PartNumber Description 12345 Test
  • 如何将FireMonkey表单无缝嵌入VCL表单中?

    我使用了中描述的技巧这个问题 https stackoverflow com questions 7315050 delphi xe2 possible to instantiate a firemonkey form in vcl app
  • 将记录转换为序列化表单数据以通过 HTTP 发送

    有没有办法转换此记录 TError record code Word message String end TState record caption String address Cardinal counters TArray
  • Delphi如何使用其他窗体中的类型?

    抱歉 这是一个非常新手的问题 我正在对这个庞大的应用程序进行维护 它有5种不同的形式 我们将全局变量放在一个单元 uGlobal 中 但我似乎无法从数据单元 uData 访问它 我有这个 Unit uGlobal type TmyType
  • 在 SQLite 数据库中存储日期时间值的最佳方式(Delphi)

    我将把日期时间值存储在 SQLite 数据库中 使用 Delphi 和 DISqlite 库 数据库的本质是它永远不需要在计算机或系统之间传输 因此互操作性不是一个限制 相反 我的重点是阅读速度 日期时间字段将被索引 我将对其进行大量搜索
  • 如何追踪手柄泄漏?

    在我的一个应用程序中 我观察到句柄数量不断增加 在不使用应用程序的情况下 该数字大约每秒增加一次 因此后台处理代码的某些部分一定存在句柄泄漏 我如何追踪此类泄漏 有什么工具可以帮助解决这个问题吗 跟踪句柄泄漏时要寻找哪些模式 导致手柄泄漏的
  • 查找Delphi项目中的所有编译错误

    我正在对我的 Delphi 项目进行一些重构 我希望能够做出改变 然后看看all项目中因该更改而中断的地方 类似于 Eclipse 列出项目的所有编译错误 在 Java 中 在 Delphi 中 我可以进行更改 然后重新编译我的项目 但编译
  • Delphi:写入后代类中私有祖先的字段

    我需要修复第三方组件 该组件的类具有私有变量 该变量由其后代主动使用 TThirdPartyComponentBase class private FSomeVar Integer public end TThirdPartyCompone

随机推荐