zoukankan      html  css  js  c++  java
  • TDBXJSONStream(BERLIN新增)的使用

    DELPHI 10.1 BERLIN新增TDBXJSONStream类,用于方便地将数据序列为JSON,和将JSON还原出来数据。

    DATASNAP远程方法也相应地增加了支持返回TDBXJSONStream。必须引用 Data.DBXCommon单元。

    url rest方式呼叫远程方法,直接返回JSON数据。

    易博龙关于它有这么一段注释:

    A TDBXJSONStream type may be used as a parameter or return value in server methods.
    Use this type to pass a JSON stream between DataSnap servers and clients.
    A TDBXJSONStream is either writable or readable, but not both.
    IN parameters are used to pass a readable TDBXJSONStream to a server method.
    OUT parameters and return values are used to pass a TDBXJSONStream that the server method has written.

    下面的代码仅供语法演示,无任何实际意义。

    服务端代码:

    function TServerMethods1.QuerySql4(const accountNo, sql: string): TDBXJSONStream;

    var
    d: TfrmDB;

    procedure WritePair(const sProperty, sFieldName, sFieldValue: string);
    begin
    Result.Writer.WritePropertyName(sProperty);
    Result.Writer.WriteValue(sFieldValue);
    end;

    begin
    Result := nil;
    if (accountNo = '') or (sql = '') then
    Exit;
    d := GetDBPool(accountNo).Lock;
    if not Assigned(d) then
    Exit;
    try
    d.qryOpen.Close;
    d.qryOpen.sql.Clear;
    d.qryOpen.sql.Text := sql;
    d.qryOpen.Open;
    Result := TDBXJSONStream.Create;
    Result.Writer.WriteStartArray;
    try
    while not d.qryOpen.Eof do
    begin
    try
    Result.Writer.WriteStartObject;
    // WritePair();

    finally
    Result.Writer.WriteEndObject;
    d.qryOpen.Next;
    end;
    end;
    finally
    Result.Writer.WriteEndArray;
    Result.Writer.Close;
    end;
    finally
    d.qryOpen.Close;
    GetDBPool(accountNo).Unlock(d);
    end;
    end;

    客户端代码:

    procedure TForm5.Button1Click(Sender: TObject);
    var
    aServer : TServerMethods1Client;
    js : TDBXJSONStream;
    begin
    aServer := TServerMethods1Client.Create(Self.SQLConnection1.DBXConnection);
    try
    js := aServer.QueryHotel(Edit1.Text);
    js.Reader.Rewind;
    while (js.Reader.Read) do
    begin
    case js.Reader.TokenType of
    TJsonToken.StartArray:
    begin
    while (js.Reader.Read) do
    begin
    case js.Reader.TokenType of
    TJsonToken.PropertyName:
    begin
    ListView1.Items.Add.Text := js.Reader.Value.ToString + ': ' + js.Reader.ReadAsString;
    end;
    end;
    end;
    end;
    end;
    end;
    finally
    aServer.Free;
    end;
    end;

  • 相关阅读:
    关于属性值
    REG小探
    纯CSS实现立方体旋转
    css3总结(三)立方体、动画、web字体、字体图标、弹性布局、多列布局、伸缩盒子
    css3总结(二)背景色渐变、background、边框图片、过渡、2d变换、3d变换
    css3总结(一)属性选择器、伪类、伪元素、盒模型、边框圆角、文本阴影、边框阴影
    自定义视频播放器(功能包括:播放/暂停,全屏,跳播)
    html5总结
    Git workflow- Git 工作流
    nodejs使用redis实现sub/pub
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5680115.html
Copyright © 2011-2022 走看看