如何使用C ++ Builder 10.1 Berlin中的DataSnap技术从远程数据库查询和获取结果?
我想构建一个简单的解决方案,它有两个VCL Forms应用程序,比如client(1)和server(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结果返回给客户端app(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),它从客户端app(1)托管并执行sql查询,它发送sql查询并等待结果。发送sql查询的应用程序(1)是chrome客户端的包装器。我尝试使用服务器应用程序(2)上的TIdHTTPServer和来自铬客户端应用程序(1)的WebSockets实现所有这些解决方案,并发布了一个相关的问题here但是实现WebSocket协议(编码/解码数据包)有点困难业余开发人员。然后我发现一个更简单的解决方案可能是使用DataSnap技术。我已经阅读了Developing DataSnap Applications,但仍然无法构建这个简单的解决方案,在embarcadero网站上描述了每个组件,但是因为我是业余开发人员,我发现它很难完成一个简单的任务,使用DataSnap技术比使用WebSockets更容易构建。但现在我发现很难实现DataSnap技术,因为有很多新的东西在没有示例的情况下令人困惑。
如果您在C ++ Builder 10.1 Berlin中知道如何执行此操作,请在此处显示简短的示例。