Имя: Пароль:
1C
1C 7.7
v7: Запись в DBF таблицу
0 vsy
 
21.03.24
12:22
Добрый день всем. Знатоки подскажите. Есть задача записать десятки тысяч строк в таблицу DBF. Хотелось бы одним запросом. Насколько я знаю у Visual FoxPro есть функция ExicutScript(), но при использовании выходит ошибка. Видимо слишком много аргументов. Кто подскажет, сколько переваривает за раз. Или может кто-то предложит какой нибудь способ, чтобы сократить время записи.
1 Андрей_Андреич
 
naïve
21.03.24
12:23
Убить индекс, записать, проиндексировать
2 Irbis
 
21.03.24
12:24
XBase чем не вариант, если надо непосредственно из 1С. А ручками и Excel в помощь.
3 vsy
 
21.03.24
12:25
Как записывать по одной записи что ли.
4 Волшебник
 
21.03.24
12:27
ExicutScript ? чё, серьёзно?

Запросом записать? чё, реально?
5 Irbis
 
21.03.24
12:28
(3) Ну, да. 10 тысяч — это ни о чём, все равно до записи в файл всё в память пишется. Запись файла на диск — отдельная песня. Вот когда надо пару миллионов строк записать приходится трудиться.
7 vsy
 
21.03.24
12:34
В том то и дело, что строк может быть и 10000000. Хотелось быстро записать. ради эксперимента попробовал записать по одному запросу 10000 строк, ушло ~15 сек. Это очень медленно.
8 vsy
 
21.03.24
12:40
(4) Я имел ввиду EXECSCRIPT.
9 Волшебник
 
21.03.24
12:41
(7) Пишите на диск SSD NVMe PCI Express 4.0
10 Волшебник
 
21.03.24
12:41
(7) Что в строках? Откуда миллион записей DBF?
11 Garykom
 
гуру
21.03.24
12:43
(0) Это легко
Достаточно изучить
http://www.autopark.ru/ASBProgrammerGuide/dbfstruc.htm
И банально писать что надо по байтикам в файлик
12 Irbis
 
21.03.24
12:43
(7) Вы уж определитесь, или 10 тыс. или 10 млн, применяемые средства уже могут серьёзно отличаться. В дополнение к (9) и желательно не писать "по сети", а то такое частенько бывает. нарежут админы шару, а она в другой стойке или в другом городе вообще.
13 Garykom
 
гуру
21.03.24
12:45
Хотя стандартно предлагаю воспользоваться микросервисом на Go
https://github.com/Valentin-Kaiser/go-dbase

Он простейший
https://github.com/Valentin-Kaiser/go-dbase/blob/main/examples/write/write.go
14 vsy
 
21.03.24
12:46
Посмотрел файлик из которого нужно сделать запросы, выходит порядка 20000 запросов. С миллионами погорячился.
15 Garykom
 
гуру
21.03.24
12:56
(14) еще во времена 1С 8.1 писал в файлики dbf миллионы записей
и ничего, за полчасика справлялось
сейчас думаю будут минуты а для 20тыщ всего секунды
16 vsy
 
21.03.24
12:57
Не хотелось городить огород. Семерка уже использует фоксовский драйвер, поэтому пусть он и записывает в стороннюю DBF таблицу.
17 Garykom
 
гуру
21.03.24
13:04
(16)
Семерка уже использует фоксовский драйвер

чего?
18 АгентБезопасной Нацио
 
21.03.24
13:13
(16) если в вашей семерке уже подключен фоксовский драйвер, и есть все данные - то запишите их прямым запросом :-)
(17) посмотри его темы, он цеплял фокса.
19 Garykom
 
гуру
21.03.24
13:18
(18) через ADO что ли?
20 vsy
 
21.03.24
13:35
(18) Да.
21 vsy
 
21.03.24
13:36
(18) Я так и делаю.
22 Garykom
 
гуру
21.03.24
13:57
Интересно сравнить скорость
100% что через ADO в один поток
А вот своим методом можно в много потоков фигачить в разные файлы а затем их соединить
23 Волшебник
 
21.03.24
14:15
(14) не надо применять слово "запросы" к записям и строчкам данных
24 Волшебник
 
21.03.24
14:17
(18) Если подключить DBF через задницу и кучу прослоек, то неудивительно, что будет тормозить. Используйте встроенные средства для работы с DBF (xBase)
25 MWWRuza
 
гуру
21.03.24
14:36
xBase - ну куда уж более чем штатный способ. И 20 000 - для него вообще не задача. Как будут миллионы отрабатывать, х.з... Но, 80 000 я писал, нормально, время не засекал - не было необходимости, как-то показалось адекватно быстро, засекать время и извращаться с ускорением как-то и не пришло в голову.
26 Garykom
 
гуру
21.03.24
14:37
(25) Через XBase встроенный есть куча ограничений
Например character поля с непечатными символами как id
27 Garykom
 
гуру
21.03.24
14:38
(26)+ тупейшая трабла с ограничением на имя (длина) файла dbf
28 Irbis
 
21.03.24
14:40
(27) А кто потом мешает переименовать наследство православного MS DOsa
29 Злопчинский
 
21.03.24
16:58
Длинные имена имеют соответствующие по формату 8.3, можно через короткие имена работать
30 Garykom
 
гуру
21.03.24
17:57
(29) зависит от файловой системы это ))
31 Djelf
 
21.03.24
18:11
Мы ТЗ не знаем. Теоретизировать без ТЗ можно до бесконечности.
32 Волшебник
 
21.03.24
18:18
(31) И не было ответа на (10)
33 MWWRuza
 
гуру
21.03.24
19:00
(32) Да нет там у него никаких миллионов... Какие-то несчастные 20 000, в (14) ответ от него был.
34 Волшебник
 
21.03.24
19:23
(33) Он не ответил на вопрос о характере записей. ЧТО в этом файле
35 Волшебник
 
21.03.24
19:25
Когда мисту воспринимают чисто технически как "волшебный форум" по любому вопросу, то сильно ошибаются. Здешние спецы могут пройтись вверх по уровням абстракции и объяснить Вам, почему Вы делаете всё неправильно и как надо делать правильнее. Но для этого нужно понятно объяснить смысл задачи, ответить на вопросы ЧТО и ЗАЧЕМ?
36 Irbis
 
21.03.24
20:06
Ещё лучше объяснят почему это делать не надо