|
|
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxGerasimenko, что в моём случае будет источником данных для OPENROWSET? Функция OPENROWSET(BULK…) Доступ к поставщику группового набора строк OPENROWSET производится через вызов функции OPENROWSET с указанием параметра BULK. Функция OPENROWSET(BULK…) обеспечивает доступ к удаленным данным, производя подключение к удаленному источнику данных, например файлу данных, через поставщик OLE DB. Чтобы импортировать групповые данные, вызовите функцию OPENROWSET(BULK…) из предложения SELECT…FROM инструкции INSERT. Основной синтаксис массового импорта данных: INSERT ... SELECT * FROM OPENROWSET(BULK...) При использовании инструкции INSERT функция OPENROWSET(BULK...) поддерживает табличные подсказки. Кроме обычных табличных подсказок, вроде TABLOCK, предложение BULK принимает следующие специальные табличные подсказки: IGNORE_CONSTRAINTS (не учитывается только ограничения CHECK), IGNORE_TRIGGERS, KEEPDEFAULTS и KEEPIDENTITY. Дополнительные сведения см. в разделе Табличные подсказки (Transact-SQL). Сведения о дополнительном использовании параметра BULK см. в разделе OPENROWSET (Transact-SQL). Выбирай, что тебе подходит: https://technet.microsoft.com/ru-ru/library/ms190312(v=sql.105).aspx (см примеры) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 16:03:39 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
Gerasimenko, 1. если бы я знал, что мне подходит, я бы уже выбрал 2. как я уже говорил, у меня нет доступа к серверу, а с сервера нет доступа к моим ресурсам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 16:27:54 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxGerasimenko, 1. если бы я знал, что мне подходит, я бы уже выбрал 2. как я уже говорил, у меня нет доступа к серверу, а с сервера нет доступа к моим ресурсам Ты как партизан не говоришь, что является первоначальным источником данных. Датасет - вторичен. Как вариант, сохранить файл в блоб на серверу, с сервера развернуть в начальный вид и использовать далее по ссылке... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 16:36:03 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
первичный источник данных один из следующих, любой: - эксель - запрос из оракла - dbf-файл - db-файл - запрос из dbf-файла - запрос из db-файла - запрос из mssql - запрос посредством ADO - запрос из IB/FB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 16:41:24 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxпервичный источник данных один из следующих, любой: - эксель - запрос из оракла - dbf-файл - db-файл - запрос из dbf-файла - запрос из db-файла - запрос из mssql - запрос посредством ADO - запрос из IB/FB т.е. ту часть, что нельзя линковать, можно слить через блоб, остальную через линковку. Если универсальный: то сохранять результаты как csv файл (возможно заархивированный) и сливать на сервер через блоб, если другого выхода нет. Ограничение: varbinary [( n | max)] двоичные данные переменной длины. nможет иметь значение от 1 до 8000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 16:54:05 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
вместо varbinary можно использовать image. Те же яйца, только ограничения другие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 17:10:46 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
tunknownandreymxили выбросить бинды и передавать данные литералами? ...о многократном разборе? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. примерно так сделал скорость раз в 15 меньше, чем булк инсерт в Оракле, но терпимо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2017, 16:23:50 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxскорость раз в 15 меньше, чем булк инсерт в Оракле, но терпимоИзмерялось общее время или длительность самого insert через profiler? Интересно, насколько быстр массовый биндинг на стороне DB-компонента/OLEDB провайдера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 09:56:17 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxДанные именно из Делфи, в другом месте их нет Очень заинтересовало, подскажите пожалуйста, в каком месте хранит Delphi данные, может пригодится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 12:31:31 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
stells2andreymxДанные именно из Делфи, в другом месте их нет Очень заинтересовало, подскажите пожалуйста, в каком месте хранит Delphi данные, может пригодится.в результате запроса, в dataset'e ЗЫ: Надеюсь, что помог ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 12:44:22 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxв результате запроса, в dataset'e Понятно, я уж думал delphi научился хранить данные. :) Ваш датасет берет данные откуда то, верно? А потом эти данные хочет закинуть на сервер, т.е. является посредником, правильно я понял? Тут речь не о хранении данных в delphi а об их обработки (надеюсь, это не визуальный интерфейс, типа АРМ, который даёт пользователю сотни тыс.строк данных) этих данных. Вариант плановой задачи по загрузки данных на самом MS SQL сервере не рассматривался? Напрямую, без использования delphi и прочих сред? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 12:52:08 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymx, В случае, если решено использовать приложение как посредника, надо четко понять - это в любом случае цикл с перебором всех строк и инсертом на каждую строку. Для этой операции нет необходимости к Table / Query прикручивать DataSource т.е. использовать визуализацию. Самый простой вариант: Открываем (можно даже динамически, в теле процедуры создать) пару таблиц, одна поднимет данные ваши, вторая подключиться к MS SQL и эти таблицы могут быть разные, т.е. одна может быть обычной TTable / TQuery вторая из ADO. Можно попробовать TBatchMove... Вообще, вся задача сводится к выполнению скрипта insert :) Какими бы средствами не пользовались, хоть cmd файлом. Но, одномоментная заливка сотен тысяч записей на сервер в любом случае будет его просаживать, и это владельцы сервера заметят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 13:17:09 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxкак наиболее быстро залить данные из Delphi 7 (датасет, массив) в таблицу MS SQL? Скажем, 100-300 тыс строк Данные именно из Делфи, в другом месте их нет IRowsetFastLoad (OLE DB) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 14:14:09 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
stells2andreymx, В случае, если решено использовать приложение как посредника, надо четко понять - это в любом случае цикл с перебором всех строк и инсертом на каждую строку. Для этой операции нет необходимости к Table / Query прикручивать DataSource т.е. использовать визуализацию. Самый простой вариант: Открываем (можно даже динамически, в теле процедуры создать) пару таблиц, одна поднимет данные ваши, вторая подключиться к MS SQL и эти таблицы могут быть разные, т.е. одна может быть обычной TTable / TQuery вторая из ADO. Можно попробовать TBatchMove... Вообще, вся задача сводится к выполнению скрипта insert :) Какими бы средствами не пользовались, хоть cmd файлом. Но, одномоментная заливка сотен тысяч записей на сервер в любом случае будет его просаживать, и это владельцы сервера заметят.спасибо за советы ЗЫ: в MSSQL сотни тысяч строк ещё не вставлял, но в Оракл из Экселя 300 тыс строк - аж бегом Появляются время от времени такие разовые задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 15:24:36 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
Uridianandreymxкак наиболее быстро залить данные из Delphi 7 (датасет, массив) в таблицу MS SQL? Скажем, 100-300 тыс строк Данные именно из Делфи, в другом месте их нет IRowsetFastLoad (OLE DB) тут уже обсуждали, http://www.sql.ru/forum/707391-1/irowsetfastload спасибо если в отпуске будет время, пороюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 15:35:11 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
А в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 17:05:48 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
MKZMА в чем проблема?уточни вопрос, плз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 21:13:12 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxUridianпропущено... IRowsetFastLoad (OLE DB) тут уже обсуждали, http://www.sql.ru/forum/707391-1/irowsetfastload спасибо если в отпуске будет время, пороюсьположу сюда еще ссылку https://gist.github.com/tondrej/bc12fdf82ad04d6738df8c2d50459231 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 21:55:10 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
Потихоньку разбираюсь с примером https://gist.github.com/tondrej/bc12fdf82ad04d6738df8c2d50459231 переписываю на делфи 7 Не все данные выгружаются, а только те, которые прописаны разрабом явно Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. выгрузка ftDateTime заработала сразу Выгрузку ftFloat сделал так, данные вроде выгружаются без ошибок: Код: pascal 1. 2. что делать со стрингами, вообще не представляю, знаний не хватает. Пробовал так, но в БД садится всякая хрень Код: pascal 1. 2. 3. 4. 5. в таблице делал поля и varchar, и nvarchar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2017, 17:25:05 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
andreymxв Оракл из Экселя 300 тыс строк - аж бегома чем уж вставляешь если не секрет? я файрдаком батч (правда не такой жирный) пуляю и если ошибок нет то весьма шустро ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 11:14:32 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
Здесь ещё неплохой пример, на итальянском правда http://fsoriano.developpez.com/articles/db/oledb/delphi/ Только не могу скачать исходники Или доступа нету, или "протухли" ftp://ftp-developpez.com/fsoriano/archives/etw/delphi/fichiers/etw-sources.zip http://fsoriano.developpez.com/articles/db/oledb/delphi/fichiers/oledb-sources.zip http://fsoriano.developpez.com/articles/db/oledb/delphi/fichiers/oledb.docx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 15:22:11 |
|
||
|
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
|
|||
|---|---|---|---|
|
#18+
вроде получилось, тестирую выгрузка 100 тыс строк идёт около 40 сек, что вполне нормально для моих целей проверял на типах данных Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. осталось разобраться с порядками полей запросе и таблице, т.к. привязка идёт не по имени, а, похоже, как раз по порядку полей в таблице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 16:17:07 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39541539&tid=2041634]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
372ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 658ms |

| 0 / 0 |
