Оба предлога возможны в зависимости от контекста.
Ошибки нет, всё корректно.
Указанная запятая нужна.
Верно: покупать у кого-то, покупал у Ивана.
Тире может ставиться по условиям контекста. Вне контекста для постановки тире нет оснований.
Кроме того, при паузе перед перечислением может ставиться двоеточие.