![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Что средствами RAD Studio можно сотворить для выполнения задачи:
Каждые 24 часа сервис должен лезть на сайт ЦБРФ и забирать от туда курс валют, и запихивать его в Таблицу БД. Сервис? Один раз поставил и забыл. Или может быть ещё какие технологии вроде Windows "планировщика задач" есть для решения такой задачи? |
|
#2
|
||||
|
||||
|
Да зачем перегружать систему дополнительными сервисами, как вы и сказали - планировщик для запуска обычного приложения.
|
|
#3
|
||||
|
||||
|
Цитата:
Я почему к сервису больше склоняюсь: бывает такое, что в момент выполнения запланированного запуска программы интернет отсутствует. В итоге обновление курса в БД не происходит. Сделать запланированное действие раз в час, и в реестре хранить какой-нибудь ключ с информацией о том был ли обновлён курс на сегодняшний день или нет. Тогда всё равно остаётся 60мин, в которых люди не смогут нормально работать. В конце концов сервис будет висеть на Серверной машине. Я не думаю, что это будет дикий перегруз ![]() Кстати, код для реализации хранения Курса Валют EUR на основе SOAP: Статья по теме. Код:
procedure TForm1.GetDailyEUR(Sender: TObject);
var
DIS: DailyInfoSoap;
XSDateTime: TXSDateTime;
Res: GetCursOnDateResult;
i: integer;
begin
DIS := GetDailyInfoSoap();
XSDateTime := TXSDateTime.Create;
try
XSDateTime.AsUTCDateTime := Now;
Res := GetCursOnDateResult.Create;
try
with TXMLDocument.Create(Application) do
try
Active := True;
DocumentElement := DIS.GetCursOnDateXML(XSDateTime).XMLNode;
SaveToFile('DIS.xml');
for i := 0 to ChildNodes.FindNode('ValuteData')
.ChildNodes.Count - 1 do
begin
if ChildNodes.FindNode('ValuteData').ChildNodes.Nodes[i]
.ChildNodes.FindNode('VchCode').NodeValue = 'EUR' then
Caption := ChildNodes.FindNode('ValuteData').ChildNodes.Nodes[i]
.ChildNodes.FindNode('Vcurs').NodeValue;
end;
finally
Free;
end;
finally
Res.Free;
end;
finally
XSDateTime.Free;
end;
end;Последний раз редактировалось Uniq!, 12.08.2014 в 10:41. |
|
#4
|
||||
|
||||
|
Забавно, в стандартном планировщике не нашел возможности указать реакцию на ошибку. Если в модных версиях Windows ничего не изменилось, возможность реакции на ошибку -- годный аргумент для написания чего-то своего.
|
|
#5
|
||||
|
||||
|
Еще можно сделать прогу, которая при отсутствии соединения будет уходить в сон на какое-то время (несколько минут) и пробовать снова несколько раз. Тогда эти 60 минут будут уменьшены до времени восстановления инета + несколько минут (в худшем случае).
|
|
#6
|
||||
|
||||
|
Цитата:
при невозможности обновить данные следует повторять попытки. |