c6ee tps w2k
конвертю из dbf в tps (300 тыс.записей)
ждал 2 3 4 часа - бесполезно cpu занят при этом чуть-чуть
HDD горит лапочка - постоянно
Делал по 1000 записей затем снова stream и т .д. не помогло
где я ошибаюсь ?
Код: Выделить всё
! pens - tps
! re_pens - dbf
Access:pens.open
Access:re_pens.open
Access:pens.UseFile()
Access:re_pens.UseFile()
Logout(1,pens)
Lock(re_pens)
Stream(re_pens)
set(re_pens)
loop
next(re_pens)
if errorcode() then break .
pe:record :=: RE:record
add(pens)
end
Flush(re_pens)
Unlock(re_pens)
Commit()
END
message('!!!!!!!!!!!!!')
Access:pens.close
Access:re_pens.close
С уважением,
Талгат mailto:talgat@omsknet.ru
(г.Омск)
(Добавление)
Здравствуйте Талгат!
Каждые 1000 записей делай commit или переоткрывай файл!
В доке же написано это про ТПС.
--
С уважением, SAN mailto:vgsan@yandex.ru
Если даёшь Logout, то обязательно через какое-то число записей Commit, иначе происходит переполнение буфера ...Код: Выделить всё
Logout(1,pens)
Код: Выделить всё
Lock(re_pens) Stream(re_pens) set(re_pens)
Код: Выделить всё
RecNo#=0
Код: Выделить всё
loop next(re_pens) if errorcode() then break . pe:record :=: RE:record add(pens)
Код: Выделить всё
RecNO#+=1
If (RecNo# % 1000)=0
Commit
Logout(1,Pens)
End
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
(Добавление)
Stream и Flash применяются к тому файлу, в который пишешь, т.е. в данном случае - файл pens. Перед началом цикла - объявить и обнулить счетчик, например: rc long(0). Внутри цикла после добавления записи в файл увеличить счетчик на 1 и проверить содержимое на 1000. Если условие выполняется ( добавлено 1000 записей), то выполнить слив буфера в файл:
Flush(pens)
Stream(pens)
и далее - в начало цикла.
В этом случае можно обойтись без транзакций, т.е.
не нужны операторы Logout - Commit. Можно наоборот - как и рекомендуют наши гуру - не применять Stream - Flush, а применять Logout - Commit на каждую 1000 записей.
С уважением,
Александр Полонский
Для больших файлов и ключей этого мтбыть мало!!!Flush(pens)
Stream(pens)
и далее - в начало цикла.
--
С уважением, SAN mailto:vgsan@yandex.ru
(Добавление)
Вместо ADD поставь команду APPEND а в конце перестой ключи. У меня перезапись 2 500 000 записей идет 7 часов
С уважением
Виктор
vlenkov@mail.ru
Спасибо.
А где в конце - перестроить ?
--
С уважением,
Талгат
После перезаписи К тому-же для простой перезаписи совсем никчему включать
обработку транзакций
Код: Выделить всё
Access:pens.open
Access:re_pens.open
Access:pens.UseFile()
Access:re_pens.UseFile()
set(re_pens)
loop
next(re_pens)
if errorcode() then break .
pe:record :=: RE:record
append(pens)
end
message('!!!!!!!!!!!!!')
Access:pens.close
Access:re_pens.close
Виктор
(Добавление)
Кстати самый простой вариант сделать конверсионную программу в словаре Клара сделает ее быстро и грамотно и работать будет со скоростью конвертации файла
С уважением
Виктор
Где как...если не сложно.
Талгат Хайсаров
В словаре в меню Файл CREATE CONVERSION PPROGRAM FOR ONE TABLE
С уважением
Виктор
Спасибо.
А ежели структыры таблиц разные, то уже не подойдет этот вариант
--
С уважением,
Талгат
Если структуры разные, откорректируй техт ручками , там где идет присвоение переменных
С уважением
Виктор
Написал: ClaList(2)