我试图根据示例开发一个简单的应用程序: http://docwiki.embarcadero.com/RADStudio/XE3/en/Creating_the_Server_Side_with_DataSnap_Server_(InterBase_Tutorial)
我试图实现一个通用程序来调用DB存储过程。此过程中的参数将作为Variant数组
传递所以问题是:
如何将Variant参数传递给DataSnap服务器模块的过程?
在这里,例如,不起作用,因为TObject它不是Variant;喜欢" SetVariant"我没找到:
function TdmServerModuleClient.callStoredProcedure(aSPName: String;
aParamNames, aParamValues: Variant): Integer;
begin
if FcallStoredProcedureCommand = nil then
begin
FcallStoredProcedureCommand := FDBXConnection.CreateCommand;
FcallStoredProcedureCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FcallStoredProcedureCommand.Text := 'TdmServerModule.callStoredProcedure';
FcallStoredProcedureCommand.Prepare;
end;
FcallStoredProcedureCommand.Parameters[0].Value.SetString(aSPName);
FcallStoredProcedureCommand.Parameters[1].Value.SetObjectValue(aParamNames);
FcallStoredProcedureCommand.Parameters[2].Value.SetObjectValue(aParamValues);
FcallStoredProcedureCommand.ExecuteUpdate;
Result := FcallStoredProcedureCommand.Parameters[1].Value.GetInt32;
end;
我尝试执行以下操作:将多个值转换为Variant数组。我使用此代码执行此操作:
function ValuesToArray(aValues: array of Variant): Variant;
var
i: Integer;
begin
Result := VarArrayCreate([Low(aValues), High(aValues)], varVariant);
for I := Low(aValues) to High(aValues) do
Result[i] := aValues[i];
end;
之后,我尝试在程序中传递此数组(Variant类型),该程序在我的服务器模块中通过客户端类TdmServerModuleClient传递,如上所述。 之后,我将把变量数组转换为服务器端不同类型的值。但是TDBXCommand不允许我将参数值设置为Variant。
对于短语"您可以将它们序列化为文本",您能解释一下(如果可能的话,还有代码)如何在我的服务器模块中反序列化此类文本?