создать новую тему раскрыть все
 
При загрузке курсов происходит следующее:
1) загружаются курсы валют;
2) рассчитываются кросс-курсы валют.
 
Где это сохраняется в БД?
 
В БД есть таблица "CurrencyRates" в ней курсы валют и кросс-курсы вместе хранятся?
Или кросс-курсы сохраняются в другую таблицу?
Какую?
 
Хочется "проредить" курсы за прошлые годы, поэтому и вопросы.
 
План действий примерно следующий:
Выгрузить все курсы в excel (валюты и курсы - две галочки);
Подчистить файл excel-я по датам;
Очистить соответствующую таблицу в БД (получится только полностью);
Импортировать в программу измененный файл excel-я с курсами (тем что от них останется).
 
Подскажите, пожалуйста, как лучше и правильнее вести борьбу с избытком курсов в программе.
 
ЗЫ
Загружать меньше (раз в месяц) не хочется.
 
...от среды разработки. Впрочем, неясности могу уточнить уже в конце этой недели.
 
  1. Все курсы (и кросс-курсы тоже) содержатся в таблице CurrencyRates.
  2. Каждая запись таблицы CurrencyRates содержит ровно один курс (соотношение валют).
  3. Не помню название колонки, в которой хранится дата курса (однако, оно должно быть вполне себе понятным); значение даты хранится в формате unixtime.
  4. Для "прореживания" курсов за прошлые годы, теоретически, можно проставить значение "1" в колонке Deleted, однако, в будущих версиях программы удаленные записи тоже будут загружаться в память, так что лучше реально удалить ненужные записи.
  5. Необязательно связываться с Excel-ем для удаления ненужных курсов, вполне себе можно составить SQL-запрос Delete, который удалит ненужные записи. Помочь с подготовкой этого запроса я смогу через несколько дней.
 
... есть колонка "RateDate" в ней "1356998400" ... не очень понятно (это еще культурно сказано, про себя любимого).
 
В окне "Редактирование ячейки БД" 3-и режима:
текст, двоичные данные, изображение.
"unixtime" - представления в таком режиме нет. Как определить дату мне чайнику не понятно Not so
Звиняйте...
 
Отвечу по памяти, так как сейчас нахожусь далеко

Спасибо, за ответ.
Спешки нет.
Как будет время, как сможете,  так и ответите, а то "совсем неудобняк" получается - замучал хорошего человека вопросами.
 
Как я понял Excel тоже вариант. Там и фильтр по дате и саму дату видно, выделять строки удобно, и соответственно их удалять. Муторно конечно, зато видишь что "грохаешь".
Главное таблицу очистить перед импортом, а то дубли записей пойдут (проверил уже методом научного тыка).
 
А зачем в будущих версиях "старье" держать?
Лучше уж выгружать в файл.
БД меньше от таких "удалений" не станет?
Не очень понятно Not so На случай отката наверно... Тогда зачем вообще удалять?
 
Опять из меня вопросы посыпались.... блиииин......
Спасибо еще раз Well
И отдельное СПАСИБО за терпение и труд!
 
свернуть/развернуть ветвь Поясню. [Dervish 29/11/2016 19:07] # написать ответ
 
Дата представлена как целое число. Подробнее о форматах представления можно прочитать в документации на SQLite, если не ошибаюсь, то смотреть нужно про unixepoch внизу страницы. Там есть и примеры, как смотреть значения. Но точнее смогу сказать только по возвращении.
 
А зачем в будущих версиях "старье" держать?
Краткий ответ: в целях синхронизации.
 
Немного более развернутый ответ: мы все-таки хотим, чтоб клиент для смартфона умел автоматически синхронизировать данные с программой для десктопа. Именно поэтому необходим некий механизм, который позволит отличать данные, которые были однажды добавлены в файл данных и потом удалены из него от данных, которые никогда не существовали в файле данных (в первом случае при синхронизации эти данные нужно поудалять со всех смартфонов, а во втором - добавить в файл данных десктопа).
 
Этот вопрос может казаться несущественным для курсов валют, но мне не хочется изобретать какой-то специальный алгоритм (подход) для курсов, хочется сделать все на едином подходе. Поэтому и говорю, что пока можно сделать просто удаление ненужных данных (пока синхронизация не реализована). А в будущем лучше помечать данные как удаленные, проставляя "1" в колонке Deleted.
 
Дата представлена как целое число. Подробнее о форматах представления можно прочитать в документации на SQLite, если не ошибаюсь, то смотреть нужно про unixepoch внизу страницы. Там есть и примеры, как смотреть значения. Но точнее смогу сказать только по возвращении.

 
Выполнил код:
SELECT datetime(1357862400, 'unixepoch')
Получил:
2013-01-11 00:00:00
Что за дата понятно. Не понял только - это надо выполнять код каждый раз, что бы понять что за дата проставлена в таблице?
В самой таблице курсов изменить представление даты на понятное нельзя?
 
Делаем так:
Text
SELECT *,datetime(RateDate,'unixepoch') FROM CurrencyRates

и получаем распечатку таблицы с читаемыми датами.
свернуть/развернуть ветвь получил... [Daniil 29/11/2016 21:00] # написать ответ
 
под окном ввода кода получил таблицу с читаемыми датами, но в ней нельзя правки вносить. Deleted на 1 не изменить.
На вкладке "данные" в таблице нового столбца не появилось.
Легче не сталоNot so
 
то можно сделать и через эксель:
добавляем в экселе еще одну колонку и вставляем в нее такую формулу
Text
=CELL/24/3600+"01/01/1970"

где CELL - ячейка с датой в unixtime. Фильтруем по этой колонке и удаляем все лишнее. Потом эту колонку тоже удаляем и импортируем данные обратно в программу.
 
... в экселе даты и так видны. там все "человеческим языком" написано.
 
... экономия более 50%
 
 
... стал меньше по размеру более чем на половину.
 
Может быть все же было бы полезно иметь в интерфейсе программы решение для прореживания курсов за старые периоды. Автоматическое решение может и навредить, поскольку разные валюты могут "заводиться" в программе в разные периоды и это надо учесть, или эти валюты просто останутся без курсов. Например Яндекс надо ввести один раз и этот курс может пропасть.
 
Хорошо бы иметь хотя бы групповое выделение курсов с помощью Shift и реальное удаление их из базы.
С учетом будущей синхронизации, возможно стоит сделать диалог при удалении: "безвозвратное удаление из БД или с возможностью восстановления" - это я про пометку удаляемых "1" в БД.
Или сделать сброс удаляемых курсов в отдельный файл, что бы можно было при необходимости опять загрузить и дублей не наделать при этом.
 
Удалял не только курсы. Удалил несколько валют. Чистить, так чиститьVery we!
Посмотрел после этого БД, а там все на месте с пометкой "1". Пришлось дочищать. Хорошо что при выгрузке в ексель удаленные данные не выгрузились. Это упростило работу.