如何在 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 中执行此操作,请在此处显示一个简短的示例。