Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2016, 18:06   #1
Max1097
 
Регистрация: 01.04.2015
Сообщений: 6
По умолчанию Динамика курса валют - Проблема с выводом дат (Delphi)

Всем привет!

Пишу программу для вывода динамики курса валют Доллара США. Все получилось, но выводит одну и ту же дату рядом со значениями. А нужно чтобы выводил рядом со значениями правильные даты.



Вот код программы:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, XMLDoc, XMLIntf, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    function GetKurs(FileName: string): TDateTime;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TCurrencyData = record
    Date: TDateTime;
    Value: Real;
  end;

var
  Form1: TForm1;
  CBR: array of TCurrencyData;
  Result1, Result2: TDateTime;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  if FileExists('cbr.xml') then
    GetKurs('cbr.xml');
end;

function TForm1.GetKurs(FileName: string): TDateTime;
var
  XMLDocument: TXMLDocument;
  BufXMLNodeList: IXMLNodeList;
  i, k: integer;
begin
  try
    XMLDocument := TXMLDocument.Create(Form1);
    XMLDocument.Active := True;
    XMLDocument.LoadFromFile(FileName);
    if XMLDocument.ChildNodes[1].HasChildNodes then
      BufXMLNodeList := XMLDocument.ChildNodes[1].ChildNodes;
    Result1:= StrToDate(XMLDocument.ChildNodes[1].Attributes['DateRange1']);
    Result2:= StrToDate(XMLDocument.ChildNodes[1].Attributes['DateRange2']);
    for i := 0 to BufXMLNodeList.Count - 1 do
      if BufXMLNodeList[i].HasChildNodes then
        begin
        SetLength(CBR, Length(CBR) + 1);
        for k := 0 to BufXMLNodeList[i].ChildNodes.Count - 1 do
        begin
          if XMLDocument.DocumentElement.HasAttribute('Date')  then
            if XMLDocument.DocumentElement.HasAttribute('Date')  then
              CBR[Length(CBR) - 1].Date := StrToDate(BufXMLNodeList[i].ChildNodes['Record'].Attributes['Date']);
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'Value' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].Value := StrToFloat(BufXMLNodeList[i].ChildNodes[k].NodeValue);
        end;
        Memo1.Lines.Add(DateToStr(CBR[Length(CBR) - 1].Date) + ' - ' + FloatToStr(CBR[Length(CBR) - 1].Value));
      end;
    finally
  XMLDocument.SaveToFile('cbr.xml');
  XMLDocument.Active := False;
  XMLDocument.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetKurs('http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=' + (Edit1.Text) + '&date_req2=' + (Edit2.Text) + '&VAL_NM_RQ=R01235');
end;

end.
Подозреваю, что ошибка где-то здесь:
Код:
if XMLDocument.DocumentElement.HasAttribute('Date')  then
            if XMLDocument.DocumentElement.HasAttribute('Date')  then
              CBR[Length(CBR) - 1].Date := StrToDate(BufXMLNodeList[i].ChildNodes['Record'].Attributes['Date']);
Берет данные вот отсюда: http://www.cbr.ru/scripts/XML_dynami...L_NM_RQ=R01235

Буду очень рад если поможете.
Изображения
Тип файла: jpg delphi.jpg (15.2 Кб, 152 просмотров)
Max1097 вне форума Ответить с цитированием
Старый 04.03.2016, 23:17   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
function TForm1.GetKurs(FileName: string): TDateTime;
var
  XMLDocument: TXMLDocument;
  BufXMLNodeList: IXMLNodeList;
  i: integer;
begin
  Memo1.Lines.clear;
  try
    XMLDocument := TXMLDocument.Create(Form1);
    XMLDocument.Active := True;
    XMLDocument.LoadFromFile(FileName);
    if XMLDocument.ChildNodes[1].HasChildNodes then
      BufXMLNodeList := XMLDocument.ChildNodes[1].ChildNodes;
    Result1 := StrToDate(XMLDocument.ChildNodes[1].Attributes['DateRange1']);
    Result2 := StrToDate(XMLDocument.ChildNodes[1].Attributes['DateRange2']);
    SetLength(CBR, BufXMLNodeList.Count);
    for i := 0 to BufXMLNodeList.Count - 1 do
    begin
      if BufXMLNodeList[i].HasAttribute('Date') then
        CBR[i].Date := StrToDate(BufXMLNodeList[i].Attributes['Date']);
      if BufXMLNodeList[i].HasChildNodes and
        (BufXMLNodeList[i].ChildNodes['Value'].NodeValue <> Null) then
        CBR[i].Value := StrToFloat(BufXMLNodeList[i].ChildNodes['Value']
          .NodeValue);
      Memo1.Lines.Add(DateToStr(CBR[i].Date) + ' - ' +
        FloatToStr(CBR[i].Value));
    end;
  finally
    SetLength(CBR, 0);
    XMLDocument.SaveToFile('cbr.xml');
    XMLDocument.Active := False;
    XMLDocument.Free;
  end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 05.03.2016, 08:09   #3
Max1097
 
Регистрация: 01.04.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
function TForm1.GetKurs(FileName: string): TDateTime;
var
  XMLDocument: TXMLDocument;
  BufXMLNodeList: IXMLNodeList;
  i: integer;
begin
  Memo1.Lines.clear;
  try
    XMLDocument := TXMLDocument.Create(Form1);
    XMLDocument.Active := True;
    XMLDocument.LoadFromFile(FileName);
    if XMLDocument.ChildNodes[1].HasChildNodes then
      BufXMLNodeList := XMLDocument.ChildNodes[1].ChildNodes;
    Result1 := StrToDate(XMLDocument.ChildNodes[1].Attributes['DateRange1']);
    Result2 := StrToDate(XMLDocument.ChildNodes[1].Attributes['DateRange2']);
    SetLength(CBR, BufXMLNodeList.Count);
    for i := 0 to BufXMLNodeList.Count - 1 do
    begin
      if BufXMLNodeList[i].HasAttribute('Date') then
        CBR[i].Date := StrToDate(BufXMLNodeList[i].Attributes['Date']);
      if BufXMLNodeList[i].HasChildNodes and
        (BufXMLNodeList[i].ChildNodes['Value'].NodeValue <> Null) then
        CBR[i].Value := StrToFloat(BufXMLNodeList[i].ChildNodes['Value']
          .NodeValue);
      Memo1.Lines.Add(DateToStr(CBR[i].Date) + ' - ' +
        FloatToStr(CBR[i].Value));
    end;
  finally
    SetLength(CBR, 0);
    XMLDocument.SaveToFile('cbr.xml');
    XMLDocument.Active := False;
    XMLDocument.Free;
  end;
end;
Большое спасибо. Программа теперь выводит даты правильно.

Изображения
Тип файла: jpg delphi.jpg (15.3 Кб, 138 просмотров)
Max1097 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валютный калькулятор с запоминанием курса по датам и выбор курса по дате shaturaweb Общие вопросы C/C++ 0 30.01.2011 22:34
Проблема с выводом Delphi 2009 ultrakiller Win Api 0 03.12.2009 18:43
Delphi динамика tanek Помощь студентам 3 18.10.2009 19:52
Добавление на свой сайт Погоды, Курса валют .... Кристиночка JavaScript, Ajax 3 17.08.2009 10:07