在 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 技术访问远程数据库 的相关文章

  • 为什么变量被声明为 TStrings 并被创建为 TStringList?

    为什么变量声明为TStrings并创建为TStringList 例如 varsl被声明为TStrings但创建为TStringList var sl TStrings begin sl TStringList Create add stri
  • 如何在以管理员身份运行模式下部署应用程序?

    如何部署应用程序 使其需要管理员权限 而无需最终用户手动执行此操作 我使用 Delphi 2009 来构建该应用程序 您可以使用以下命令通知 Windows 您的应用程序需要以管理员身份运行requestedExecutionLevel应用
  • 在 Delphi 中,我的 DLL 中是否必须分配函数的返回 pchar

    我有一个 DLL 其中有一个返回 pchar 的函数 以避免必须使用 borlndmm 我最初所做的是将字符串转换为 pchar 并返回 Result pChar SomeFuncThatReturnsString 但 90 的情况下我都能
  • 在 Delphi 中强制非阻塞临时提示窗口

    我一直在寻找 但找不到解决方案 所以我想也许我应该简单地发布它 这是我想要在 Delphi 2009 中做的事情 在我的应用程序中的某个时刻 我想向用户显示一条消息 这应该是正常的提示窗口 在正常应用程序定义的提示暂停后自动消失 并带有自定
  • 在 Inno Setup 中使用 StringToColor

    我想为表单上的标签 TNewStaticText 属性颜色 TColor 读写 分配一些颜色 我将颜色存储为 RRGGBB 字符串 我想使用 Delphi 函数 StringToColor 将其转换为 TColor 但如果我在脚本中使用此函
  • vcl组合框并不总是显示它有焦点

    当我从另一个控件切换到组合框时 它会显示文本周围带有虚线的框 但是当我以编程方式将控件设置为活动状态时 它不会显示相同的焦点指示器 这种行为有解决方法吗 我有德尔福XE6 MCVE unit Unit27 interface uses Wi
  • 使用 C++ 程序中的 dll。 (borland c++ builder 和一般情况)

    我试图在我的程序中使用一个 dll 即 libcurl 但是它没有链接 Libcurl 附带了我可以包含的 h 文件 负责 dllimport 但我想我必须指定在以某种方式链接时实际使用哪个 dll 我该怎么做 我正在使用 Borland
  • 如何从具有管理员权限的应用程序接收键盘输入到非管理员应用程序?

    我编写了一个应用程序 该应用程序具有覆盖类型的窗口 可以通过热键显示和隐藏该窗口 而另一个应用程序具有焦点 所述另一个应用程序是一个以管理员权限运行的 DirectX 游戏 我已经尝试了 3 种可能的解决方案 以便在其他应用程序中按下我的热
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • VCL.位图到 FMX.位图

    我在网上找到了这段代码 但 FMX Bitmap 没有扫描线 是否可以以某种方式将 VCL TBitmap 复制或绘制到 FMX Bitmap IFDEF MSWINDOWS type TBitmap FMX Types TBitmap T
  • 如何在 Vista 上安装 Delphi 7

    我多次尝试在 Vista 上安装 Delphi 7 但 Vista 告诉我此应用程序 Delphi 7 存在已知问题 从而阻止了我这样做 我公司的其他几个人在 Vista 上安装 D7 时遇到了问题 由此得出的结论是 我们的 D7 应用程序
  • 如何在滚动框上创建缓慢的滚动效果?

    我喜欢在滚动框中平移图像后创建平滑的减慢滚动效果 就像平移地图一样谷歌地图 http maps google com 我不确定它是什么类型 但行为完全相同 当快速移动地图时 当您释放鼠标时它不会立即停止 而是开始减慢速度 有什么想法 组件
  • 在运行时按需更改组件类

    我的问题与这里的想法类似 替换delphi中的组件类 https stackoverflow com q 4685863 937125 但我需要改变一个specific按需组件类 这是一些伪演示代码 unit Unit1 TForm1 cl
  • Firemonkey 编辑/组合自动完成/打字时自动建议

    实施方式是什么Autocomplete or Autosuggest适用于 Windows Android 平台以及 MacOS 和 iOS 的 Delphi Firemonkey Example 当用户在 Google 搜索框中输入文本时
  • 运行delphi客户端自动化程序后excel.exe保持加载状态的原因是什么?

    我编写了一个 Delphi 程序 该程序从单个 XLS 文件的多个不同电子表格中提取数据并将其合并到文本文件中以供以后处理 这是德尔福7console程序 最相关的代码片段的摘录将向您表明 显然 我的程序表现得相当好 或者至少达到了它需要的
  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume
  • 如何仅使用 TADOQuery 组件将图像插入数据库

    我有一个简单的基本问题 我正在尝试使用将图像插入数据库Insert与其他列值的语句也使用TADOQuery成分 由于代码已经由某人编写 因此我想在此处放置一些虚拟示例代码 以供您澄清相应的步骤 请注意 这可以正常工作TQuery组件 因为我
  • 我如何在Delphi中处理事件?

    例如 我有一个程序 在单击 Button1 后执行某些操作 如果没有 Button1Click 中的代码 如何处理按钮的 onclick 事件 我需要为 Button1 动态添加事件 unit Unit1 interface uses Wi
  • TDictionary 上的 GetItem 由链接器消除

    我正在使用一个TDictionary of
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba

随机推荐