• <menu id="w2i4a"></menu>
  • logo FastReport VCL中文教程(持續(xù)更新中)

    文檔首頁>>FastReport VCL中文教程(持續(xù)更新中)>>報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告


    報表生成器FastReport VCL是用于在您的軟件中集成商務(wù)智能的現(xiàn)代解決方案。它提供了可視化模板設(shè)計器,可以訪問最受歡迎的數(shù)據(jù)源,報告引擎,預(yù)覽,將過濾器導(dǎo)出為30多種格式,并可以部署到云,Web,電子郵件和打印中。

    近日,F(xiàn)astReport VCL升級到v6.6版,在此版本中,所有面板隱藏在“Data Tree”數(shù)據(jù)樹,添加了新的線性條形碼類型:Pharmacode,改進(jìn)了預(yù)覽窗口中的搜索,感興趣的朋友可點擊下方按鈕下載最新版。

    點擊下載最新版FastReport VCL

    您可以點擊此處,下載本文教程完整的演示Demo。

    根據(jù)文檔要求,為了獲得股票報價,需要使用GET請求“歷史記錄”

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    創(chuàng)建一個應(yīng)用程序并將組件添加到表單中:

     frxReport1: TfrxReport;
     JSON_DS: TfrxUserDataSet;
     ButtonConnectToJSON: TButton;
     Label1: TLabel;
     Label2: TLabel;
     Label3: TLabel;
     ComboBoxName: TComboBox;
     ComboBoxResolution: TComboBox;
     DateTimePickerFrom: TDateTimePicker;
     Label4: TLabel;
     DateTimePickerTo: TDateTimePicker;
     ButtonShowReport: TButton;
     Image1: TImage;
     Label5: TLabel;
     StatusBar1: TStatusBar;
     ButtonDesign: TButton;
     frxDesigner1: TfrxDesigner;
     frxChartObject1: TfrxChartObject;
     frxPDFExport1: TfrxPDFExport;
    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    將項目添加到ComboBoxName和ComboBoxResolution

    ComboBoxName.Items := 'GAZP SBER BRENT MOEX ROSN YNDX RUAL';
    ComboBoxResolution.Items := '1 5 15 30 45 60 120 180 240 D W M';

    添加全局變量

    var
     tHTTP: TfrxTransportHTTP;
     frxJSON: TfrxJSON;
     Res: String;
     Symbol,Resolution,FromCandlesHistory,ToCandlesHistory : String;
     frxJSONArrayT,frxJSONArrayC,frxJSONArrayO,
     frxJSONArrayH,frxJSONArrayL,frxJSONArrayV: TfrxJSONArray;
     S: TStringStream;

    在ButtonConnectToJSON按鈕的Click事件中,編寫以下代碼:

    procedure TFormJSON.ButtonConnectToJSONClick(Sender: TObject);
    begin
     frxReport1.LoadFromFile('ChartJSON.fr3');
     JSON_DS.RangeEnd := reCount;
     Symbol := ComboBoxName.Items[ComboBoxName.ItemIndex];
     Resolution := ComboBoxResolution.Items[ComboBoxResolution.ItemIndex];
     FromCandlesHistory := DateTimeToUnix(DateTimePickerFrom.DateTime).ToString;
     ToCandlesHistory := DateTimeToUnix(DateTimePickerTo.DateTime).ToString;
     
    //Creating a TfrxTransportHTTP Object for a GET Request over HTTPS
     
     tHTTP := TfrxTransportHTTP.Create(nil);
     try
     
    //We form a GET request string and get a response in JSON format
     
     Res := tHTTP.Get('https://api.bcs.ru/udfdatafeed/v1/history?symbol='
     +Symbol+
     '&resolution='+Resolution +
     '&from='+ FromCandlesHistory+
     '&to='+ToCandlesHistory);
     
    // if JSON is received incorrectly, then load it from the file and display a message in StatusBarr
     
     if (Res = '') or (pos('"s":"ok"',Res) = 0) then
     begin
     StatusBar1.SimpleText := 'Error loading JSON';
     S := TStringStream.Create('', TEncoding.UTF8);
     try
     S.LoadFromFile('JSON/'+Symbol+'.json');
     finally
     Res:= S.DataString;
     FreeAndNil(S);
     end;
     StatusBar1.SimpleText := 'Successful JSON loading from file '+Symbol+'.json';
     end
     else
     begin
     StatusBar1.SimpleText := 'Successful JSON('+Symbol+') loading';
     end;
     
    // We load the received JSON from the Res line into the frxJSON object: TfrxJSON
     
     frxJSON := TfrxJSON.Create(Res);
     try
     if frxJSON.IsValid then
     begin
     StatusBar1.SimpleText :=StatusBar1.SimpleText +' /JSON is Valid';
     
    // Read arrays
     
     if frxJSON.IsNameExists('t') then
     frxJSONArrayT := TfrxJSONArray.Create(frxJSON.ObjectByName('t'));
     frxJSONArrayC := TfrxJSONArray.Create(frxJSON.ObjectByName('c'));
     frxJSONArrayO := TfrxJSONArray.Create(frxJSON.ObjectByName('o'));
     frxJSONArrayH := TfrxJSONArray.Create(frxJSON.ObjectByName('h'));
     frxJSONArrayL := TfrxJSONArray.Create(frxJSON.ObjectByName('l'));
     frxJSONArrayV := TfrxJSONArray.Create(frxJSON.ObjectByName('v'));
    // Prepare JSON_DS by clearing and adding fields
     JSON_DS.Fields.Clear;
     JSON_DS.Fields.Add('Ticker');
     JSON_DS.Fields.Add('Date');
     JSON_DS.Fields.Add('Time');
     JSON_DS.Fields.Add('Open');
     JSON_DS.Fields.Add('Close');
     JSON_DS.Fields.Add('High');
     JSON_DS.Fields.Add('Low');
     JSON_DS.Fields.Add('Vol');
     JSON_DS.RangeEndCount := frxJSONArrayT.Count;
     end
     else StatusBar1.SimpleText :=StatusBar1.SimpleText +' /JSON is Invalid';
     finally
     end;
     finally
     end;
    end;

    要通過JSON_DS組件TfrxUserDataSet從數(shù)組frxJSONArrayT,frxJSONArrayC,frxJSONArrayO,frxJSONArrayH,frxJSONArrayL,frxJSONArrayV生成報告時獲取數(shù)據(jù),需要使用OnGetValue事件:

    procedure TFormJSON.JSON_DSGetValue(const VarName: string; var Value: Variant);
    var
     Item: string;
     Time : string;
    begin
     Item := frxJSONArrayT.GetString(JSON_DS.RecNo);
     DateTimeToString(Time, 't', UnixToDateTime(StrToInt64(Item)));
     
     if VarName = 'Ticker' then
     begin
     Value := Symbol;
     exit;
     end
     else if VarName = 'Date' then
     begin
     Value := DateToStr(UnixToDateTime(StrToInt64(Item)))+' '+Time;
     exit;
     end
     else if VarName = 'Time' then
     begin
     Value := Time;
     exit;
     end
     else if VarName = 'Open' then
     Item := frxJSONArrayO.GetString(JSON_DS.RecNo)
     else if VarName = 'Close' then
     Item := frxJSONArrayC.GetString(JSON_DS.RecNo)
     else if VarName = 'High' then
     Item := frxJSONArrayH.GetString(JSON_DS.RecNo)
     else if VarName = 'Low' then
     Item := frxJSONArrayL.GetString(JSON_DS.RecNo)
     else if VarName = 'Vol' then
     Item := frxJSONArrayV.GetString(JSON_DS.RecNo);
     
     Value := Item;
    end;

    接下來,在報表設(shè)計器中創(chuàng)建一個模板,將其命名為ChartJSON.fr3并將JSON_DS連接到它。

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    要顯示圖表,請使用TeeChart Pro VCL軟件包中的Candle系列,并連接到JSON_DS。

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    接下來,為其余按鈕添加Click事件處理程序:

    procedure TFormJSON.ButtonDesignClick(Sender: TObject);
    begin
     if (Res = '') then ButtonConnectToJSON.Click;
     frxReport1.DesignReport();
    end;
    
    procedure TFormJSON.ButtonShowReportClick(Sender: TObject);
    begin
    if (Res = '') then ButtonConnectToJSON.Click;
     frxReport1.ShowReport();
    end;

    我們還為ComboBoxName,DateTimePickerFrom和DateTimePickerTo添加了Change事件處理程序:

    procedure TFormJSON.ComboBoxNameChange(Sender: TObject);
    begin
     ButtonConnectToJSON.Click;
    end;
     
    procedure TFormJSON.DateTimePickerFromChange(Sender: TObject);
    begin
     ButtonConnectToJSON.Click;
    end;
     
    procedure TFormJSON.DateTimePickerToChange(Sender: TObject);
    begin
     ButtonConnectToJSON.Click;
    end;

    同樣,在關(guān)閉應(yīng)用程序時,請不要忘記釋放已使用對象的內(nèi)存。

    procedure TFormJSON.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     tHTTP.Free;
     frxJSON.Free;
     frxJSONArrayT.Free;
     frxJSONArrayC.Free;
     frxJSONArrayO.Free;
     frxJSONArrayH.Free;
     frxJSONArrayL.Free;
     frxJSONArrayV.Free;
    end;

    接下來,運行應(yīng)用程序。

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    在此應(yīng)用中,您可以選擇所需的股票。

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    還可以使用日歷選擇所需的日期范圍。

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    當(dāng)單擊“連接到JSON”,“顯示報告”或“ D”按鈕時,以及更改共享的日期或名稱時,都會發(fā)生與JSON的連接,并顯示有關(guān)連接狀態(tài)的消息。

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    當(dāng)單擊“顯示報告”按鈕時,將生成一個報告并顯示其預(yù)覽。

    報表生成器FastReport VCL使用實例:將JSON格式的股票報價生成了一份報告

    恭喜,您使用GET請求收到了JSON格式的股票報價,并將JSON連接到FastReport VCL 6并生成了一個報告。


    Fastreport在線購買價更低!趕緊加入購物清單吧!


    還想要更多嗎?您可以點擊閱讀【FastReport 報表2019最新資源盤點】查找需要的教程資源。如果您有任何疑問或需求,請隨時加入FastReport技術(shù)交流群(783996712),我們很高興為您提供查詢和咨詢

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();