![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Импорт из csv в базу [D6, dBase, FoxPro, Paradox]
Yurij-7 © (2005-11-07 12:25:00)Уважаемые Мастера, прошу помочь разобраться в сложившейся ситуации:
есть файл CSV который сначала загоняю в СтрингГрид а потом хочу импортить, перед импортом надо проверять существует ли запись с таким же идентификатором в базе, если да то отказаться от импорта, если нет то добавить запись.
Подскажите каким образом будет правильный импорт, как вариант я могу использовать исключительные ситуации (поле идентификатора будет индексным), но всеже хотелось это сделать через SQL, получаеться сначала надо делать селект с базы чтобы проверить чуществует ли запись а потом если результат пустой то добавить новую, или есть решение более правильное и проще?
Спасибо.
Yurij-7 (2005-11-07 15:22:00) [1]
> зачем вам визуализировать их? почему не грузить в любой
> доступный датасет в памяти, например ClientDataSet?
чесно сказать с подобным способом нестыкался - почитаю, узнаю как.
Спасибо огромное, информации получил достаточно, буду разбираться.
ANB (2005-11-07 14:30:00) [2]
> Yurij-7 (07.11.05 13:56) [8]
А я бы сделал так, как ты сам и предложил : т.е. через предварительный запрос. Напрягать систему исключений для сего, по моему, некузяво. А скорости не прибавится. Плюс исключение может произойти по любой другой причине и придется обрабатывать коды. А они у разных СУБД могут отличаться. Только не забудь повесить уникальный индекс.
Val (2005-11-07 14:26:00) [3]>[8] Yurij-7 (07.11.05 13:56)
> я так понял через блок try ... except ?
конечно.
> ну сначала все гружу в СтрингГрид
зачем вам визуализировать их? почему не грузить в любой доступный датасет в памяти, например ClientDataSet?
Yurij-7 (2005-11-07 13:56:00) [4]
> если вы делаете построчную вставку, то см.1. никакой разницы
> через квери или тейбл - пункты справедливы для обоих случаев.
>
я так понял через блок try ... except ?
> 2[5] Yurij-7 (07.11.05 13:43)
> Непонятно зачем тебе стринггрид, но это дело твое.
ну сначала все гружу в СтрингГрид, там автозаменяються значения, коректируються и идут в базу ...
Sergey13 (2005-11-07 13:47:00) [5]2[5] Yurij-7 (07.11.05 13:43)
Непонятно зачем тебе стринггрид, но это дело твое.
А почему не так - инсертишь новую запись, если возникает ИС - откатываешь и продолжаешь со следующей.
Val (2005-11-07 13:46:00) [6]если вы делаете построчную вставку, то см.1. никакой разницы через квери или тейбл - пункты справедливы для обоих случаев.
Yurij-7 (2005-11-07 13:43:00) [7]ну импорт я вижу так, беру значение идентификатора с стринг грида, потом по этому значению делаю селект из базы, если Кверик ничего не вернул то делаю инсер а если что то вернул то получаеться запись в базе уже есть.
Val (2005-11-07 13:36:00) [8]>[2] Yurij-7 (07.11.05 13:17)
можно воспользоваться загрузкой всех id на клиента в список, при вставке - искать.
Sergey13 (2005-11-07 13:29:00) [9]> получаеться сначала надо делать селект с базы чтобы проверить чуществует ли запись
Зачем это для отлова ИС?
Yurij-7 (2005-11-07 13:17:00) [10]ну я это описал для доступа через TTable (это для меня не самый лучший вариант) я хочу это все через SQL +TQuery делать.
Val (2005-11-07 13:09:00) [11]1.создать первичный ключ в таблице, куда качаете.
2.обрабатывать ошибку нарушения первичного ключа при вставке.