Delphi DataSnap。将Variant类型的参数传递到TDBXCommand以调用存储过程

时间:2016-02-23 13:16:07

标签: delphi stored-procedures delphi-xe datasnap

我试图根据示例开发一个简单的应用程序: http://docwiki.embarcadero.com/RADStudio/XE3/en/Creating_the_Server_Side_with_DataSnap_Server_(InterBase_Tutorial)

http://docwiki.embarcadero.com/RADStudio/XE3/en/Creating_a_Rich-Client_Interface_(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。

对于短语"您可以将它们序列化为文本",您能解释一下(如果可能的话,还有代码)如何在我的服务器模块中反序列化此类文本?

0 个答案:

没有答案